初心者の質問ですいません。
現在のフォーカス名を取得したいのですが、どうしたらいいのかが
わかりません。どなたかご教授願います。
例:
複数のボタンがあって
procedure TForm1.btClick(Sender: TObject);
var
btname : string;
begin
btname : 〜.name; //ここで現在のボタンの名前を取得したい
with btname do //ここの記述もわかりません
begin
TOP:=100;
LEFT:=200;
end;
end;
フォーカスがあるかどうか解りませんが、このOnClickイベントを呼び出した元は、Senderで解ります。
btname := TButton(Sender);
で、btnameが押されたボタンになります。
にしのさん、早速のご教授有難うございます。
今回の場合、変数をTButtonクラスで宣言することでできましたが、
これがもし、多種のクラスの場合はどうすればいいのでしょうか?
参考例があれば是非教えていただきたいのですが・・・。
以下のようにすれば btname に代入しなくても済みますね。
as の後に呼び出したもの(TObject)を書けばOK。
with Sender as TButton do
with Sender as TBitBtn do
with Sender as TSpeedButton do
へびあしくん(さん?)レスありがとうございます。
どうも僕は理解力がないようで、
With Sender as (TObject) do を複数書けということでは
ないですよね?
目的は複数タイプのクラスの、あるイベントを一つのロジックで行いたい
ということなのですが。
しかし、また新たなやり方を教わったので早速使ってみます。
ありがとうございました。
解決チェック忘れました(f^^)
> 目的は複数タイプのクラスの、あるイベントを一つのロジックで行いたい
> ということなのですが。
複数の違う種類のコントロールに同じ処理をしたいなら、以下のように
すべて TButton キャストすればOK。(共通のプロパティを設定する場合)
※ OnClick イベントに反応しないコントロールは、OnEnter で。
with TButton(Sender) do begin
TOP := 100;
LEFT := 200;
end;
もし、コントロールの種類ごとに別の処理をしたいのなら、
if Sender is TComboBox then begin
TComboBox(Sender).TOP := 250;
TComboBox(Sender).LEFT := 200;
end else
if Sender is TListBox then begin
TListBox(Sender).TOP := 200;
TListBox(Sender).LEFT := 200;
end else
if Sender is TMemo then begin
TMemo(Sender).TOP := 150;
TMemo(Sender).LEFT := 200;
end else
if Sender is TSpeedButton then begin
TButton(Sender).TOP := 150;
TButton(Sender).LEFT := 400;
end else
if Sender is TBitBtn then begin
TButton(Sender).TOP := 150;
TButton(Sender).LEFT := 300;
end else
with TButton(Sender) do begin
TOP := 100;
LEFT := 200;
end;
とんそくさん。有難うございます。
なるほど、大変勉強になりました。早速使ってみます。
これからもよろしくお願いします。
ツイート | ![]() |