8-900-374-94-44
[email protected]
Slide Image
Меню

Delphi pagecontrol: Компонент Delphi PageControl (многостраничный блокнот)

100 компонентов Delphi — TabControl, PageControl, TabSet, TabbedNoteBook, NoteBook

100 компонентов Delphi — TabControl, PageControl, TabSet, TabbedNoteBook, NoteBook

Многостраничные панели позволяют экономить пространство окна приложения, размещая на одном и том же месте страницы разного содержания. На рис. 7.3 показаны различные формы отображения многостраничного компонента PageControl. Начнем рассмотрение многостраничных панелей именно с этого компонента.

Рис. 7.3
Иллюстрация различных вариантов панели PageControl

Перенесите компонент PageControl на форму. Чтобы задавать и редактировать страницы этого компонента, надо щелкнуть на нем правой кнопкой мыши. Во всплывшем меню вы можете видеть команды: New Page — создать новую страницу, Next Page — переключиться на следующую страницу, Previous Page — переключиться на предыдущую страницу.

Каждая создаваемая вами страница является объектом типа TTabSheet.

Это панель, на которой можно размещать любые управляющие компоненты, окна редактирования и т.п. После того, как вы создадите несколько страниц, выделите одну из них, щелкнув в ее середине, и посмотрите ее свойства в Инспекторе Объектов. Страница имеет следующие основные свойства:


NameИмя, по которому можно ссылаться на страницу
CaptionНадпись, которая появляется на ярлычке закладки
PageIndexИндекс страницы, по которому можно ссылаться на страницу
ImageIndexИндекс изображения, которое может появляться на ярлычке закладки

Из общих свойств компонента PageControl можно отметить:


StyleОпределяет стиль отображения компонента: tsTabs — закладки (верхние компоненты на рис.
7.3), tsButtons — кнопки (левый нижний компонент на рис. 7.3), tsFlatButtons — плоские кнопки (правый нижний компонент на рис. 7.3)
MultiLineОпределяет, будут ли закладки размещаться в несколько рядов, если все они не помещаются в один ряд (на рис. 7.3 вверху два одинаковых компонента, но в левом MultiLine = false, а в правом — true; примером компонента с MultiLine = false является также знакомая вам палитра компонентов в Delphi)
TabPositionОпределяет место расположения ярлычков закладок: tpBottom — внизу, tpLeft — слева, tpRight — справа и tpTop — вверху компонента (это значение по умолчанию и именно оно задано в примерах рис. 7.3)
TabHeight и TabWidthВысота и ширина ярлычков закладок в пикселях. Если значения этих параметров заданы равными 0, то размеры ярлычков определяются автоматически по размерам надписей на них
ImagesСсылка на компонент ImageList (см. раздел 9.3), который содержит список изображений на ярлычках. Свойства 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 надо применять, если требуются какие-то перестроения в рамках одной панели.

Теперь коротко остановимся на компонентах TabSet, TabbedNoteBook и NoteBook. Эти компоненты применяются в Delphi 1 и не рекомендуются для применения в 32-разрядных приложениях.

Компонент TabbedNoteBook является аналогом многостраничной панели PageControl. Только многие одинаковые у этих панелей свойства называются по-разному. Основное свойство — Pages, определяющее число страниц и надписи закладок. Свойство ActivePage определяет надпись активной страницы. Свойство PageIndex определяет индекс активной страницы (0 — первая страница).

Так что узнать, какая страница активна, можно или по значению ActivePage, или по PageIndex.

В обработчик события OnChange, происходящего при переключении пользователем страницы, передается параметр NewTab, равный индексу новой страницы, и AllowChange — разрешение переключения. Для запрета переключения можно в обработчике задать AllowChange = false.

Рассмотренный компонент TabbedNoteBook является как бы соединением двух компонентов: пачки панелей (страниц) NoteBook и набора закладок TabSet. Эти два компонента могут использоваться и раздельно. Компонент TabSet во многом аналогичен рассмотренному ранее 32-разрядному компоненту TabControl. Это многопозиционный управляющий элемент, который сам по себе не имеет никакой панели. Его основное свойство — Tabs типа TStrings. Задавая строки этого свойства вы тем самым определяете число закладок и их надписи. Свойства

