Главная страница
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.015 c
15-1456992174
Pavia
2016-03-03 11:02
2017.01.15
Сертификация ПО и патентные исследования


15-1452693339
кгшзх
2016-01-13 16:55
2017.01.15
TClientDataSet склеить датапакеты


15-1448570868
DayGaykin
2015-11-26 23:47
2017.01.15
Добавление зависимых записей.


2-1432209907
Pavelnk
2015-05-21 15:05
2017.01.15
Запись в ini файл


6-1256640553
Encore
2009-10-27 13:49
2017.01.15
Post/get неверная кодировка