現在のフォーカスを識別するには?

解決


チャトラ  2002-05-11 16:50:20  No: 858  IP: [192.*.*.*]

初心者の質問ですいません。
現在のフォーカス名を取得したいのですが、どうしたらいいのかが
わかりません。どなたかご教授願います。
例:
  複数のボタンがあって
procedure TForm1.btClick(Sender: TObject);
var
 btname : string;
begin
 btname : 〜.name; //ここで現在のボタンの名前を取得したい
 with btname do    //ここの記述もわかりません
    begin
      TOP:=100;
      LEFT:=200;
    end;
end;

編集 削除
にしの  2002-05-11 22:06:52  No: 859  IP: [192.*.*.*]

フォーカスがあるかどうか解りませんが、このOnClickイベントを呼び出した元は、Senderで解ります。

btname := TButton(Sender);

で、btnameが押されたボタンになります。

編集 削除
チャトラ  2002-05-12 00:20:14  No: 860  IP: [192.*.*.*]

にしのさん、早速のご教授有難うございます。
今回の場合、変数をTButtonクラスで宣言することでできましたが、
これがもし、多種のクラスの場合はどうすればいいのでしょうか?
参考例があれば是非教えていただきたいのですが・・・。

編集 削除
へびあしくん  2002-05-12 00:59:48  No: 861  IP: [192.*.*.*]

以下のようにすれば btname に代入しなくても済みますね。
as の後に呼び出したもの(TObject)を書けばOK。

with Sender as TButton do
with Sender as TBitBtn do
with Sender as TSpeedButton do

編集 削除
チャトラ  2002-05-17 21:08:16  No: 862  IP: [192.*.*.*]

へびあしくん(さん?)レスありがとうございます。
どうも僕は理解力がないようで、
With Sender as (TObject) do  を複数書けということでは
ないですよね?
目的は複数タイプのクラスの、あるイベントを一つのロジックで行いたい
ということなのですが。
しかし、また新たなやり方を教わったので早速使ってみます。
ありがとうございました。

編集 削除
チャトラ  2002-05-17 21:09:22  No: 863  IP: [192.*.*.*]

解決チェック忘れました(f^^)

編集 削除
とんそく  2002-05-18 00:02:36  No: 864  IP: [192.*.*.*]

> 目的は複数タイプのクラスの、あるイベントを一つのロジックで行いたい
> ということなのですが。

複数の違う種類のコントロールに同じ処理をしたいなら、以下のように
すべて 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;

編集 削除
チャトラ  2002-05-18 17:46:13  No: 865  IP: [192.*.*.*]

とんそくさん。有難うございます。
なるほど、大変勉強になりました。早速使ってみます。
これからもよろしくお願いします。

編集 削除