StartMargin и EndMargin определяют поля — расстояния крайних закладок от краев компонента. Сами закладки всегда направлены вниз. Поэтому компонент TabSet надо располагать внизу управляемого им компонента. Свойство AutoScroll определяет появление кнопок при большом количестве закладок, которые позволяют пользователю прокручивать полосу закладок, как это делается в компонентах PageControl и TabControl при MultiLine = false. Индекс выбранной закладки определяется свойством TabIndex, значение которого можно устанавливать и можно читать в обработчике события OnChange, происходящего при смене пользователем закладки и идентичного такому событию в компоненте TabbedNoteBook.

Компонент NoteBook является пачкой панелей, имена и количество которых определяются свойством Pages, как в компоненте TabbedNoteBook

. Индекс выбранной страницы определяется свойством PageIndex. В этом компоненте отсутствует управляющий элемент — закладки. Так что страницы можно переключать какими-то кнопками, переключать их в зависимости от действий пользователя, в зависимости от отображаемых данных и т. п. Компоненты NoteBook и TabSet могут быть, конечно, объединены программно в компонент, аналогичный TabbedNoteBook. Для этого достаточно в обработчик события OnChange компонента TabSet вставить оператор

Notebook1.PageIndex := NewTab;

Но подобное использование этих компонентов вряд ли целесообразно: уж лучше использовать непосредственно TabbedNoteBook.


Компонент PageControl

Компонент Delphi PageControl (многостраничный блокнот) расположен на странице Win32 Палитры компонентов. На этапе конструирования, чтобы добавить новую панель (страницу) необходимо нажать правую кнопку на компоненте и выбрать из контекстного меню пункт «New Page». Delphi создаст новую страницу с именем TabSheet1, ее можно переименовать, изменив свойство Caption в «Инспекторе объектов» объекта TabSheet (нужно проконтролировать, чтобы при выделении маркеры не затрагивали области заголовков компонента PageControl). Для удаления панели используем пункт меню — «Delete Page».

Пункты меню «Next Page» и «Previouse Page» позволяют переходить на следующую и предыдущую страницы.

Свойства и методы компонента TPageControl.

PageControll.ActivePage.Caption: = ‘новый заголовок’.

  • ActivePageindex — индекс выделенной в данный момент страницы.

  • Pagecount — в этом свойстве хранится количество страниц.

  • Pages — в этом массиве хранятся все страницы. Например, чтобы изменить за­головок нулевой, можно написать следующий код:

  • PageControll.Pages[0].Caption:=’новый заголовок’.

  • HotTrack — если этот параметр равен true, то заголовки страниц будут подсве­чиваться при наведении на них курсора мыши.

  • MultiLine— заголовки могут выстраиваться в несколько строк, если названия не умещаются в одну строку.

  • Multiseiect — разрешить выделение нескольких страниц сразу. Это свойство может быть истиной, только если в свойстве style указано tsFiatButtons или tsButtons. Честно говоря, внешний вид и результат не очень удобен и эстети­чен, и, на мой взгляд, лучше воздержаться от множественного выбора.

  • style — стиль заголовков страниц. Здесь можно указать одно из значений:

    • tsTabs — стандартный вид;

    • tsButtons — в виде кнопок;

    • tsFiatButtons — в виде плавающих кнопок.

  • TabPosition— позиция вкладок. Здесь может быть одно из значений: tpTop, tpLeft, tpRight, tpBottom, что соответствует верхней, левой, правой и нижней позиции.

  • TabHeight — высота вкладок. Вы можете указать определенное значение высо­ты или 0, что будет соответствовать значению по умолчанию.

  • Tabwidth — ширина вкладок. Если здесь указано 0, то ширина будет минималь­но необходимой для отображения заголовка.

Соседние файлы в папке Методические материалы Delphi

  • #

    25. 03.20151.3 Mб40F1book.pps

  • #

    25.03.201554.27 Кб17Form (форма).doc

  • #

    25.03.201573.22 Кб16OLE Container.pps

  • #

    25.03.201568.1 Кб18Алгоритмы.ppt

  • #

    25.03.201577.82 Кб15Арифметические операции.ppt

  • #

    25.03.201548.13 Кб34Компонент PageControl.doc

  • #

    25.03.2015839.17 Кб17Лекция Массивы.pps

  • #

    25.03.2015894.46 Кб13Логические операции.pps

  • #

    25.03.20155.64 Mб15межвузовский тест 2008.doc

  • #

    25.03.2015340.99 Кб16Начало работы.doc

  • #

    25.03.2015824.83 Кб16процедуры и функции.pps

