Шаг 4.
Компоненты библиотеки RX.
Вкладка RX Tools. Компонент TRxWindowHook

    На этом шаге мы рассмотрим компонент TRxWindowHook.

    Компонент TRxWindowHook предназначен для обработки оконных сообщений, приходящих элементам-наследникам TWinControl (которые являются окнами в смысле Windows), без создания компонента-наследника. Вы можете задать элемент управления, сообщения которого хотите обрабатывать, с помощью свойства WinControl. Обработка оконных сообщений осуществляется с помощью событий BeforeMessage и AfterMessage.

Таблица 1. Свойства и события компонента TRxWindowHook
Свойство Описание
property WinControl: TWinControl; Свойство задает любой оконный элемент - наследник TWinControl, для которого устанавливается перехват сообщений.
property BeforeMessage: THookMessageEvent; Событие вызвается при приходе сообщений в оконную функцию компонента, заданного свойством WinControl, до вызова обработчика сообщений по умолчанию. После обработки сообщения вы можете запретить вызов обработчика по умолчанию, установив параметр Handled в значение True.
property AfterMessage: THookMessageEvent; Событие вызвается при приходе сообщений в оконную функцию компонента, заданного свойством WinControl, после вызова обработчика сообщений по умолчанию. Параметр Handled в этом событии значения не имеет и предназначен только для обработчика события BeforeMessage.
type THookMessageEvent = procedure (Sender: TObject; var Msg: TMessage; var Handled: Boolean) of object; Тип определяет процедуру - обработчик для событий BeforeMessage и AfterMessage компонента TRxWindowHook. Параметр Handled имеет смысл только для события BeforeMessage.

    Рассмотрим пример, показывающий работу компонента TRxWindowHook. Поместим на форму две кнопки TButton и комонент TRxWindowHook (рис. 1).


Рис.1. Форма с размещенными компонентами

    В свойстве WinControl компонента TRxWindowHook выбираем Button2 из списка. Свойство Active установим в значение False, т.е. изначально события элемента-наследника Button2 не будут отслеживаться компонентом TRxWindowHook. Для кнопки Button1 напишем обработчик события OnClick, который будет активизировать работу компонента TRxWindowHook:

procedure TForm1.Button1Click(Sender: TObject);
begin
     Form1.Button2.Caption:='Active = True';
     Form1.RxWindowHook1.Active:=True;
end;

    Так же напишем обработчик события AfterMessage для компонента TRxWindowHook:

procedure TForm1.RxWindowHook1AfterMessage(Sender: TObject; var Msg: TMessage; 
     var Handled: Boolean);
begin
     Form1.Button2.Caption:='WindowHook';
end;

    В процессе выполнения приложения, при нажатии на кнопку Button1 мы включаем компонент TRxWindowHook, который начинает отслеживать приходящие кнопке Button2 сообщения. Если на кнопку Button2 навести указатель мыши, то после вызова обработчика сообщений по умолчанию, выполняется обработчик события AfterMessage, изменяя тем самым свойство Caption кнопки Button2 в значение 'WindowHook'.

Текст этого примера можно взять здесь.

    На следующем шаге мы рассмотрим компонент TAppEvents.




Предыдущий шаг Содержание Следующий шаг