15番会議室「FAQ編纂委員会」に寄せられた「よくある質問の答え」
[Q]
プログラム実行中に動的にCreateしたコンポーネントやオブジェクトの
イベントハンドラの設定はどのようにしたら良いのでしょう?
[A]
実は、イベントハンドラもプロパティと同じ扱いで、単にメソッドを代入
してやるだけで設定することができます。
しかし、イベントの種類によって、ハンドラのパラメータが違うので、こ
れを合せてやる必要があります。これも「型」の一種で、String型には
String型の代入、等と同じように同じ型にしなければならないという事です。
もっとも単純なイベントハンドラの型はOnClickやOnChange等で使われて
いる、Sender : TObjectというパラメータを1つ持つ物です。例1を参
照して下さい。
もう少し複雑なものとしてはOnMouseDownイベントが有ります。例2を参
照して下さい。
これらのイベントハンドラの型を知る(パラメータの種類を知る)一番
簡単な方法は、一旦フォーム上にコンポーネントを配置し、必要なイベ
ントをオブジェクトインスペクタから作成し、コピーしてしまう事です。
[例]
*****************************************************
* *
* 1 *
* *
*****************************************************
OnClickイベントハンドラの設定。
先ず、フォームのPrivate部に、メソッドの宣言を記述します。
Type
TForm1 = Class(TForm)
・
・
・
Private
Button : TButton; // Createするボタンの宣言
Procedure NewClick(Sender : TObject); //これを追加
・
・
End;
次に、Implementation部より後に、このメソッドの実装を記述します。
Implementation
Procedure TForm1.NewClick(Sender : TObject);
Begin
ShowMessage(TComponent(Sender).Name);
End;
フォームのOnCreateイベント等で、ボタンをCreateします。
procedure TForm1.FormCreate(Sender: TObject);
begin
Button := TButton.Create(Self) Do
Button.Parent := Self;
Button.Caption := 'New Create';
Button.OnClick := NewClick; //イベントハンドラの代入
end;
*****************************************************
* *
* 2 *
* *
*****************************************************
OnMouseDownイベントハンドラの設定。
Type
TForm1 = Class(TForm)
・
・
・
Private
Button : TButton; // Createするボタンの宣言
procedure NewMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
・
・
End;
次に、Implementation部より後に、このメソッドの実装を記述します。
Implementation
procedure TForm1.NewMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
Begin
TButton(Sender).Caption := 'X = ' + IntToStr(X) +
'Y = ' + IntToStr(Y);
End;
フォームのOnCreateイベント等で、ボタンをCreateします。
procedure TForm1.FormCreate(Sender: TObject);
begin
Button := TButton.Create(Self) Do
Button.Parent := Self;
Button.Caption := 'New Create';
Button.OnMouseDown := NewMouseDown; //イベントハンドラの代入
end;
ここにあるドキュメントは NIFTY SERVEの Delphi Users' Forum FDELPHIに寄せられる質問の中から、よくある質問への回答を FDELPHIのメンバーがまとめたものです。 したがって、これらの回答はボーランド株式会社がサポートする公式のものではなく、掲示されている内容についての問い合わせは受けられない場合があります。
Copyright 1996-1998 Delphi Users' ForumFAQ編纂委員会
|