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