2011-11-19 15 views
7

Kullanıcı formunun ortasında kalıcı iletişim kutusunu görüntülemekte sorun yaşıyorum. FireMonkey ve sahibin form iletişim kutusunun formunu gösteren

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; 

çok tasarımcı pozisyon özelliğini değiştirmek için çalıştı, ancak iletişim merkezi görünüyor değildir: kalıcı iletişim göstermek için My kodudur.

Burada neyin yanlış olduğunu söyleyebilir misiniz?

cevap

8

Pozisyon, ShowModal tarafından FireMonkey'de uygulanmadı. Kullanabileceğiniz aşağıda sınıfı yardımcısı ile : Senden önce sdSettingsDialog.UpdateFormPosition ShowModal çağırır:

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

temel bir sınıf yardımcı kullanılması mi? –

+0

Zor soru David, hayır, sınıf yardımcı değil, tercih ederseniz: prosedür UpdateFormPos (aForm: TForm) benim misafirim. –

+3

@ArjenvanderSpek Teşekkürler, harika çalışıyor! Neden FireMonkey'in henüz bitmediğini hissediyorum ve yarım pişmiş kek gibi ... – evilone

İlgili konular