Форум: "Начинающим";
Текущий архив: 2017.01.15;
Скачать: [xml.tar.bz2];
ВнизПриостановка работы хука Найти похожие ветки
← →
Боб (2015-01-18 15:21) [0]Нашёл в интернете функцию, позволяющую выводить MessageBox’ы посередине родительской формы, а не экрана. Код работает безотказно.
…
implementation
{$R *.dfm}
var
MyHook: HHOOK;
X, Y: Integer;
function HookProc(const Code, WParam, lParam: DWORD): DWORD; stdcall;
var
This, That: TRect;
begin
if (Code = HCBT_ACTIVATE) then
begin
GetWindowRect(WParam, This);
GetWindowRect(Form1.Handle, That);
X := (That.Left + (That.Right - That.Left) shr 1) -
((This.Right - This.Left) shr 1);
Y := (That.Top + (That.Bottom - That.Top) shr 1) -
((This.Bottom - This.Top) shr 1);
SetWindowPos(WParam, 0, X, Y, 0, 0,
SWP_NOSIZE + SWP_NOZORDER + SWP_NOACTIVATE);
end;
Result := CallNextHookEx(MyHook, Code, WParam, lParam);
end;
…
procedure TForm1.FormCreate(Sender: TObject);
begin
MyHook := SetWindowsHookEx(HCBT_ACTIVATE, @HookProc, HInstance,
GetCurrentThreadID);
end;
Сейчас мне захотелось слегка расширить этот функционал: чтобы, когда часть формы находится за пределами Рабочего стола, то выводить диалоговые окна не посередине уже по центру экрана (стандартно).
Вот моя реализация, которая ни фига не работает.
private
procedure WMExitSizeMove(var Msg: TMessage); message WM_EXITSIZEMOVE;
…
procedure TForm1.WMExitSizeMove(var Msg: TMessage);
begin
if (Form1.Left < 0) or (Form1.Top < 0) or
((Form1.Left + Form1.Width) > Screen.Width) or
((Form1.Top + Form1.Height) > Screen.Height) then
UnhookWindowsHookEx(MyHook)
else
MyHook := SetWindowsHookEx(HCBT_ACTIVATE, @HookProc, HInstance,
GetCurrentThreadID);
inherited;
end;
Как можно приостановить на время работу этого хука?
← →
Smile © (2015-01-18 17:44) [1]> Нашёл в интернете функцию, позволяющую выводить MessageBox’ы посередине родительской формы
Чем стандартный MessageDlgPos не устраивал, позволяющий выводить в любом месте родительской формы?
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2017.01.15;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.053 c