Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2017.01.15;
Скачать: 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 вся ветка

Текущий архив: 2017.01.15;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.022 c
2-1420632130
enzain
2015-01-07 15:02
2017.01.15
"Image File Execution Options" и параметр debugger


15-1451175767
Kerk
2015-12-27 03:22
2017.01.15
А порекомендуйте хорошее крымское вино


2-1425269230
Nickolay
2015-03-02 07:07
2017.01.15
Отображение содержимого папок


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


15-1451943001
Юрий
2016-01-05 00:30
2017.01.15
С днем рождения ! 5 января 2016 вторник