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

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í.

Diskuze (6) Další článek: Canon představuje nové skenery nejvyšší třídy

Témata článku: Software, Windows, Programování, TRI, Záložka, Formulář, ALCL, Díl, Trik, Jak, Borders, DEL



25 nejlepších filmových parodií, které můžete vidět. Víme, kde je najdete online

25 nejlepších filmových parodií, které můžete vidět. Víme, kde je najdete online

Filmové parodie jsou divácky velmi vděčné a mezi filmaři oblíbené. Tvůrci v nich mohou totiž zcela beztrestně vykrádat cizí díla a v jejich nápodobě popustit uzdu své fantazii. Vybrali jsme nejlepší zahraniční i české parodie.

Jaromír PukMarek Čech
Filmy, které musíte vidět
Vlk se nažral a koza zůstala celá. Google bude dál špehovat i bez cookies

Vlk se nažral a koza zůstala celá. Google bude dál špehovat i bez cookies

Podle posledních informací Google v polovině příštího roku odstraní z Chromu takzvané cookies třetích stran. Přidá se tak k většině ostatních prohlížečů. Co to bude znamenat pro běžné uživatele?

Jan Spěšný
Články z Computeru