Вниз
Скачать: 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
2-1420270918
Drowsy
2015-01-03 10:41
2017.01.15
IDE Object Inspector Font , Explorer


1-1340491010
Dimka Maslov
2012-06-24 02:36
2017.01.15
Службы и иже с ними


2-1408987238
Black7777
2014-08-25 21:20
2017.01.15
TChromium DCEF3


2-1426309809
vrem
2015-03-14 08:10
2017.01.15
Uses разные unit автоматически - как?


15-1457514823
istok20
2016-03-09 12:13
2017.01.15
где искать фрилансеров по Delphi ?




   Наверх