Вариант 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.
|