Вопрос
Как центрировать по форме модальный диалог?
Ответ
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;
//center horz
x := WndRect.Left + ((WndRect.Right — WndRect.Left — w) div 2);
//keep on screen
if x < 0 then x := 0
else if x + w > Screen.Width then x := Screen.Width — w;
//center vert
y := WndRect.Top + ((WndRect.Bottom — WndRect.Top — h) div 2);
//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;
Из конференции Delphi
Copyright 2000-2004 Сообщество Чайников
Контактная информация