Živě.cz o počítačích a internetu

Tipy a triky v Delphi, díl 178. – formulář jako záložka

Jan Šindelář 30.3.2005

Dnes si budeme opět hrát se standardními komponentami Delphi a zkusíme si poněkud netradiční kombinaci. Budeme zobrazovat formuláře na záložkách komponenty PageControl.

Pravidelní čtenáři si možná vzpomenou, jak jsme kdysi zkoušeli umístit ProgressBar do tlačítka. Postup byl celkem jednoduchý, stačilo při vytváření ProgressBaru specifikovat vlastníka komponenty, kterým byl v tomto případě Button. O něco podobného se pokusíme i dnes, ale hlavní roli tentokrát budou hrát celé formuláře a komponenta PageControl. Na jednotlivých záložkách budeme zobrazovat formuláře.

Začneme tím, že si založíme nový projekt a kromě hlavního formuláře si vytvoříme i několik dalších formulářů. Na ně pak můžeme umístit libovolné další komponenty, dopsat funkce, prostě cokoliv jsme zvyklí. Teď se vrátíme k hlavnímu formuláři a umístíme na něj PageControl. Ten nám bude sloužit jako hostitel pro jednotlivé formuláře, resp. záložky, které pak budou formuláře obsahovat. Ty budeme vytvářet dynamicky.

Pro naši funkci, kterou uděláme jako událost tlačítka na hlavním formuláři, budeme potřebovat dvě proměnné. První bude formulář, tedy v našem příkladu typu TForm2, což je sekundární formulář, který budeme chtít zobrazit jako záložku. Druhou proměnnou bude samotná záložka, tedy typ TTabSheet, kterou budeme poté zobrazovat v připraveném a dosud prázdném PageControl.

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Unit2, StdCtrls, ComCtrls;

type
  TForm1 = class(TForm)
    PageControl1: TPageControl;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
  SheetForm : TForm2;
  Sheet : TTabSheet;
begin
  Sheet := TTabSheet.Create(PageControl1) ;
  Sheet.PageControl := PageControl1;
  SheetForm := TForm2.Create(Sheet) ;
  with SheetForm do
    begin
      Parent := Sheet;
      Align := alClient;
      BorderStyle := bsNone;
      Visible := true;
      Sheet.Caption := Caption;
    end;
  PageControl1.ActivePage := Sheet;
end;

end.

Zbytek kódu už je pak velmi jednoduchý. Vytvoříme nejprve novou záložku na připraveném PageControl. Poté vytvoříme nový formulář typu TForm2 a jako jeho vlastníka a rodičovský objekt určíme právě novou záložku (vlastnost Parent). Pochopitelně můžeme nastavit všechny běžné parametry formuláře. Za zmínku stojí alespoň v příkladu použitý BorderStyle. Pokud jej vynecháte (či nastavíte jinou hodnotu než bsNone), bude na záložce zobrazen formulář celý, tedy včetně titulkového pruhu. Na ten ovšem pozor, protože bude plně funkční, takže uživatel pak může takové "okno v záložce" klidně minimalizovat či zavřít. No a to je vlastně vše. Poslední řádek kódu již jen vytvořenou záložku s formulářem nastaví jako aktivní.