Einzelnen Beitrag anzeigen

Benutzerbild von Rastaman
Rastaman

Registriert seit: 6. Jan 2005
Ort: Lübbecke
575 Beiträge
 
Turbo C++
 
#1

Childfenster anhand von Parent zentrieren

  Alt 21. Okt 2005, 14:28
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!
  Mit Zitat antworten Zitat