• ベストアンサー

Delphiにて、呼び元の情報を(グローバル変数を使わずに)渡したい。

OnClickイベント契機で呼び出す関数(仮に func_A(Sender: TObject) とします)に呼び元の情報を渡したいと思っています。 しかし、func_Aに引数が追加できず、困っています。 Public変数にして、Senderから取り出しても記憶されていないようです。 グローバル変数で渡すのも一手でしょうが、極力グローバル変数にはしたくありません。 何かいい手はないでしょうか。

質問者が選んだベストアンサー

  • ベストアンサー
  • SuperLe
  • ベストアンサー率44% (434/977)
回答No.2

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/
RKCP095
質問者

お礼

ありがとうございます。 やり方が間違っていたようです。 試してみます。

その他の回答 (2)

  • jmh
  • ベストアンサー率23% (71/304)
回答No.3

> func_Aに引数が追加できず… ナゼですか?

RKCP095
質問者

補足

知識不足です・・・。

  • papayuka
  • ベストアンサー率45% (1388/3066)
回答No.1

詳しく説明出来るほどの知識はないですが、、、 自分で作成した手続きなら渡せるのでは無いでしょうか? 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;

RKCP095
質問者

補足

違います。 papayukaさんの例で言うと、 TForm1.Button1Click に引数を追加したいのです。