Начиная с C++Builder 5 в библиотеке имеется компонент ApplicationEvents. Этот компонент перехватывает события объекта Application и, следовательно, обработчики этих событий теперь можно писать как обработчики событий невизуального компонента ApplicationEvents. На каждой форме приложения можно разместить свой компонент ApplicationEvents. События объекта Application будут передаваться всем этим компонентам. Если вы хотите, чтобы событие передавалось прежде всего какому-то одному из них, примените к нему метод Activate, который поставит его в начало очереди компонентов ApplicationEvents. Если же вы при этом не хотите, чтобы другие компоненты ApplicationEvents получали события, примените к привилегированному компоненту метод CancelDispatch. Тогда после обработки события в данном компоненте другие компоненты ApplicationEvents вообще не будут реагировать на эти события.
Во многие обработчики событий компонента ApplicationEvents передается по ссылке параметр Handled. По умолчанию его значение равно false. Если вы обработали соответствующее событие и не хотите, чтобы оно далее обрабатывалось другими компонентами ApplicationEvents, надо в обработчике установить Handled = true. Если же оставить Handled = false, то событие будут пытаться обрабатывать другие компоненты ApplicationEvents (если они есть). Если событие так и останется необработанным, то его будет пытаться обработать активный компонент, а если не обработает — то активная форма. Предотвратить обработку события другими компонентами можно, используя описанный ранее метод CancelDispatch.
Ниже приведена таблица событий компонента ApplicationEvents с их краткими описаниями.
Событие | Описание |
OnActionExecute | Возникает при выполнении (Execute) некоторого действия, объявленного в компоненте ActionList, но не обработанного им (не написан соответствующий обработчик). Инициализация этого события может быть, например, выполнена методом Application->ExecuteAction(<имя действия>). Если событие не обработано в ActionList, то оно может быть обработано на уровне приложения. В обработчик OnActionExecute передается параметр Action - действие и по ссылке передается параметр Handled. |
OnActionUpdate | Возникает при обновлении (Update) некоторого действия, объявленного в компоненте ActionList, но не обработанного им (не написан соответствующий обработчик). Если событие не обработано в ActionList, то оно может быть обработано на уровне приложения. В обработчик OnActionUpdate передается параметр Action - действие и по ссылке передается параметр Handled. |
OnActivate | Возникает, когда приложение становится активным. Это происходит при начале выполнения и в случаях, когда пользователь, перейдя к другим приложениям, вернулся в данное. Если это событие обработано в ApplicationEvents, то предотвратить дальнейшую его обработку можно методом CancelDispatch. |
OnDeactivate | Возникает перед тем моментом, когда приложение перестает быть активным (пользователь переключается на другое приложение). Если событие обработано в ApplicationEvents, то предотвратить дальнейшую его обработку можно методом CancelDispatch. |
OnException | Возникает, когда в приложении сгенерировано исключение, которое нигде не перехвачено. В обработчик передается параметр Sender - источник исключения, и параметр E типа Exception - объект исключения. Параметр E помогает определить тип исключения. Например, if(E->ClassNameIs("EZeroDivide")). В обработчике события OnException можно предусмотреть нестандартную обработку исключений на уровне приложения, например, русифицировать стандартные сообщения об исключениях и дать пользователю какие-то рекомендации. Учтите, что при введении обработчика OnException отключит стандартную реакцию приложения на исключительные ситуации. |
OnHelp | Возникает при запросе приложением справки. Это событие возникает, в частности, при выполнении методов приложения HelpContext, HelpJump и HelpCommand. Обработчик может использоваться для каких-то подготовительных операций, например, для задания файла справки (параметр Application->HelpFile). В обработчик передаются параметры Command команда API WinHelp, Data - параметр этой команды и по ссылке передается булев параметр CallHelp. Если его установить в true, то после завершения обработчика будет вызван WinHelp, в противном случае вызова WinHelp не будет. |
OnHint | Возникает в момент, когда курсор мыши начинает перемещаться над компонентом или разделом меню, в котором определено свойство Hint. При этом свойство Hint компонента переносится в свойство Hint приложения (Application->Hint) и в обработчике данного события может отображаться, например, в строке состояния. |
OnIdle | Возникает, когда приложение начинает простаивать, ожидая, например, действий пользователя. В обработчик передается по ссылке булев параметр Done, который по умолчанию равен true. Если оставить его без изменения, то по окончании работы обработчика данного события будет вызвана функция WaitMessage API Windows, которая займется в период ожидания другими приложениями. Если задать Done = false, то эта функция вызываться не будет. Это может снизить производительность Windows. |
OnMessage | Возникает, когда приложение получает сообщение Windows (но не переданное функцией SendMessage API Windows). В обработчике события OnMessage можно предусмотреть нестандартную (отличную от определенной в TApplication) обработку сообщения. В обработчик передается параметр Msg полученное сообщение и по ссылке передается параметр Handled. Учтите, что в Windows передаются тысячи сообщений в секунду, так что обработчик OnMessage может серьезно снизить производительность приложения. |
OnMinimize | Возникает при сворачивании приложения. |
OnRestore | Возникает при восстановлении ранее свернутого приложения. |
OnShortcut | Возникает при нажатии пользователем клавиши. Событие возникает до того, как возникло стандартное событие OnKeyDown компонента или формы. Обработчик позволяет предусмотреть нестандартную реакцию на нажатие какой-то клавиши. В него передается параметр сообщения Windows Msg, поле CharCode которого (Msg.CharCode) содержит виртуальный код нажатой клавиши. Передается также по ссылке параметр Handled. Если задать ему значение true, то стандартные события OnKeyDown, OnKeyPress, OnKeyUp не наступят. |
OnShowHint | Возникает, когда приложение собирается отобразить ярлычок с текстом подсказки Hint. В обработчик передается по ссылке параметр HintStr - первая часть свойства Hint компонента, ярлычок которого должен отображаться. В обработчике этот текст можно изменить. Так же по ссылке передается параметр CanShow. Если в обработчике установить его равным false, то ярлычок отображаться не будет. Третий параметр, передаваемый по ссылке Hintlnfo. Это структура, поля которой содержат информацию о ярлычке: его координаты, цвет, задержки появления и т.п. В частности, имеется поле HintControl - компонент, сообщение которого должно отображаться в ярлычке, и поле HintStr - отображаемое сообщение. По умолчанию Hintlnfo.HintStr - первая часть свойства Hint компонента. Но в обработчике это значение можно изменить. |