Смотpи описание функции MessageDlgPos.
Vladimir Zyrjanov
(2:5020/87.27)На самом деле выше описан не ответ на поставленный вопрос, а путь обхода.
Тем не менее, проблема решаема, например, с помощью установки обработчика специальных событий Windows. Ниже пример -
const hHook : Integer = 0; function SetInCentre(code: Integer; wparam: WPARAM; lparam: LPARAM): LRESULT stdcall; var R : TRect; X, Y : Integer; begin if code = HCBT_ACTIVATE then begin GetWindowRect(wparam, R); X := (Screen.Width - (R.Right - R.Left)) div 2; Y := (Screen.Height - (R.Bottom - R.Top)) div 2; SetWindowPos(wparam, 0, X, Y, 0, 0, SWP_NOSIZE or SWP_NOZORDER or SWP_NOACTIVATE); Result := CallNextHookEx(hHook, code, wparam, lparam); UnhookWindowsHookEx(hHook); hHook := 0; end else Result := 0; end; function CMessageBox(hWnd: HWND; lpText, lpCaption: PChar; uType: UINT): Integer; begin hHook := SetWindowsHookEx(WH_CBT, SetInCentre, 0, GetCurrentThreadId); try Result := MessageBox(hWnd, lpText, lpCaption, uType); finally if hHook <> 0 then begin UnhookWindowsHookEx(hHook); hHook := 0; end; end; end;
Функциональность метода CMessageBox аналогична функциональности Windows.MessageBox, однако первая функция дополнительно центрирует окно сообщения относительно экрана.
Pavel Schurenko
pasha@ics.kiev.ua