Главная страница
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.017 c
2-1421583719
Боб
2015-01-18 15:21
2017.01.15
Приостановка работы хука


15-1447936212
Kerk
2015-11-19 15:30
2017.01.15
Сохранение позиции и размера формы


15-1450387804
Юрий
2015-12-18 00:30
2017.01.15
С днем рождения ! 18 декабря 2015 пятница


15-1451551751
кгшзх
2015-12-31 11:49
2017.01.15
взлетит или не заморачиваться?


11-1264696701
tippa
2010-01-28 19:38
2017.01.15
из RichEdit в PStrList