子フォームをメインフォームの中央に表示したいのに
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 では、上記で対処できていました。・ω・