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

相关问题