7 Stimmen

FireMonkey und Anzeige eines modalen Dialogfelds im Zentrum des Besitzerformulars

Ich habe ein Problem mit der Anzeige eines modalen Dialogs in der Mitte des Hauptformulars. Mein Code für das Anzeigen des modalen Dialogs lautet:

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;

Habe auch versucht, die Positionseigenschaft im Designer zu ändern, aber es scheint den Dialog nicht zu zentrieren.

Kannst du mir sagen, was hier falsch ist?

8voto

Arjen van der Spek Punkte 2620

Position ist in FireMonkey nicht durch ShowModal implementiert. Mit dem unten stehenden Klassen-Helfer können Sie sdSettingsDialog.UpdateFormPosition verwenden, bevor Sie ShowModal aufrufen:

type
  TFormHelper = class helper for TForm
    procedure UpdateFormPosition;
  end;

procedure TFormHelper.UpdateFormPosition;
var
  RefForm: TCommonCustomForm;
begin
  RefForm := nil;

  case Position of
    // TFormPosition.poScreenCenter: in FMX.Forms implementiert (nur eine)
    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;

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X