СообЧа > База Знаний > Программирование > Delphi

Вопрос

Как центрировать по форме модальный диалог?

Ответ

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 Сообщество Чайников
Контактная информация