2011-11-19 37 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

ShowModal未在FireMonkey中實施該位置。 隨着類幫手下面你可以使用:你之前打電話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的疑問,沒有類助手不是必需的,如果你願意:procedure UpdateFormPos(aForm:TForm)是我的客人。 –

+3

@ArjenvanderSpek謝謝,它很好用!爲什麼我覺得FireMonkey還沒有完成,它就像半烤鬆餅一樣... – evilone

相關問題