Обзор компонентов библиотеки C++Builder_______________________223

вие. Например, обработчик события OnExecute действия Exit может в простейшем
случае иметь вид

void_fastcall TFormI::ExitExecute(TObject *Sender)
(
Close() ;

}

а в более сложных случаях может содержать проверку возможности закрыть при-
ложение, запросы пользователю и т.д. Одним из преимуществ использования дей-
ствий является то, что заголовки обработчиков приобретают осмысленный харак-
тер и код становится более прозрачным. Действительно, гораздо понятнее заголо-
вок ExitExecute, чем, например, Button7Click или N14Click (попробуйте найти в
вашем большом приложении, где эта кнопка Button7 или раздел меню N14). В ре-
зультате вы избавляетесь от необходимости давать осмысленные имена кнопкам и
разделам меню, т.е. облегчаете свою работу с компонентами.

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

,     Событие OnHint возникает в момент, когда на экране отображается ярлычок
| подсказки в результате того, что пользователь задержал курсор мыши над компо-
' нентом, инициализирующим событие.

•    Наличие в объекте действия событий OnUpdate и OnHint обогащает ваши воз-
можности по проектированию приложения. Без этого объекта подобные события
отсутствуют и их при необходимости приходится моделировать более сложными
приемами.

Связь объектов действий с конкретными инициализаторами действий —
управляющими элементами типа кнопок, разделов меню и т.д., осуществляется
через свойство Action, имеющееся у всех управляющих элементов. Поместите на
вашу форму кнопку, и вы увидите в Инспекторе Объектов это свойство. Раскройте
его выпадающий список и выберите из него действие, которое вами было предва-
рительно описано. Вы сможете заметить, что после этого в кнопку перенесутся та-
кие свойства объекта действия, как Caption, Hint и др., и что в ее событие OnClick
подставится обработчик, предусмотренный вами для данного действия. Если далее
вы введете в приложение меню с разделом, соответствующим тому же действию и
укажете в нем то же значение свойства Action, то свойства и обработчики событий
объекта действия будут перенесены и на этот раздел меню. Вам не придется по-
вторно задавать значение Hint, Ca'ption и др.

Подобная связь между свойствами объекта действия и свойствами управляю-
щих элементов выполняется классом TActionLink и его наследниками. Передают-
ся в компоненты такие свойства действия, как Caption, Checked, Enabled, Help-
Context, Hint, Imagelndex, ShortCut, -Visible. Впрочем, в любом компоненте вы
| можете изменить переданное в него свойство. Обратной связи TActionLink с ком-
| понентами нет, так что эти изменения будут локальными и не отразятся на других
компонентах. Если же требуется изменить свойства всех связанных с одним дейст-
вием компонентов, надо изменять свойство объекта действия. Это облегчает про-
граммное управление компонентами, связанными с одним и тем же действием. На-
пример, если в какой-то момент вам надо сделать недоступными (или, наоборот,
доступными) два компонента — кнопку Buttons и раздел меню N5, связанные с
одним событием (назовем его объект Do), то при отсутствии централизованной дис-
петчеризации событий через ActionList вам пришлось бы писать два оператора:

Button3->Enabled = false;

N5->Enabled = false;