- - PR -
【Delphi(デルファイ)】コントロール配列のつくりかた
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2006-06-16 14:11
ぽてCCPさん、レスありがとうございます。
delphiでも配列は存在しますが、 もちろん変数が変わることはありません。 変数の配列ではなく、コントロールの配列について質問しています。 | ||||||||
|
投稿日時: 2006-06-16 14:17
で やって見ましたか!記述が正しいのかどうかは不明ですが、うまくいくと思うのですが、 delphiはここ数年さわってないので、忘れた ちなみにVBと同じようにしようとすると 良さが発揮できません。 | ||||||||
|
投稿日時: 2006-06-16 14:18
==補足==
VBのコントロール配列を例にあげると Private Sub Command1_Click() Picture1.Picture = Image1.Picture End Sub Private Sub Command2_Click() Picture1.Picture = Image2.Picture End Sub Private Sub Command3_Click() Picture1.Picture = Image3.Picture End Sub ↓↓↓↓↓(上の様に同じ処理を何度も書くと面倒なので) ↓↓↓↓↓(コントロール配列に変更) Private Sub MyButton_Click(Index As Integer) Picture1.Picture = MyImage(Index).Picture End Sub ============== このような処理(コントロール配列)をdelphiでもできないのでしょうか? できるはずな気がするのですが、 VBでは「一つのボタンコントロールをコピペするだけでコントロール配列になる」 のに、delphiでは同じ様にやってもコントロール配列になりません。 | ||||||||
|
投稿日時: 2006-06-16 14:19
元記事をよく読んでいますか? でしゃばるアレではないですが、Delphi知っている人少ないと思いますので。 本当のコントロール配列をやろうとしてるわけではありません。 イベントプロシージャの共有です。 Delphiではメソッドポインタで .NETではデリゲートで実現しています。 ですから今回の場合は三つのボタンのOnClickに同じprocedureを代入すればOKです。 プロシージャ名はなんでもいいです。たとえばbtn1だからbtn1Clickでなければならないことはありません。 btn1.OnClick := a; // procedure なんとかフォーム.a(Sender: TObject); があればOKです。 DelphiなのでVB(6以前)と同じ考えかたしてもしょうがないです。 どうしてもコントロール配列がしたいなら「コントロール」の「配列」を作ってください。 それでも最後はやることが同じです。 今回は根本的にdelphiを理解してないのが原因です。 習う前に慣れろっのはコンピュータ業界においては おかしい考え方です。動かす前に基礎をまず学ぶ!!!! スポーツ界とかにおいてはありだと思いますが。 [ メッセージ編集済み 編集者: CHN# 編集日時 2006-06-16 14:34 ] | ||||||||
|
投稿日時: 2006-06-16 14:20
これでどうでしょう?
ボタンクリックのイベントのあとに数字が入っていたから わかりにくかったのでしょうか? 3つのボタンのONCLICKイベントにはBtnClickと入れてみてください。 ボタン1・ボタン2・ボタン3のをクリックすると ONCLICKイベントのBtnClickのイベントを実行します。 ボタン1をクリックしたのであれば、BTN1の4文字目が1なので、キャプションには1 ボタン2をクリックしたのであれば、BTN2の4文字目が2なので、キャプションには2 が表示されるはずです。 必要ないかと思いますが、ロジックを貼り付けておきます。 unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Btn1: TButton; Btn2: TButton; Btn3: TButton; Label1: TLabel; procedure BtnClick(Sender: TObject); private { Private 宣言 } public { Public 宣言 } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.BtnClick(Sender: TObject); var s : Char ; begin if Sender is TButton then begin s := TButton(Sender).Name[4] ; Label1.Caption := s; end; end ; end. | ||||||||
|
投稿日時: 2006-06-16 14:23
私が以前記述したコードでは、 btn3のクリックイベントしかない為かbtn3以外のボタンをクリックしても 音沙汰がないわけです。 ということはコントロール配列ができてないのだと思います。 コードの記述法よりも前に、 コントロールオブジェクト的にどうやったらコントロール配列になるのでしょう(;_? | ||||||||
|
投稿日時: 2006-06-16 14:52
こんにちは。
わしこさんは VB.NET を利用したことがある方だと思いますが(以前 Insider.NET で 質問されていましたし) Delphi は VB (この場合は 6.0 )よりは VB.NET に近い感じ だと思います。 提示していただいたコードを見ると、btn3Click() が生成されるところまではできているよ うなので、あとは未記入さんのおっしゃるとおり、ボタン1〜3の OnClick イベントに btn3Click() を割り当ててあげればご希望の操作はできると思います。 まずは btn1 と btn2 を選択して、オブジェクトインスペクタのイベントタブを表示 イベント一覧の中に OnClick と書かれたものがあると思うので、その中に btn3Click と入力 (コンボボックスになっているので、そこから選択することもできます) 以上のような感じでどうでしょうか。
他の方もおっしゃっていますが、Delphi には VB6.0 で言うところの「コントロール配列」 といった概念はありません。 正直言って、わしこさんの挙げていただいたページは役に立たないと思います。そのペー ジで教えているのは「イベントプロシージャの共有」であり、コントロール配列でもなんでも ありません。誤解を招くような書き方をしているそのページはちょっと考えモノだと思います が、そもそもトップページからリンクされていない「死んだページ」のようなので、そういったも のを参照すべきではないのかもしれません。 わしこさんがやりたい(と私が思っている)ことは、未記入さんの回答で十分説明されてい ると思うのですが、それを理解できておられないようでは、そもそも掲示板で質問すること も考えられたほうが良いかと思います(厳しいようですが)。 Delphi がいくら簡単だと言っても VB6.0 とは違いますので、それぞれの文法の差です とか言語の差をもう少し勉強されてからの方が良いと考えます。 | ||||||||
|
投稿日時: 2006-06-16 14:54
CHN#さん、未記入さん、レスありがとうございます。
>三つのボタンのOnClickに同じprocedureを代入すればOK ↑ これは未記入さんが掲示してくださったコードと同じ意味ですよね。 ―という事は、delphiではVBで使用していたようなコントロール配列とやらは 存在しないということですね。 結局、3つのイベントを書くしかないわけですね。 極端な話、ボタンが100個あっても100つのイベントを書くしかないわけですか…。 >「コントロール」の「配列」 最悪これしかないですね。
確かにdelphiについてまだまだ理解が浅いのはご指摘のとおりですが、 基礎を学ぶ上の確認として、今回こうやって質問させて頂ました。 http://www.w-frontier.com/delphi/4_calc.html にコントロール配列の作り方を掲示してあるにかかわらず まったく予期しない動作をしたから質問させていただいているのです。 卓上で基礎を学ぶことが必ずしも正しいとは思いません。 [ メッセージ編集済み 編集者: わしこ 編集日時 2006-06-16 14:55 ] |