Компонент delphi ApplicationEvents это не визуальный компонент, перехватывающий события приложения – объекта Application. Компонент ApplicationEvents позволяет писать обработчики событий, на каждой форме можно поместить свой компонент. События объекта Application передаются всем компонентам находящимся на форме. Если вы хотите что бы события передавалось какому-то одному компоненту, примените к этому компоненту метод Activate, этот метод поставит его в начало очереди ApplicationEvents. Если вы не хотите, чтобы другие компоненты, получали эти события, примените к этому привилегированному компоненту метод CancelDispatch. Это позволит после обработки события в этом компоненте, другим компонентам ApplicationEvents вообще не реагировать на события ApplicationEvents .
Во многие обработчики событий передается по ссылке параметр Handled. По умолчанию равный False. Если вы обратили соответствующее событие и более не хотите, что бы оно обрабатывалось другими компонентами, необходимо в обработчике установить значение Handled равным True. Если событие так и не обработанные ни одним компонентом, то его будет пытаться обработать активный компонент, но если он его не обработает то активная форма. Запретить обработку события другим компонентам можно методом CancelDispatch.
Приведем примеры некоторых событий компонента
Обработчик события OnHint
1 2 3 4 | procedure TForm10.ApplicationEvents2Hint(Sender: TObject); begin StatusBar2.SimpleText:=Aplication.Hint; end; |
В полосе состояния StatusBar отображается вторая часть свойства Hint, в котором есть это свойство и над которым в данный момент находится курсор мыши. Отображение происходит в любом случае независимо от свойства ShowHint компонента.
Обработчик события OnShowHint
1 2 3 4 5 6 7 8 | procedure TForm10.ApplicationEvents2ShowHint(var HintStr: string; var CanShow: Boolean; var HintInfo: THintInfo); begin if (hintInfo.HintControl.ClassName = 'TEdit') then begin HintStr:= (HintInfo.HintControl as Tedit).Text; ApplicationEvents2.CancelDispatch; end; |
Подменяет для окон типа Edit текст ярлычка на текст, содержащийся в окнах редактирования. Этот прием позволяет пользователям, подведя курсор мыши к полю редактирования, увидеть во всплывающей подсказке полный текст, который может быть не виден обычным образом, если данный тест длинный и не помещается целиком в окно редактирования.
Обработчик события OnHelp
1 2 3 4 | function TForm10.ApplicationEvents2Help(Command: Word; Data: Integer; var CallHelp: Boolean): Boolean; begin if (Command=HELP_CONTEXT) and (Data |
Это событие обеспечивает отображение контекстных справок с номерами идентификаторов тем, меньше 9, во всплывающем окне, не прибегая при этом к WinHelp. Это дает возможность отображать многострочные всплывающие окна.
Обработчик события OnShortCut
1 2 3 4 5 6 7 8 | procedure TForm10.ApplicationEvents2ShortCut(var Msg: TWMKey; var Handled: Boolean); begin if Msg.CharCode=Ord('Q') then if Application.MessageBox('Вы действительно хотите завершить работу?', 'Подтвердите завершение', MB_YESNOCANCEL+MB_ICONQUESTION)=IDYES Then Application.Terminate end; |
Это событие позволяет перехватывать нажатие пользователем клавиш, в данном случае если нажата клавиши с символом “Q” (независима от установленного языка), то пользователь увидит диалоговое окно с текстом “’Действительно хотите завершить работу” вызываемое методом Application.MessageBox. Если пользователь нажмет да, то приложение закроется методом Application.Terminate.
Обработчики событий OnActivate и OnDeactivate
1 2 3 4 5 6 7 8 9 | procedure TForm10.ApplicationEvents2Activate(Sender: TObject); begin Label2.Caption:='’Ура! Я работаю!'; end; procedure TForm10.ApplicationEvents2Deactivate(Sender: TObject); begin Label2.Caption:='Увы! Меня покинули!'; end; |
Обеспечивает появление в метке Label2 соответствующих надписей каждый раз, когда окно приложения активно и когда не активно.