Einzelnen Beitrag anzeigen

Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.475 Beiträge
 
Delphi 12 Athens
 
#7

AW: VCL Ersatz für GetSystemMetrics(SM_CYSIZE) bitte

  Alt 7. Apr 2018, 12:14
Mit folgender Methode bekommt man ein Form um einen bestimmten Punkt auf dem Desktop zentriert:
Delphi-Quellcode:
procedure CenterFormOnScreen(AForm: TForm; ACenter: TPoint);
var
  diff: TPoint;
begin
  diff := ACenter - AForm.ClientToScreen(AForm.ClientRect.CenterPoint);
  AForm.Left := AForm.Left + diff.X;
  AForm.Top := AForm.Top + diff.Y;
end;
Je nachdem, ob man die Taskleiste bei der Berechnung des Mittelpunkts berücksichtigen will, kann der Aufruf für einen Zielmonitor so aussehen:
Delphi-Quellcode:
    // ganzer Bereich
    CenterFormOnScreen(form, Monitor.BoundsRect.CenterPoint);

    // alternativ Bereich ohne Taskleiste
    CenterFormOnScreen(form, Monitor.WorkAreaRect.CenterPoint);

    // das Form dann z.B. modal anzeigen
    form.Position := poDesigned;
    form.ShowModal;
Sollte mit allen Auflösungen, DPI-Einstellungen und Monitor-Layouts funktionieren.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat