How to dynamically create a TPageControl

by Aug 19, 1996

 Technical Information Database

TI1321D.txt - How to dynamically create a TPageControl

Category   :VCL
Platform   :All-32Bit
Product    :All32Bit,   

Description:
This document demonstrates how to dynamically add tab sheets 
(TTabSheet objects) to a Windows 9x/NT Page Control (TPageControl 
object).  Both of these objects are declared in the ComCtrls 
unit.  So make sure that ComCtrls is listed in the 'uses' clause 
on your form.


HOW TO DYNAMICALLY CREATE A PAGE CONTROL
----------------------------------------

Before we get into dynamically creating tab sheets, lets first 
discuss how to dynamically create a PageControl (if one isn't 
on the form already).  This is done by calling TPageControl's 
Create constructor with an owner parameter of Self.  The Create 
constructor returns a object reference of the newly created Page 
Control object and assigns it to the 'PageControl' variable.  
The second step is to set PageControl's Parent property to Self. 
The Parent property determines where the new PageControl is to be 
displayed; in this case its the form itself.  Here's a code snippet 
that demonstrates this.

var
  PageControl : TPageControl;

PageControl := TPageControl.Create(Self);
PageControl.Parent := Self;

Note: When the form gets destroyed the Page Control and it tab 
sheets will be destroyed also because they are owned by the form. 


HOW TO DYNAMICALLY CREATE A TAB SHEET
--------------------------------------

There are two basic steps to dynamically add a new page to a 
PageControl.  The first is to dynamically create the TTabSheet 
as follows:

var
  TabSheet : TTabSheet;

TabSheet := TTabSheet.Create(Self);

Then we need to give it a caption as follows:

TabSheet.Caption := 'Tabsheet 1';

And finally, the most important piece is to tell the new tab sheet 
which Page Control it belongs to.  This is done by assigning the 
TTabSheet's PageControl property a TPageControl reference variable 
like the one created above (PageControl). Here's a code snippet 
that demonstrates this.

TabSheet.PageControl := PageControl;


HOW TO DYNAMICALLY ADD A CONTROL TO A TAB SHEET
-----------------------------------------------

The key to creating and placing any control on a tab sheet is to 
assign it's Parent property a TTabSheet class reference variable.  
Here is an example.

var
  Button : TButton;

Button := TButton.Create(Self);
Button.Caption := 'Button 1';
Button.Parent := TabSheet;

For more information on the TPageControl and TTabSheet objects 
refer to the on-line documentation as well as look at the 
ComCtrls.pas file in your ..Delphi..SOURCEVCL directory. 

FULL SOURCE EXAMPLE
-------------------

// This code is extracted from a form with a single button on it.

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
  // Create the PageControl
  PageControl := TPageControl.Create(Self);
  PageControl.Parent := Self;

  // Create 1st page and associate it with the PageControl
  TabSheet := TTabSheet.Create(Self);
  TabSheet.Caption := 'Tabsheet 1';
  TabSheet.PageControl := PageControl;

  // Create the first page

  with TButton.Create(Self) do
  begin
    Caption := 'Button 1';
    OnClick := TestMethod;  // Assign an event handle
    Parent := TabSheet;
  end;

  // Create 2nd page and associate it with the PageControl

  TabSheet := TTabSheet.Create(Self);
  TabSheet.Caption := ' Tabsheet 2';
  TabSheet.PageControl := PageControl;
end;

procedure TForm1.TestMethod(Sender: TObject);
begin
  ShowMessage('Hello');
end;

end.


Reference:
 

3/26/99 11:29:14 AM

Article originally contributed by Borland Staff