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.