Турбо Паскаль 6.0


Фаза.


Возникают ситуации когда Вы хотите чтобы видимый элемент отличный от активного обрабатывал активные события (особенно от клавиш). Например, при просмотре текста в скроллингуемом окне Вам может понадобиться использовать клавиши для скроллинга текста, но поскольку текстовое окно это активный видимый элемент, события от клавиш приходят к нему, а не к полосам скроллинга, которые могут скроллинговать видимый элемент. Однако Turbo Vision предоставляет механизм позволяющий видимым элементам отличным от активного элемента видеть и обрабатывать активные события. Хотя передача описанная в разделе "Активные события" абсолютно корректна, существуют два исключения при точном прохожденни активной цепочки. Когда модальный видимый элемент получает для обработки активное событие, передача выполняется в три "фазы": - Событие посылается всем подэлементам (В Z-порядке), у которых установлен флаг ofPreProcess. - Если событие не очищено ни одним из них, это событие посылается в активный видимый элемент. - Если событие все еще не очищено, оно посылается в Z-порядке всем подэлементам с установленным флагом ofPostProcess. Так в предыдущем примере, если полосе скроллинга необходимо видеть клавиши, которые предназначены активному текстовому элементу, полоса скроллинга должна быть инициализирована с установленным флагом ofPreProcess. Если Вы посмотрите на программу TVDEMO09.PAS Вы заметите что полосы скроллинга для видимых элементов интерьера имеют установленными биты ofPostProcess. Если Вы модифицируете код так, чтобы эти биты не устанавливались, скроллинг от клавиатуры будет запрещен. Заметим также что в этом примере нет большой разницы, что Вы установите - ofPreProcess или ofPostProcess. Поскольку активный видимый элемент в этом случае не обрабатывает это событие (сам TScroller ничего не делает с нажатиями клавиш), полосы скроллинга могут видеть эти события как до так и после того, как событие передается в скроллер. Однако лучше использовать в таких случаях ofPostProcess, поскольку он предоставляет большую гибкость. Позже Вы можете добавить в интерьер код, который проверяет нажатие клавиш, но если эти нажатия будут использованы полосой скроллинга, до того как они будут получены активным элементом (ofPreProcess), Ваш интерьер никогда не будет реагировать на них.

Примечание: Хотя Вам может требоваться перехват активных событий до того как активный элемент получает их, хорошая мысль, оставить как можно больше доступных возможностей, поскольку Вы (или кто-то еще) можете наследовать нечто новое от этого объекта в будущем.




- Начало -  - Назад -  - Вперед -