PageControl Блокнот и управление вкладками

pt. [email protected] (Филипп Туса)

Разработчик Delphi

Ср, 18 июня 1902 г. 08:00:00 GMT

PageControl Блокнот и управление вкладками

Приветствую всех гуру DELPHI…

Я создал многостраничный Блокнот (PageControl), каждая страница TTabSheet
содержит несколько полей TEdit. Я пытаюсь ориентироваться
(поместить фокус на) соответствующую вкладку из любого поля на текущей странице
(в фокусе), позволяя пользователю перемещаться по каждой странице
TTabSheet с помощью клавиш правой и/или левой кнопки…  Я ищу
для этого используйте клавишу на клавиатуре (например, клавишу Escape) и любой связанный с
код Object Pascal.

Будем признательны за любую помощь! Пожалуйста, присылайте ответы по электронной почте
на адрес pt…@worldnet.att.net.

Заранее спасибо!

 

Тим Халлет

Разработчик Delphi

Ср, 18 июня 1902 г. 08:00:00 GMT

Re:PageControl Блокнот и управление вкладками

Цитата
Филипп Туса написал:

> Приветствую всех гуру DELPHI …

> Я создал многостраничный блокнот (PageControl), каждый TTabSheet
> страница, содержащая несколько полей TEdit. Я пытаюсь ориентироваться
> (поместить фокус на) соответствующую вкладку в любом из полей на
> текущей странице (в фокусе), что позволяет пользователю перемещаться по каждой странице
> TTabSheet с помощью клавиш правой и/или левой кнопки…  I’ m ищет
>, чтобы сделать это, используя клавишу на клавиатуре (например, клавишу Escape) и любой связанный с
> код Object Pascal.

> Будем признательны за любую помощь! Пожалуйста, присылайте любые ответы по электронной почте
> на pt…@worldnet.att.net.

> Заранее спасибо!

Некоторое время назад я сделал подобный экран. Компонент записной книжки имел около
15 страниц с вкладками, и пользователь мог вводить данные без использования мыши.

Первым шагом было связать определенные нажатия клавиш (PgUp, PgDn) с методом
SelectNextPage; передав параметр GoForward либо
, выберите следующую или предыдущую вкладку.

Домашняя и конечная клавиши были связаны с процедурой, которая устанавливала значение индекса ActivePage элемента управления
— 0 для первого или n для последнего.

Надеюсь, это поможет

Летающий объект

Разработчик Delphi

Ср, 18 июня 1902 г. 08:00:00 GMT

Re:PageControl Блокнот и управление вкладками

Ctrl-tab = следующая страница, Shift-ctrl-tab = предыдущая страница.

+———————————————————— ———————+
| Стив Моран, Flying Objects Ltd, Лондон. |
| Индивидуальные компьютерные программы. nospam_flyingobje. [email protected] |
+———————————————— ——————+

1. PageControl NoteBook/TTabSheets & Page Control

2. Как создавать вкладки в 32-битной записной книжке с вкладками как выглядят вкладки в 16-битной записной книжке с вкладками?

3. Отключение вкладок в блокноте с вкладками

4. Цвет вкладок блокнота с вкладками

5. Выбор вкладки в блокноте с вкладками с помощью MouseOver?

6. Управление вкладками на PageControl

7. Блокнот D4 и ошибка PageControl

8. Блокнот с вкладками из таблицы

9. Проблема с блокнотом с вкладками

10. Блокнот с вкладками и блокируемыми страницами?

PageControl с возможностью скрытия вкладок

 Я ищу PageControl, который может скрывать вкладки и по-прежнему иметь возможность
переключаться с одной страницы на другую программно. Любая рекомендация
высоко ценится.

Энди
 
0

Энди

28. 03.2009 2:25:52

📁 embarcadero.delphi.tools
📃 5366 статей.
⭐ 3 подписчика.

💬 17 ответов
👁️‍🗨️ 3229 просмотров


 Как скрыть вкладки элемента управления TPageControl Delphi
http://delphi.about.com/od/delphitips2007/qt/hidepagectrltab.htm

Это также есть у некоторых третьих сторон, например, у Berg, TMS, LMD.
 
0

Боб

28 марта 2009 г. 3:06:57

 В Raize Components есть элемент управления PageControl, который делает именно это.  Многие другие
хорошие компоненты в упаковке, а также.

http://www.raize.com/DevTools/RzComps/Default.asp

