| 
 Динамические PageControl и TabSheet 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.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.
 | 
 
 |