238__________________,_________________________Глава 4

И последнее — вам надо заботиться не только о единстве стиля внутри своих
приложений, но и о том, как ваше приложение впишется в общую организацию
рабочего пространства системы и как оно будет взаимодействовать с другими при-
ложениями. Если приложение выпадает из общего ансамбля, оно напрашивается
на неприятности.

4.1.7 Последовательность фокусировки элементов

При проектировании приложения важно правильно определить последовате-
льность табуляции оконных компонентов. Под этим понимается последователь-
ность, в которой переключается фокус с компонента на компонент, когда пользо-
ватель нажимает клавишу табуляции Tab. Это важно, поскольку в ряде случаев по-
льзователю удобнее работать не с мышью, а с клавиатурой. Пусть, например, вво-
дя данные о каком-то сотруднике пользователь должен в отдельных окнах редак-
тирования указать фамилию, имя и отчество. Конечно, набрав фамилию ему удоб-
нее нажать клавишу Tab и набирать имя, а потом опять, нажав Tab, набирать отче-
ство, чем каждый раз отрываться от клавиатуры, хватать мышь и переключаться в
новое окно редактирования.

Последовательность табуляции определяется свойствами TabOrder компонен-
тов. Первоначальная последовательность табуляции определяется просто той по-
следовательностью, в которой размещались управляющие элементы на форме.
Первому элементу присваивается значение TabOrder, равное 0, второму 1 и т.д.
Значение TabOrder, равное нулю, означает, что при первом появлении формы на
экране в фокусе будет именно этот компонент. Если на форме имеются панели и
другие оконные компоненты, включающие в себя другие компоненты, то последо-
вательность табуляции составляется независимо для каждого компонента-контей-
нера. Например, для формы будет последовательность, включающая некоторую
панель как один компонент. А уже внутри этой панели будет своя последователь-
ность табуляции, определяющая последовательность получения фокуса ее дочер-
ними оконными компонентами.

Каждый управляющий элемент имеет уникальный номер TabOrder внутри
своего родительского компонента. Поэтому изменение значения TabOrder како-
го-то элемента на значение, уже существующее у другого элемента, приведет к
тому, что значения TabOrder всех последующих элементов автоматически изме-
нятся, чтобы не допустить дублирования. Если задать элементу значение TabOr-
der, большее, чем число элементов в родительском компоненте, он просто станет
последним в последовательности табуляции.

Из-за того, что при изменении TabOrder одного компонента могут меняться
TabOrder других компонентов, устанавливать эти свойства поочередно в отдель-
ных компонентах трудно. Поэтому в среде проектирования C++Builder имеется
специальная команда Edit | Tab Order, позволяющая в режиме диалога задать после-
довательность табуляции всех элементов.

Значение свойства TabOrder играет роль только если другое свойство компо-
нента — TabStop установлено в true и если компонент имеет родителя. Например,
для формы свойство TabOrder имеет смысл только в случае, если для формы задан
родитель в виде другой формы. Установка TabStop в false приводит к тому, что
компонент выпадает из последовательности табуляции и ему невозможно передать
фокус клавишей Tab (однако предать фокус мышью, конечно, можно).

Имеется и программная возможности переключения фокуса — это метод Set-
Focus. Например, если вы хотите переключить в какой-то момент фокус на окно
Edit2, вы можете сделать это оператором:

Edit2->SetFocus();