--
С уважением,
Ян Фергюсон


Энди Колмс писал:

> Я ищу PageControl, который может скрывать вкладки и оставаться
> возможность переключаться с одной страницы на другую программно. Любой
> рекомендация приветствуется.
>
> Энди

Энди
 
0

Январь

28 марта 2009 г. 3:09:41

 Привет Ян,

Спасибо за совет. У меня есть Raize, и я проверю его.

Энди

«Ян Фергюсон»  написал в сообщении
новости: [электронная почта защищена]
> В Raize Components есть PageControl, который делает именно это.  Многие другие
> хорошие компоненты в упаковке.
>
> http://www.raize.com/DevTools/RzComps/Default.asp
>
> --
> С уважением,
> Ян Фергюсон
>
>
> Энди Колмс писал:
>
>> Я ищу PageControl, который может скрывать вкладки и оставаться
>> умеет переключаться с одной страницы на другую программно. Любой
>> рекомендация приветствуется.
>>
>> Энди
>
> Энди
 
0

Энди

28 марта 2009 г. 6:16:46

 Привет, Боб!

Спасибо за совет. У меня есть Берг, TMS и LMD. Но я помню, что не мог
найти любое свойство, которое может скрыть вкладки.  Однако я мог бы установить видимый
свойство каждой из таблиц в false.

Энди

"Боб Эсс" написал в сообщении новости:[email protected]
> Как скрыть вкладки элемента управления TPageControl Delphi
> http://delphi.about.com/od/delphitips2007/qt/hidepagectrltab.htm
>
> Это также есть у некоторых третьих сторон, например, у Berg, TMS, LMD
 
1

Энди

28.03.2009 6:19:13

 "Энди Колмс" <[email protected]> написал в сообщении
новости: [электронная почта защищена]
> Привет Боб,
>
> Спасибо за подсказку.  У меня есть Берг, TMS и LMD. Но я помню, что не мог
> найти любое свойство, которое может скрыть вкладки. Однако я мог бы установить
> Видимый
> свойство каждой из таблиц в false.

С помощью TMS на TAdvOfficePager в свойстве Tabsettings установите высоту
на 0 и вкладки скрыты.

ваше здоровье,
Дэйв
http://www.leapdesigner.com
 
0

Дэвид

28.03.2009 7:19:22

 Энди Колмс написал:

> Я ищу PageControl, который может скрывать вкладки и оставаться
> возможность переключаться с одной страницы на другую программно.  Любой
> рекомендация приветствуется.
>
> Энди

TPagecontrol . Вы просто ищете не в том месте. TTabsheet
имеет свойство TabVisible. Просто установите для него значение false. В какой-то Делфи
version он будет работать только во время выполнения, но не в дизайнере.

--
Питер Белоу (TeamB)
Не будь вампиром (http://slash7.com/pages/vampires),
используйте архивы телеконференций:
http://www.tamaracka.com/search.htm
http://groups.google.com
 
0

Питер

28.03.2009 9:30:11

 Привет, Питер!

Я знаю о свойстве TabVisible для TabSheet, но мне было лень
и искал PageControl, который может автоматически скрывать/показывать все вкладки для
меня :) У меня есть много вкладок, созданных во время проектирования и во время выполнения, и я не
хотите скрыть/показать их по отдельности в приложении. 

Энди

"Питер Ниже" <[email protected]> написал в сообщении
новости: [электронная почта защищена]
> Энди Колмс писал:
>
>> Я ищу PageControl, который может скрывать вкладки и оставаться
>> умеет переключаться с одной страницы на другую программно. Любой
>> рекомендация приветствуется.
>>
>> Энди
>
> TPagecontrol . Вы просто ищете не в том месте. TTabsheet
> имеет свойство TabVisible. Просто установите для него значение false. В какой-то Делфи
> версия будет работать только во время выполнения, а не в дизайнере.
>
> --
> Питер Белоу (TeamB)
> Не будь вампиром (http://slash7.com/pages/vampires),
> использовать архивы телеконференций:
> http://www.tamaracka.com/search.htm
> http://groups.google.com
 
0

Энди

28. 03.2009 19:38:09

 Энди Колмс написал:

> Привет, Питер,
>
> Я знаю о свойстве TabVisible для TabSheet, но я
> был ленив и искал PageControl, который может автоматически скрывать/показывать
> все вкладки для меня :) У меня много вкладок, созданных во время дизайна и
> runtime и я не хотел скрывать/показывать их по отдельности в
> приложение.
 
