- •Вкладка win32 Программирование с использованием вкладки Win32 и Dialog
- •Многостраничные панели — компоненты TabControl, PageControl
- •Список изображений — компонент ImageList
- •Компонент RichEdit
- •Компонент Delphi TrackBar
- •Компонент Delphi Progressbar
- •Компонент Delphi UpDown
- •Компонент Delphi HotKey (Горячие клавиши)
- •Компонент Delphi Animate
- •Компонент DataTimePicker
- •Компонент Delphi MonthCalendar
- •Компоненты DateTimePicker, MonthCalendar, Calendar
- •Компонент Delphi TreeView
- •Компонент ListView
- •Компонент Delphi HeaderControl
- •Полоса состояния StatusBar
- •Инструментальные панели — компоненты ToolBar и PageScroller
- •Перестраиваемые панели — компоненты CoolBar и ControlBar
- •Компонент ComboBoxEx
- •Компонент delphi xpManifest
- •Вкладка dialogs Компонент Delphi OpenDialog
- •Компонент Delphi SaveDialog
- •Компонент Delphi OpenPictureDialog
- •Компонент Delphi SavePictureDialog
- •Компонент Delphi FontDialog
- •Компонент Delphi ColorDialog (диалог выбора цвета)
- •Компоненты PrintDialog и PrinterSetupDialog
- •Компонент Delphi FindDialog
- •Компонент Delphi ReplaceDialog
- •Компонент PageSetupDialog
Многостраничные панели — компоненты TabControl, PageControl
Многостраничные панели позволяют экономить пространство окна приложения, размещая на одном и том же месте страницы разного содержания. На рисунке 1 показаны различные формы отображения многостраничного компонента PageControl. Начнем рассмотрение многостраничных панелей именно с этого компонента.
Рисунок 1 - Иллюстрация различных вариантов панели PageControl
Перенесите компонент PageControl на форму. Чтобы задавать и редактировать страницы этого компонента, надо щелкнуть на нем правой кнопкой мыши. Во всплывшем меню вы можете видеть команды: New Page — создать новую страницу, Next Page — переключиться на следующую страницу, Previous Page — переключиться на предыдущую страницу.
Каждая создаваемая вами страница является объектом типа TTabSheet. Это панель, на которой можно размещать любые управляющие компоненты, окна редактирования и т.п. После того, как вы создадите несколько страниц, выделите одну из них, щелкнув в ее середине, и посмотрите ее свойства в Инспекторе Объектов.
Страница имеет следующие основные свойства:
Таблица 2 – Основные свойства страницы TTabSheet
Name |
Имя, по которому можно ссылаться на страницу |
Caption |
Надпись, которая появляется на ярлычке закладки |
PageIndex |
Индекс страницы, по которому можно ссылаться на страницу |
ImageIndex |
Индекс изображения, которое может появляться на ярлычке закладки |
Из общих свойств компонента PageControl можно отметить:
Таблица 3 – Общие свойства компонента PageControl
Style |
Определяет стиль отображения компонента: tsTabs — закладки (верхние компоненты на рисунке 1), tsButtons — кнопки (левый нижний компонент на рисунке 1), tsFlatButtons — плоские кнопки (правый нижний компонент на рисунке 1) |
MultiLine |
Определяет, будут ли закладки размещаться в несколько рядов, если все они не помещаются в один ряд (на рисунке 1 вверху два одинаковых компонента, но в левом MultiLine = false, а в правом — true; примером компонента с MultiLine = false является также знакомая вам палитра компонентов в Delphi) |
TabPosition |
Определяет место расположения ярлычков закладок: tpBottom — внизу, tpLeft — слева, tpRight — справа и tpTop — вверху компонента (это значение по умолчанию и именно оно задано в примерах рисунке 1) |
TabHeight и TabWidth |
Высота и ширина ярлычков закладок в пикселях. Если значения этих параметров заданы равными 0, то размеры ярлычков определяются автоматически по размерам надписей на них |
Images |
Ссылка на компонент ImageList, который содержит список изображений на ярлычках. Свойства ImageIndex страниц содержат индексы, соответствующие именно этому списку |
ScrollOpposite |
Определят способ перемещения закладок при размещении их в несколько рядов (опробуйте экспериментально, как это свойство влияет на поведение компонента) |
ActivePage |
Имя активной страницы |
Pages[Index: Integer] |
Доступ к странице по индексу (первая страница имеет индекс 0). Свойство только для чтения |
PageCount |
Количество страниц. Свойство только для чтения |
В компоненте имеется ряд методов, позволяющих оперировать страницами, создавать их, уничтожать, переключать. Посмотрите их во встроенной справке Delphi. Основные события компонента — OnChanging и OnChange. Первое из них происходит непосредственно перед переключением на другую страницу после щелчка пользователя на новой закладке. При этом в обработчик события передается по ссылке параметр AllowChange — разрешение переключения. Если в обработчике задать AllowChange = false, то переключение не произойдет. Событие OnChange присходит сразу после переключения.
Рассмотрим теперь компонент TabControl. Внешне этот компонент выглядит так же, как PageControl, и имеет много тех же свойств: Style, MultiLine, TabPosition, TabHeight, TabWidth, Images, ScrollOpposite, тех же событий: OnChanging и OnChange. Но принципиальное отличие его от PageControl заключается в том, что TabControl не имеет множества панелей (страниц). Компонент представляет собой одну страницу с управляющим элементом типа кнопки со многими положениями. И надо написать соответствующие обработчики событий OnChanging и OnChange, чтобы определить, что именно должно происходить на панели при переключениях закладок пользователем. У компонента имеется еще одно свойство — MultySelect, позволяющее множественный выбор закладок. Если это свойство установлено в true, то в обработчиках событий надо описать реакцию на такой выбор пользователя.
Число закладок и их надписи определяются свойством Tabs типа TStrings. В нем вы можете задать надписи закладок. Сколько строчек надписей вы укажете, столько будет закладок. Текущее состояние переключателя определяется свойством TabIndex. Вы можете установить его в процессе проектирования, чтобы определить исходное состояние переключателя. А затем в обработчиках событий OnChanging и OnChange можете читать это свойство, чтобы определить, что именно выбрал пользователь.
Применять компонент TabControl имеет смысл в тех приложениях, в которых нужен многопозиционный переключатель. Вы можете, конечно, имитировать с помощью TabControl поведение, аналогичное компоненту PageControl. Для этого достаточно, например, расположить в пределах TabControl две закрывающие друг друга панели и в обработчик события OnChange вставить оператор:
if TabControl1.TabIndex = 0
then Panel2.Visible := false
else Panel2.Visible := true;
Если Panel2 — верхняя панель, то при выборе первой закладки (TabIndex = 0) она будет делаться невидимой и под ней будет проступать нижняя панель.
Но подобная имитация PageControl не имеет смысла, так как проще использовать сам компонент PageControl. A TabControl надо применять, если требуются какие-то перестроения в рамках одной панели.
