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

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

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

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

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, если нужно отобразить справку (остальные параметры к этому времени могут быть изменены)