Formを判別する方法

解決


@っしー  2004-06-24 20:22:01  No: 9627  IP: [192.*.*.*]

お世話になっております。

早速質問なんですが、よろしくお願いします。

例えば、Form1上にPanel1を貼り付け、Panel1上にGroupBox1を貼り付け、GroupBox1内にButton1を貼り付けたとします。

Button1のクリックイベントで、Button1が属するForm1を自動判別するには、どうすればよいのでしょうか?

なお、Buttonの配置は場合によって変化します。

よろしくお願いいたします。

編集    削除
jok  2004-06-24 20:35:31  No: 9628  IP: [192.*.*.*]

procedure TForm1.Button1Click(Sender: TObject);
begin
  Button1.Caption := Button1.Owner.Name;
end;

編集    削除
@っしー  2004-06-24 20:59:10  No: 9629  IP: [192.*.*.*]

jokさん、ありがとうございます。

教えていただいたサンプルソースで、Formの名前を取得できる事は確認できました。

実際にやりたかった事は、Form1からForm2を表示する際に、Form1の表示位置からOffset分ずらして表示したかったのでした。

const
  intOffset: integer = 20;

procedure TForm1.Button1Click(Sender: TObject);
begin

  //ShowMessage((Sender as TButton).Owner.Name); <-確認済み

  Form2 := TForm2.Create(Self);
  try
    with Form2 do
    begin
      Position := poDesigned;
      Top := TForm((Sender as TButton).Owner).Top + intOffset;
      Left:= TForm((Sender as TButton).Owner).Left+ intOffset;
      ShowModal;
    end;
  finally
    Form2.Free;
  end;
end;

編集    削除
jok  2004-06-25 02:15:57  No: 9630  IP: [192.*.*.*]

> Form1からForm2を表示する際に、Form1の表示位置からOffset分ずらして表示したかったのでした。

Button1Click イベントハンドラは TForm1 のメソッドですから、そのインスタンス
を参照するときは self が使えますよ。こんな感じです。

const
  intOffset: integer = 50;

procedure TForm1.Button1Click(Sender: TObject);
begin
  Form2 := TForm2.Create(Application);
  try
    with Form2 do
    begin
      Position := poDesigned;
      Top := self.Top + intOffset;
      Left:= self.Left+ intOffset;
      ShowModal;
    end;
  finally
    Form2.Free;
  end;
end;

編集    削除
@っしー  2004-06-25 19:29:39  No: 9631  IP: [192.*.*.*]

追加情報ありがとうございます。

ご提示していただいたコードの方が汎用性がありますね。

大変勉強になります。

ありがとうございました。

編集    削除