Diese Funktion zentriert ein Childfenster anhand ihres Parents (z.B Form1 und dem Desktop).
Da die Funktion mit SetWindowPos arbeitet kann man auch hier den Z-Achsen Wert des Fensters angeben (z.B HWND_TOPMOST).
Einfach mal F1 in Delphi drücken
Delphi-Quellcode:
function CenterWindow(WndParent, WndChild: HWND; WndPos: Cardinal): Bool;
var
PRec,
CRec: TRect;
begin
// Fensterkoordinaten ins TRect laden
GetClientRect(WndParent, PRec);
GetClientRect(WndChild, CRec);
// Parent muss größer sein als Child
if ((PRec.Right - PRec.Left) < (CRec.Right - CRec.Left)) or
((PRec.Bottom - PRec.Top) < (CRec.Bottom - CRec.Top)) then
begin
Result := False;
Exit;
end;
// Position setzen
SetWindowPos(WndChild, WndPos,
(PRec.Right - CRec.Right) div 2,
(PRec.Bottom - CRec.Bottom) div 2,
0, 0,
SWP_NOSIZE or SWP_NOACTIVATE);
Result := True;
end;
Beispielaufruf:
Delphi-Quellcode:
var
wnd: HWND;
begin
wnd := FindWindow('ProgMan', nil);
if CenterWindow(wnd, Form1.Handle, HWND_TOP) then
ShowMessage('Zentriert')
else
ShowMessage('Zentrieren fehlgeschlagen');
end;
Chuck Norris has counted to infinity ... twice!