Иллюстрированный самоучитель по Delphi 7 для профессионалов

Многостраничный блокнот – компоненты TTabControl и TPageControl

В Палитре компонентов имеется два элемента управления, обеспечивающих создание многостраничных блокнотов. Это компоненты TTabControl и TPageControl. Переключение между страницами осуществляется при помощи закладок. Закладки могут выглядеть как "настоящие" в бумажном блокноте, а могут быть похожи на стандартные кнопки Windows. Кстати, сама Палитра компонентов Delphi является примером использования такого элемента управления.

Компонент TTabControl отличается тем, что представляет собой как бы "виртуальный" блокнот. Это – единый объект с одной фактической страницей. При переключении закладок осуществляется вызов метода-обработчика события:

property OnChange: TNotifyEvent;

Соответствующий код в котором может изменить набор видимых элементов управления и создать для пользователя иллюзию "переключения страниц".

Компонент TFageControl является контейнером для объектов TTabSheet, соответствующих отдельным страницам блокнота. Страницы в нем могут нести каждая свой набор дочерних компонентов; их можно переключать уже во время разработки.

Первый подход удобен, если на разных страницах у вас должны располагаться одни и те же компоненты, "начиненные" различными данными. Идеальный пример приводится самими разработчиками Delphi (папка Help\Samples\TabCntrl – обязательно посмотрите пример!). Здесь TTabControl используется для редактирования базы данных. Закладки для страниц создаются по одной для каждой записи в таблице. А на одной-единственной странице располагаются компоненты для отображения данных. При переключении закладок происходит навигация по таблице, содержимое полей меняется, и создается впечатление перехода на другую страницу.

Второй подход необходим, если у вас действительно разные страницы с различными наборами компонентов на них. Компонент TPageControl используют для создания редакторов свойств и настроек программы, а также для разного рода мастеров (Wizards).

Оба компонента в своей основе имеют общий элемент управления из библиотеки ComCtl32 (в документации Microsoft он называется Tab Control). Соответственно, в иерархии классов Delphi они оба произошли от класса TCustomTabcontrol, от которого унаследовали значительную часть свойств и методов. А вот механизмы работы отдельных страниц у каждого компонента свои. Поэтому сначала мы рассмотрим общие для двух компонентов свойства, а затем особенности использования страниц. Свойства и методы-обработчики класса-предка TCustomTabcontrol представлены в табл. 5.1 и 5.2 соответственно. Обратите внимание, что перечисленные свойства и методы в потомках объявляются как опубликованные (published).

Таблица 5.1. Основные свойства, общие для TTabControl и TPageContrli.

Объявление Описание
property Tablndex: Integer; Задает номер текущей страницы, начиная с 0
property TabHeight: Smallint; Задает высоту закладок в пикселах. При значении 0 высота определяется автоматически так, чтобы вместить текст
property TabWidth: Smallint; Задает ширину закладок. При значении 0 ширина определяется автоматически так, чтобы вместить текст
type TTabStyle = (tsTabs, tsButtons, tsFlatButtons);
property Style: TtabStyle;
Определяет стиль закладок компонента:
tsTabs – стандартные закладки; tsButtons – объемные кнопки; tsFlatButtons – плоские кнопки
type TTabPosition = (tpTop, tpBottom, tpLeft, tpRight);
property TabPosition: TTabPosition;
Определяет расположение закладок на компоненте. Расположение, отличное от tpTop, возможно только для стиля tsTabs
property HotTrack: Boolean; При значении True названия страниц выделяются цветом при перемещении над ними указателя мыши
property Images: TCustomlmageList; Указывает на список картинок, появляющихся на закладках страниц
property RaggedRight: Boolean; При значении True ширина закладок изменяется таким образом, чтобы они не занимали всю сторону блокнота
property MultiLine: Boolean; При значении True закладки страниц могут располагаться в несколько рядов (если они не помещаются в один). При значении False в верхнем правом углу появляются кнопки, организующие прокрутку невидимых заголовков
property ScrollOpposite: Boolean; При значении True, если закладки расположены в несколько рядов, при переходе к закладке следующего ряда все остальные ряды перемещаются на противоположную сторону блокнота. Действительно только при MultiLine=True
Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.