- ベストアンサー
Delphiにて、呼び元の情報を(グローバル変数を使わずに)渡したい。
OnClickイベント契機で呼び出す関数(仮に func_A(Sender: TObject) とします)に呼び元の情報を渡したいと思っています。 しかし、func_Aに引数が追加できず、困っています。 Public変数にして、Senderから取り出しても記憶されていないようです。 グローバル変数で渡すのも一手でしょうが、極力グローバル変数にはしたくありません。 何かいい手はないでしょうか。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
Senderの型をキャストしましたか? 例えば、 if Sender is TButton then begin ShowMessage(ColorToString((Sender as TButton).Font.Color)); end; というクリックイベントを、ボタンと、ビットボタンとスピードボタンのonClick に設定してやると、ボタンとビットボタンの時のみ表示されます。 これを応用して、クリックするのがサブクラスであれば、そのサブクラスにキャストしてやれば読めるはずですよ。 type TMyButton=object(TButton) public TestParameter:string; end; だとし、そのボタンを配置し、押された場合、onclickイベントで、 ローカル変数 var Data:string; として if sender is TMyButton then begin Data:=(sender as TMyButton).TestParameter; ~Dataに対する処理 end; で、読めるはずです。
- 参考URL:
- http://fdelphi.nifty.com/
その他の回答 (2)
- jmh
- ベストアンサー率23% (71/304)
> func_Aに引数が追加できず… ナゼですか?
補足
知識不足です・・・。
- papayuka
- ベストアンサー率45% (1388/3066)
詳しく説明出来るほどの知識はないですが、、、 自分で作成した手続きなら渡せるのでは無いでしょうか? procedure TForm1.Button1Click(Sender: TObject); var cnt : integer; begin cnt := 1; ShowMessage('cnt は' + IntToStr(Cnt)); func_A(Sender,cnt); ShowMessage('cnt は' + IntToStr(Cnt)); end; procedure TForm1.func_A(Sender: TObject; var i:integer ); begin ShowMessage(TButton(Sender).Caption + 'から' + IntToStr(i) + 'が渡されました' + #13#10 + '1を足します'); Inc(i); end;
補足
違います。 papayukaさんの例で言うと、 TForm1.Button1Click に引数を追加したいのです。
お礼
ありがとうございます。 やり方が間違っていたようです。 試してみます。