プロが教えるわが家の防犯対策術!

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

A 回答 (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/
    • good
    • 0
この回答へのお礼

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

お礼日時:2005/12/01 22:21

> func_Aに引数が追加できず…



ナゼですか?

この回答への補足

知識不足です・・・。

補足日時:2005/12/01 22:19
    • good
    • 0

詳しく説明出来るほどの知識はないですが、、、


自分で作成した手続きなら渡せるのでは無いでしょうか?

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
に引数を追加したいのです。

補足日時:2005/12/01 22:05
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!