LoginSignup
1
1

More than 5 years have passed since last update.

子フォームをメインフォームの中央に表示

Last updated at Posted at 2016-01-08

子フォームをメインフォームの中央に表示したいのに
Position に poOwnerFormCenter を指定しても但し中央に表示されない場合の対処。

(拡張デスクトップを使用している場合、サブディスプレイにてアプリを実行中に正しく表示されない等といった場合)

  // 子フォーム TFXXXForm にて、プロパティもしくは、コードにて
  // poOwnerFormCenter もしは poMainFormCenter を指定している。
  Self.Position := poOwnerFormCenter;

  // のに、、中央に表示されない時がある。(´・ω・`)
仕方がないので、メインフォームの表示位置から計算して中央に表示されるようにしてみた例
procedure TFXXXForm.FormShow(Sender: TObject);
var
  r: TRect;
  x: Integer;
  y: Integer;
begin
  // フォームの表示は以下のプロパティを設定しておく
  // Form.Position := poDesigned;

  r := Application.MainForm.BoundsRect;

  x := r.Left + ((r.Right - r.Left) - Self.Width) div 2;
  y := r.Top + ((r.Bottom - r.Top) - Self.Height) div 2;
  Self.SetBounds(x, y, Self.Width, Self.Height);
end;

Mac、Windows では、上記で対処できていました。・ω・

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1