Вниз
Скачать: CL | DM;

Приостановка работы хука   Найти похожие ветки 

 
Боб   (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 вся ветка

Скачать: CL | DM;



Память: 0.45 MB
Время: 0.013 c
15-1454413847
Кто б сомневался
2016-02-02 14:50
2017.01.15
Запустить с обычными правами из под проги с админ. правами


2-1427700274
aka
2015-03-30 10:24
2017.01.15
ускорение свободного падения


2-1431696831
Дмитрий
2015-05-15 16:33
2017.01.15
Редактирование двух связанных таблиц в одной строке таблицы


3-1311770178
SQLEXPRESS
2011-07-27 16:36
2017.01.15
Ни кто не не желает в SQL размяться? Время исполнения


15-1449351004
Юрий
2015-12-06 00:30
2017.01.15
С днем рождения ! 6 декабря 2015 воскресенье




   Наверх