Советы по Delphi

         

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


В данном документе показана технология динамического добавления страниц компонента 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.0\SOURCE\VCL.

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

    // Код использует форму с единственной на ней кнопкой.

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.

[001531]



Содержание раздела