2011-11-19 41 views
7

Tôi gặp sự cố khi hiển thị hộp thoại phương thức ở giữa biểu mẫu của chủ sở hữu. Mã của tôi để hiển thị hộp thoại phương thức là:FireMonkey và hiển thị trung tâm hội thoại phương thức của biểu mẫu chủ sở hữu

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; 

Đã cố gắng thay đổi Thuộc tính vị trí trong thiết kế, nhưng dường như không căn giữa hộp thoại.

Bạn có thể cho tôi biết có gì sai ở đây không?

Trả lời

8

Vị trí không được triển khai trong FireMonkey bởi ShowModal. Với helper lớp bên dưới, bạn có thể sử dụng: sdSettingsDialog.UpdateFormPosition trước khi bạn gọi 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

là việc sử dụng một helper lớp cần thiết? –

+0

Khó khăn câu hỏi David, không có lớp helper là không cần thiết, nếu bạn thích: thủ tục UpdateFormPos (aForm: TForm) là khách của tôi. –

+3

@ArjenvanderSpek Cảm ơn, nó hoạt động tuyệt vời! Tại sao tôi cảm thấy rằng FireMonkey vẫn chưa hoàn thành và nó giống như một nửa Muffin nướng ... – evilone

Các vấn đề liên quan