2011-11-19 6 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; 

디자이너의 Position 속성을 변경하려고 시도했지만 대화 상자를 가운데 정렬하지 않는 것 같습니다.

여기에 무슨 문제가 있다고 말해 줄 수 있습니까?

답변

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, 아니요 클래스 도우미는 필수적이지 않습니다. 프로 시저 UpdateFormPos (aForm : TForm) 프로 시저를 선호합니다. –

+3

@ArjenvanderSpek 감사합니다. 훌륭한 작품입니다! 왜 내가 FireMonkey가 아직 완성되지 않았으며 반쯤 구운 머핀과 같은 느낌 일까? – evilone

관련 문제