{ *************************************************************************** * * * This source is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * * This code is distributed in the hope that it will be useful, but * * WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * General Public License for more details. * * * * A copy of the GNU General Public License is available on the World * * Wide Web at . You can also * * obtain it by writing to the Free Software Foundation, * * Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1335, USA. * * * *************************************************************************** } unit notebku; {$mode objfpc} {$H+} interface uses Classes, SysUtils, Controls, Forms, ExtCtrls, Buttons, StdCtrls, ComCtrls; type TForm1 = class(TForm) procedure fNotebkResize(Sender: TObject); private public fNotebk: TNotebook; fNotebook: TPageControl; fButton1: TButton; fButton2: TButton; fButton3: TButton; fButton4: TButton; fButton5: TButton; fButton6: TButton; FRadButton: TRadioButton; FCheckBox: TCheckBox; FComboBox: TComboBox; FLabel: TLabel; FGroupbox1, FGroupbox2: TGroupBox; constructor Create(AOwner: TComponent); override; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button3Click(Sender: TObject); procedure Button4Click(Sender: TObject); procedure Button5Click(Sender: TObject); procedure Button6Click(Sender: TObject); end; var Form1: TForm1; implementation procedure TForm1.fNotebkResize(Sender: TObject); begin with fNotebook do SetBounds(20,50,Parent.Width-50,Parent.Height-110); end; constructor TForm1.Create(AOwner: TComponent); var i: integer; begin inherited CreateNew(AOwner, 1); Caption := 'Notebook/PageControl Test'; Width := 300; Height := 400; Left := 200; Top := 200; // Create the Notebook fNotebk := TNotebook.Create(Self); with fNotebk do begin Parent := Self; Align := alClient; Left := 0; Top :=0; Width := Self.Width; Height := Self.Height; for i:=1 to 5 do Pages.Add('Page '+IntToStr(i)); end; fNotebk.Page[4].OnResize:=@fNotebkResize; // Create the nested PageControl fNotebook := TPageControl.Create(Self); with fNotebook do begin Parent := fNotebk.Page[4]; for i:=1 to 5 do with TTabSheet.Create(fNotebook) do begin PageControl := fNotebook; Caption := 'Page '+IntToStr(i); end; end; { Create Goto First Page Button on last page of Notebook Delphi Way This way uses the Pages.Objects property which returns a generic object that must be case to a TPage. This is the way Delphi works. } fButton1 := TButton.Create(Self); with fButton1 do begin Parent := fNotebk.Page[4]; OnClick := @Button1Click; Width := 150; Height := 23; left := (fNotebk.Width - Width) div 2; top := 20; Caption := 'Goto First Page'; Show; end; { Create Goto Last Page Button on first page of Notebook Custom Way This way uses the Page property which returns a TPage object. The Pages.Objects property returns a generic object that must be case to a TPage. This property is specific to Lazarus } fButton2 := TButton.Create(Self); with fButton2 do begin Parent := fNotebk.Page[0]; OnClick := @Button2Click; Width := 150; Height := 23; left := (fNotebk.Width - Width) div 2; top := 20; Caption := 'Goto Last Page'; Show; end; fGroupBox1 := TGroupBox.Create(Self); with fGroupBox1 do begin Parent := fNotebk.Page[0]; Width := 250; Height := 250; left := (fNotebk.Width - Width) div 2; top := 50; Caption := 'Groupbox 1'; Show; end; fGroupBox2 := TGroupBox.Create(Self); with fGroupBox2 do begin Parent := fGroupBox1; Width := 220; Height := 210; left := 10; top := 10; Caption := 'Groupbox 2'; Show; end; fRadButton := TRadioButton.Create(Self); with fRadButton do begin Parent := fGroupBox2; Width := 150; Height := 23; left := 10; top := 10; Caption := 'Radiobutton 1'; Show; end; fCheckBox := TCheckBox.Create(Self); with fCheckBox do begin Parent := fGroupBox2; Width := 150; Height := 23; left := 10; top := 40; Caption := 'Checkbox 1'; Show; end; fComboBox := TComboBox.Create(Self); with fComboBox do begin Parent := fGroupBox2; Width := 150; Height := 23; left := 10; top := 70; Caption := 'Combobox 1'; Show; end; fLabel := TLabel.Create(Self); with fLabel do begin Parent := fGroupbox2; OnClick := @Button2Click; Width := 150; Height := 23; left := 10; top := 100; Caption := 'Label 1'; Show; end; // Create Close Button on the form fButton3 := TButton.Create(Self); with fButton3 do begin Parent := Self; OnClick := @Button3Click; Width := 70; Height := 23; left := (Parent.Width - Width - 20); top := (Parent.Height - 40); Caption := 'Close'; Show; end; // Create Show/Hide Tabs Button on first page of TabbedNotebook fButton4 := TButton.Create(fNotebook.Page[0]); with fButton4 do begin Parent := fNotebook.Page[0]; OnClick := @Button4Click; Width := 90; Height := 23; left := (250 {Parent.Width} - Width) div 2; top := 150; Caption := 'Hide Tabs'; Show; end; // Create Delete Page Button on third page of TabbedNotebook fButton5 := TButton.Create(fNotebook.Page[2]); with fButton5 do begin Parent := fNotebook.Page[2]; OnClick := @Button5Click; Width := 120; Height := 23; left := (250 {Parent.Width} - Width) div 2; top := 100; Caption := 'Delete Page'; Show; end; // Create Set Tabs Position Button on first page of TabbedNotebook fButton6 := TButton.Create(fNotebook.Page[0]); with fButton6 do begin Parent := fNotebook.Page[0]; OnClick := @Button6Click; Width := 150; Height := 23; left := (250 {Parent.Width} - Width) div 2; top := 190; Caption := 'Set Tab Position'; Show; end; // Goto the first page of the Notebook fNotebk.PageIndex := 0; end; procedure TForm1.Button1Click(Sender: TObject); begin fNotebk.PageIndex := 0; end; procedure TForm1.Button2Click(Sender: TObject); begin fNotebk.PageIndex := fNotebk.Pages.Count - 1; end; procedure TForm1.Button3Click(Sender: TObject); begin Close; end; procedure TForm1.Button4Click(Sender: TObject); begin fNotebook.ShowTabs := not fNotebook.ShowTabs; if (fNotebook.ShowTabs) then fButton4.Caption := 'Hide Tabs' else fButton4.Caption := 'Show Tabs'; end; procedure TForm1.Button5Click(Sender: TObject); begin if (fNotebook.PageCount > 1) then begin // Make sure we don't delete the page with the delete button on it if (fNotebook.PageIndex = fNotebook.PageCount - 1) then fNotebook.Pages[fNotebook.PageCount - 2].Free else fNotebook.Pages[fNotebook.PageCount - 1].Free; end; end; procedure TForm1.Button6Click(Sender: TObject); begin if fNotebook.TabPosition = tpTop then fNotebook.TabPosition := tpRight else if fNotebook.TabPosition = tpRight then fNotebook.TabPosition := tpBottom else if fNotebook.TabPosition = tpBottom then fNotebook.TabPosition := tpLeft else if fNotebook.TabPosition = tpLeft then fNotebook.TabPosition := tpTop; end; end.