フォーム表示位置を任意の場所にするには?

解決


ぽぽろん  2009-04-07 01:45:56  No: 33896

こんにちは。お世話になります。

表題の件ですが、例えば親フォームにあるボタンをクリックした時に、
子フォームをボタンのすぐ上に表示したりはできますか?

親フォームが画面のどこにあっても、ボタンを押した時には
すぐ上に表示したいのですが、そういった操作はWin32APIで
Controlすることになるでしょうか?

すみませんが、要領がわらかないので、サンプル的なコードを
教えていただけると幸いです。

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


すぐ上とは?  2009-04-07 01:58:15  No: 33897

どのくらいかな?
親フォームが画面の一番上の位置にあったら?


Delphi大好き  2009-04-07 02:46:55  No: 33898

簡易コードですが以下でどうでしょうか??

Form1側

implementation

uses Unit2;

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
begin
  form2.Show;
end;

form2側

implementation

uses Unit1;

{$R *.DFM}

procedure TForm2.FormActivate(Sender: TObject);
begin
  if form1.Top < 10 then
    exit
  else
    form2.Top := form1.Top - 20;
end;

Form2側はOnActivateに書き込みます。
細かい数値はそちら側でも念の為試して下さい。

とりあえずこちら側では問題なく動きました^^。


動的生成ならば  2009-04-07 06:30:43  No: 33899

//子フォームを動的に生成して表示したいならこんな感じ

procedure TForm1.Button1Click(Sender: TObject);
var
  frm2 :TForm2;
  Pt   :TPoint;
  Btn  :TButton;
begin
  Btn  :=Sender as TButton;
  frm2 :=TForm2.Create(Self);
  try
    Pt :=ClientToScreen(Point(Btn.Left, Btn.Top));
    frm2.Left :=Pt.X;
    frm2.Top  :=Pt.Y - frm2.Height;
    frm2.ShowModal;
  finally
    FreeAndNil(frm2);
  end;
end;

ボタンがスクリーンの上のほうの場合の位置は、
ご自分で調整お願いしますよ。


Delphi大好き  2009-04-07 06:51:59  No: 33900

自分のはバグバグでしたね^^;
訂正すいません!^^;

アクティブなる度に、フォーム2が動きまわります(笑)。
フォームも少ししか上に出来ないし^^;

またバグあったらごめんなさい;

フォーム1

var
  Form1: TForm1;
  sw:boolean=false;
implementation

uses Unit2;

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
begin
  sw:=true;
  form2.Show;
end;

フォーム2  OnActivate部分

procedure TForm2.FormActivate(Sender: TObject);
begin
  if sw then begin
    form2.Top := form1.Top - 40;
    if form2.Top < 0 then
      form2.Top := 0;
  end;
  sw := false;
end;

で、取りあえず何とか^^;
ばりばりの初心者コードですが、
もし使って下さる奇特な方がいましたら是非^^;。


ぽぽろん  2009-04-07 19:03:56  No: 33901

レスくれた皆さん、ありがとうございました。
ClientToScreenでうまくいきそうです。
Delphi大好きさんも、レスありがとうです。
参考になりました^^


ぽぽろん  2009-04-07 19:04:44  No: 33902

解決です!


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

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






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