Delphi FAQ - Как центрировать по форме модальный диалог?
ОГЛАВЛЕНИЕ
Страница 66 из 86
Как центрировать по форме модальный диалог?
procedure CenterDialogPos(DlgHandle, WindowHandle: HWND);
var
DlgRect : TRect;
WndRect : TRect;
x, y, w, h : integer;
begin
if (DlgHandle <> 0) then begin
GetWindowRect(DlgHandle, DlgRect);
GetWindowRect(WindowHandle, WndRect);
w := DlgRect.Right - DlgRect.Left;
h := DlgRect.Bottom - DlgRect.Top;
file://center horz
x := WndRect.Left + ((WndRect.Right - WndRect.Left - w) div 2);
file://keep on screen
if x < 0 then x := 0
else if x + w > Screen.Width then x := Screen.Width - w;
file://center vert
y := WndRect.Top + ((WndRect.Bottom - WndRect.Top - h) div 2);
file://keep on screen
if y < 0 then y := 0
else if y + h > Screen.Height then y := Screen.Height - h;
SetWindowPos(DlgHandle, 0, x, y, 0, 0, SWP_NOACTIVATE or SWP_NOSIZE or
SWP_NOZORDER);
end;
end;
procedure TForm1.WMUser1(var msg: TMessage); // message WM_USER+1;
begin
CenterDialogPos(GetActiveWindow, Handle);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
PostMessage(Handle, WM_USER+1, 0, 0);
ShowMessage('Test');
end;