Динамические PageControl и TabSheet

Вариант 1


var  
t: ttabsheet;  
p: tpagecontrol;  
begin  
// Создаем pagecontrol  
// При создании получаем ссылку на pagecontrol, чтобы в дальнейшем на него ссылаться.  
p := tpagecontrol.create(application);  
with p do  
begin  
parent := form1; // устанавливаем его как элемент управления формы.  
top := 30;  
left := 30;  
width := 200;  
height := 150;  
end; // with tpagecontrol  
  
// Создаем 3 страницы  
t := ttabsheet.create(p);  
with t do  
begin  
visible := true;  
// Это необходимо, или форма не будет корректно перерисовываться  
caption := 'Страница 1';  
pagecontrol := p; // Назначаем tab в page control  
end; // with  
  
t := ttabsheet.create(p);  
with t do  
begin  
visible := true;  
// Это необходимо, или форма не будет корректно перерисовываться  
caption := 'Страница 2';  
pagecontrol := p; // Назначаем tab в page control  
end; // with  
  
t := ttabsheet.create(p);  
with t do  
begin  
visible := true;  
// Это необходимо, или форма не будет корректно перерисовываться  
caption := 'Страница 3';  
pagecontrol := p; // Назначаем tab в page control  
end; // with  
  
// Создаем 3 кнопки, 1 на страницу  
with tbutton.create(application) do  
begin  
parent := p.pages[0]; // "Указываем" кнопке родительскую страницу  
caption := 'Привет, страница 1';  
left := 0;  
top := 0;  
end; // with  
  
with tbutton.create(application) do  
begin  
parent := p.pages[1]; // "Указываем" кнопке родительскую страницу  
caption := 'Привет, страница 2';  
left := 50;  
top := 50;  
end; // with  
  
with tbutton.create(application) do  
begin  
parent := p.pages[2]; // "Указываем" кнопке родительскую страницу  
caption := 'Привет, страница 3';  
left := 100;  
top := 90;  
end; // with  
  
// Это должно быть сделано, или tab первоначально не синхронизируется  
// с правильной страницей. Только в случае, если у вас более чем одна страница.  
p.activepage := p.pages[1];  
p.activepage := p.pages[0]; // Реально показываемая страница  
end;  

Вариант 2

В данном документе показана технология динамического добавления страниц компонента pagecontrol (объектов ttabsheet) к элементу управления windows 95/nt pagecontrol (объект tpagecontrol). Оба этих объекта объявлены в модуле comctrls. Поэтому убедитесь в том, что comctrls указан в списке используемых модулей.

Как динамически создать pagecontrol

Прежде, чем мы приступим к динамическому созданию страниц, давайте динамически создадим pagecontrol (если он еще не на форме). Это делается посредством вызова конструктора tpagecontrol create с параметром owner, равным self. Конструктор create возвращает объектную ссылку на вновь созданный объект pagecontrol и назначает его переменной 'pagecontrol'. Вторым шагом будет установка свойства pagecontrol parent в self. Свойство parent определяет где должен быть отображен новый pagecontrol; в нашем случае это будет сама форма. Вот кусок кода, демонстрирующий вышесказанное:


var  
  
pagecontrol : tpagecontrol;  
  
pagecontrol := tpagecontrol.create(self);  
pagecontrol.parent := self;  

Примечание: При разрушении формы разрушаются также pagecontrol и ее закладки, поскольку они принадлежат форме.

Как динамически создавать закладки

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


var  
tabsheet : ttabsheet;  
tabsheet := ttabsheet.create(self);  

Затем ему необходимо присвоить заголовок следующей командой:


tabsheet.caption := 'Закладка 1';  

И, наконец, самая важное действие заключается в том, что новой странице необходимо сообщить, какому объекту pagecontrol она принадлежит. Это делается с помощью присваивания свойством ttabsheet pagecontrol переменной-ссылки tpagecontrol, типа той, которую мы создали выше (pagecontrol). Вот кусок кода, демонстрирующий вышесказанное:


tabsheet.pagecontrol := pagecontrol;  

Как динамически добавлять к страницам элементы управления

Ключевым моментом при создании и размещении элемента управления на странице tabsheet является назначение свойства parent на переменную-ссылку класса ttabsheet. Вот пример:


var  
  
button : tbutton;  
button := tbutton.create(self);  
button.caption := 'Кнопка 1';  
button.parent := tabsheet;  

Более подробно об объектах tpagecontrol и ttabsheet вы можете узнать в онлайн-документации, или посмотреть код файла comctrls.pas, расположенного в вашем каталоге ..delphi 2.0sourcevcl.

Полный код примера


// Код использует форму с единственной на ней кнопкой.  
  
unit dynamictabsheetsunit;  
interface  
uses  
windows, messages, sysutils, classes, graphics, controls,  
forms, dialogs, stdctrls, buttons;  
type  
tform1 = class(tform)  
button1: tbutton;  
procedure button1click(sender: tobject);  
procedure testmethod(sender: tobject);  
private  
{ private declarations }  
public  
{ public declarations }  
end;  
  
var  
form1: tform1;  
implementation  
uses comctrls;  
{$r *.dfm}  
procedure tform1.button1click(sender: tobject);  
var  
pagecontrol: tpagecontrol;  
tabsheet: ttabsheet;  
begin  
// Создаем pagecontrol  
pagecontrol := tpagecontrol.create(self);  
pagecontrol.parent := self;  
// Создаем первую страницу и связываем ее с pagecontrol  
tabsheet := ttabsheet.create(self);  
tabsheet.caption := 'Закладка 1';  
tabsheet.pagecontrol := pagecontrol;  
// Создаем первую страницу  
with tbutton.create(self) do  
begin  
caption := 'Кнопка 1';  
onclick := testmethod; // Назначаем обработчик события  
parent := tabsheet;  
end;  
// Создаем вторую страницу и связываем ее с pagecontrol  
tabsheet := ttabsheet.create(self);  
tabsheet.caption := ' Закладка 2';  
tabsheet.pagecontrol := pagecontrol;  
end;  
  
procedure tform1.testmethod(sender: tobject);  
begin  
showmessage('Привет');  
end;  
end.  
Теги:
PageControl, TabSheet
Добавлено: 26 Июля 2018 20:40:02 Добавил: Андрей Ковальчук Нравится 0
Добавить
Комментарии:
Нету комментариев для вывода...