2011-11-19 8 views
7

オーナーフォームの中央にモーダルダイアログを表示する際に問題があります。モーダルダイアログを表示する私のコードは:FireMonkeyとオーナー様式のモーダルダイアログセンターを表示

procedure TfrmMain.btnOpenSettingsClick(Sender: TObject); 
var 
    sdSettingsDialog: TdlgSettings; 

begin 
    sdSettingsDialog := TdlgSettings.Create(Self); 
    sdSettingsDialog.Position := TFormPosition.poOwnerFormCenter; 

    try 
     sdSettingsDialog.ShowModal; 
    finally 
    sdSettingsDialog.Free; 
    end; 
end; 

デザイナーの位置プロパティを変更しようとしましたが、ダイアログを中心にしていないようです。

ここで何が間違っているのか教えてもらえますか?

答えて

8

位置はFireMonkeyではShowModalによって実装されていません。 sdSettingsDialog.UpdateFormPositionをあなたはShowModalを呼び出す前に:あなたが使用することができ、以下のクラスヘルパーで

type 
    TFormHelper = class helper for TForm 
    procedure UpdateFormPosition; 
    end; 

procedure TFormHelper.UpdateFormPosition; 
var 
    RefForm: TCommonCustomForm; 
begin 
    RefForm := nil; 

    case Position of 
    // TFormPosition.poScreenCenter: implemented in FMX.Forms (only one) 
    TFormPosition.poOwnerFormCenter: 
     if Assigned(Owner) and (Owner is TCommonCustomForm) then 
     RefForm := Owner as TCommonCustomForm; 
    TFormPosition.poMainFormCenter: 
     RefForm := Application.MainForm; 
    end; 

    if Assigned(RefForm) then 
    begin 
    SetBounds(
     System.Round((RefForm.Width - Width)/2) + RefForm.Left, 
     System.Round((RefForm.Height - Height)/2) + RefForm.Top, 
     Width, Height); 
    end; 
end; 
+0

が不可欠クラスヘルパーの使用ですか? –

+0

難しい質問David、いいえ、あなたが好きなら、クラスヘルパーは必須ではありません:手続きUpdateFormPos(aForm:TForm)は私のゲストです。 –

+3

@ArjenvanderSpekありがとう、それは素晴らしい作品!なぜ私はFireMonkeyがまだ完成していないと感じているのですが、それは半分焼いたマフィンのようなものです... – evilone

関連する問題