Итак, вы не склонны вводить две строки кода в формы OnCreate.
событие?

 для i:= 0 до pagecontrol1.Pagecount-1 сделать
    pagecontrol1.pages[i].TabVisible := false;



--
Питер Белоу (TeamB)
Не будь вампиром (http://slash7.com/pages/vampires),
используйте архивы телеконференций:
http://www.tamaracka.com/search.htm
http://groups.google.com
 
0

Питер

29. 03.2009 10:03:15

 Привет, Питер!

Думаю, я могу написать свою собственную процедуру, чтобы скрыть все вкладки, используя ваши 2 строки.
кода. Приложение фактически сначала скрывает все вкладки, а затем показывает
соответствующие для пользователя, чтобы выбрать параметры.

Спасибо, Питер.

Энди

"Питер Ниже" <[email protected]> написал в сообщении
новости: [электронная почта защищена]
> Энди Колмс писал:
>
>> Привет, Питер,
>>
>> Мне известно о свойстве TabVisible для TabSheet, но я
>> был ленив и искал PageControl, который может автоматически скрывать/показывать
>> все вкладки для меня :) У меня много вкладок, созданных во время дизайна и
>> runtime и я не хотел скрывать/показывать их по отдельности в
>> приложение.
>
> Итак, вы не склонны вводить две строчки кода в формы OnCreate
> событие?
>
> для i:= 0 до pagecontrol1.Pagecount-1 сделать
> pagecontrol1.pages[i].TabVisible := false;
>
>
>
> --
> Питер Белоу (TeamB)
> Не будь вампиром (http://slash7. com/pages/vampires),
> использовать архивы телеконференций:
> http://www.tamaracka.com/search.htm
> http://groups.google.com
 
0

Энди

29.03.2009 20:32:52

 Привет,

В BergSoft NxPageControl есть свойство ShowTabs, для которого можно установить значение False, и вкладки будут скрыты.

С наилучшими пожеланиями
Боян (BergSoft)
www.bergsoft.net
 
0

Боян

29. 03.2009 22:08:17

 Привет Боян,

Спасибо за совет. У меня есть NxPageControl и я обязательно проверю
вне.

Энди

"Боян Николич" написал в сообщении новости:[email protected]
> Привет,
>
> В BergSoft NxPageControl есть свойство ShowTabs, которое может
> установите значение False, и вкладки будут скрыты.
>
> С уважением
> Боян (БергСофт)
> www.bergsoft.net
 
0

Энди

30 марта 2009 г., 2:07:55

 Компонент Raize хорош тем, что он не может отображать границы и
поэтому быть полностью невидимым в мастере. 

/Мэттью Джонс/
 
0

Мэтью

30.03.2009 12:01:06

 > Компонент Raize хорош тем, что он не может отображать границы и
> Поэтому быть полностью невидимым в визарде.

Вы также можете сделать это с помощью TPageControl.
 
0

Дэвид

31 марта 2009 г. 15:49:47

 > {quote:title=Дэвид Перкинс написал:}{quote}
> > Одна из хороших особенностей компонента Raize заключается в том, что он не может отображать границы и
> > Поэтому быть полностью невидимым в визарде.
>
> Вы также можете сделать это с помощью TPageControl.

Еще лучшим компонентом может быть NxNotebook, компонент, похожий на Notebook от Delphi, но без ошибок.

Боян (BergSoft)
www.bergsoft.net
 
0

Боян

31 марта 2009 г. 18:48:31

 Я думал, что управление страницами Windows не так просто? Может быть, он изменился в
более свежие версии. 

/Мэттью Джонс/
 
0

Мэтью

01.04.2009 10:18:12

 > Я думал, что управление страницами Windows не так просто? Может быть, он изменился в
> более свежие версии.

Если вы установите стиль tsButtons и сделаете вкладки невидимыми, то вы
получить желаемый эффект без границ и т. д.
 
0

Дэвид

01. 04.2009 16:00:53

 Привет, Дэвид!

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

Рэй

--
Рэй Конопка
Программное обеспечение Raize


>> Я думал, что управление страницами Windows не так просто? Возможно это
>> изменилось в
>> Более свежие версии.
>
> Если вы установите стиль tsButtons и сделаете вкладки невидимыми, то вы
> получить желаемый эффект без границ и т.д.
 
0

Рэй

06.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *