18.2.14. TApplicationEvents - обработчик сообщений Windows

Компонент TApplicationEvents впервые введен в версии Delphi 5. В отличие от остальных компонентов страницы Additional он не имеет видимого эквивалента в работающей программе. Его основное и единственное назначение - служить приемником многочисленных сообщений, которые windows посылает работающей программе.

Лишь очень немногие программы нуждаются в специальной (не умалчиваемой) обработке сообщений - примером могут служить программы, эмулирующие клавиатуру DOS (подробнее см. п. 17.6.3) или фильтрующие ввод пользователя (в учебных целях, например).

Следующая простая программа познакомит вас с примером использования компонента. В ней фильтруется ввод программы в компонент TEdit так, чтобы запретить появление в нем любых цифр.

- На пустую форму поместите TEdit И TApplicationEvents.
- Напишите такой обработчик события OnMessage компонента TApplicationEvents:

procedure TForm1.ApplicationEventslMessage(var Msg: tagMSG;

var Handled: Boolean);

begin

Handled := Editi.Focused and (Msg.Message=wm_Char)

and (Msg.wParam>=48) and (Msg.wParam<=57) end;

Если теперь запустить программу, ввод цифр в компонент Edit1 будет блокирован. В нашей простой программе есть единственный компонент, способный получать фокус ввода, поэтому проверка Editi. Focused в условном операторе является излишней. Я ввел ее только для того, чтобы продемонстрировать, как программа может определить получателя клавиатурного ввода.

Любая форма может иметь сколько угодно компонентов TAppicationEvents. Одно и то же сообщение поступает последовательно в каждый из них до тех пор, пока это сообщение не будет обработано или пока оно не поступит всем. Порядок получения сообщений обратен порядку размещения компонентов на форме: вначале сообщение получит последний размещенный на форме компонент, затем предпоследний и т. д. Этот порядок можно изменить с помощью метода Activate. Запретить получение остальным компонентам уже обработанного сообщения можно с помощью метода CancelDispatch. если в проекте имеется несколько форм, расположенные на них компоненты TAplicationEvents начинают получать сообщения только после того, как соответствующая форма станет активной. Работа всех компонентов TApplicationEvents будет блокирована, если в объекте Application определен обработчик события onMessage.

В Инспекторе объектов опубликованы только два свойства компонента: Name И Tag. Методы компонента:

procedure Activate; | Делает компонент первым получателем сообщения
procedure CancelDispatch; | Запрещает получение текущего сообщения остальным компонентам
События:

type TActionEvent = procedure (Action: TBasicAction; var Han dled: Boolean) of objects; property OnActionExecute: TActionEvent; | Это событие возникает тогда, когда пользователь активизирует управляющий элемент, приписанный определенному действию, в котором не определен обработчик OnExecute
type TActionEvent = procedure (Action: TBasicAction; var Han dled: Boolean) of object; property OnActionUpdate: TAction Event; | Это событие возникает тогда, когда пользователь активизирует управляющий элемент, приписанный определенному действию, в котором не определен обработчик OnUpdate
property OnActivate: TNotifyEvent; | Возникает при активизации приложения
property OnDeactivate: TNoti fyEvent; | Возникает при детивизации приложения
type TExceptionEvent = procedure (Sender: TObject; E: Exception) of object; property OnException: TException Event; | Возникает перед умалчиваемой обработкой исключения, для которого нет соответствующего программного обработчика.
type THelpEvent = function (Command: Word; Data: Longint; var CallHelp: Boolean): Boolean of object/ property OnHelp: THelpEvent; | Возникает перед вызовом встроенной справочной службы. Параметру CallHelp следует придать значение True, если программа должна после завершения обработчика вызвать справочную службу
property OnHint: TNotifyEvent; | Возникает перед выдачей оперативной справки для компонента, свойство Hint которого не пустая строка
type TIdleEvent = procedure (Sender: TObject; var Done: Boo lean) of object; | Возникает, когда программа переходит, в состояние ожидания. Если в Done установлено значение False, после выполнения
property Orrldle: TIdleEvent; | других работ Windows вновь вызывает приостановленную программу, в противно случае вызов программы происходит только при поступлении в ее адрес очередного сообщения
type TMessageEvent = procedure (var Msg: TMsg; var Handled: Boolean) of object; property OnMessage: TMessageEvent; | Возникает при поступлении любого сообщения от Windows. Msg - сообщение (его тип описан в п. 16.6.3), Handled=True, если обработчик завершил обработку сообщени
property OnMinimize: TNotifyEvent; | Возникает при минимизации главного окна программы
property OnRestore: TNotifyEvent; | Возникает при восстановлении размеров главного окна программы
ShortCutEvent = procedure (var Msg: TWMKey; var Handled: Boo lean) of object; property OnShortCut: TShortCutEvent; | Возникает, когда пользователь нажал клавишу на клавиатуре (перед событиями ОnKeyDown или OnKeyPress). Позволяет программе распознать и интерпретировать нажатие клавиш-акселераторов
type TShowHintEvent = procedure (var HintStr: String; var CanShow: Boolean; var Hintlnfo: THintInfo) of object- property OnShowHint: TShowHintEvent; | Возникает перед появлением оперативной справки Hint. HintStr - строка для справки; Hintlnfo - информация об окне справки. Установите в CanShow значение True, если нужно отобразить справку (остальные параметры к этому времени могут быть изменены)