Formを判別する方法

解決


@っしー  2004-06-24 20:22:01  No: 9627

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

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

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

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

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

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


jok  2004-06-24 20:35:31  No: 9628

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


@っしー  2004-06-24 20:59:10  No: 9629

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

> 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

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

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

大変勉強になります。

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


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加