unit uMainForm ; {$mode objfpc}{$H+} interface uses Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, Menus, ComCtrls, Buttons, StdCtrls, ExtCtrls, Spin, TDIClass, IpHtml; type { TfMainForm } TfMainForm = class(TForm) bToggleLog : TButton ; Button1 : TButton ; cbxBackgroundCorner : TComboBox ; Image1 : TImage ; ImageList1 : TImageList ; IpHtmlPanel1 : TIpHtmlPanel ; Label1 : TLabel ; Label2 : TLabel ; Label3 : TLabel ; MainMenu1 : TMainMenu ; MenuItem3 : TMenuItem ; mEvents : TMemo ; MenuItem1 : TMenuItem ; MenuItem2 : TMenuItem ; miExit : TMenuItem ; miForm2 : TMenuItem ; miForm1 : TMenuItem ; pBottom : TPanel ; seFixedPages : TSpinEdit ; Splitter1 : TSplitter ; StatusBar1 : TStatusBar ; tsFixed : TTabSheet ; TDINoteBook1 : TTDINoteBook ; procedure bToggleLogClick(Sender : TObject) ; procedure Button1Click(Sender : TObject) ; procedure cbxBackgroundCornerChange(Sender : TObject) ; procedure FormClose(Sender : TObject ; var CloseAction : TCloseAction) ; procedure FormCloseQuery(Sender : TObject ; var CanClose : boolean) ; procedure FormCreate(Sender : TObject) ; procedure FormDestroy(Sender : TObject) ; procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); procedure MenuItem3Click(Sender : TObject) ; procedure miExitClick(Sender : TObject) ; procedure miForm1Click(Sender : TObject) ; procedure miForm2Click(Sender : TObject) ; procedure seFixedPagesChange(Sender : TObject) ; procedure TDINoteBook1Change(Sender : TObject) ; procedure TDINoteBook1CloseTabClicked(Sender : TObject) ; procedure TDINoteBook1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); private { private declarations } Procedure ShowNewControl(Sender: TObject); public { public declarations } end ; var fMainForm : TfMainForm ; implementation Uses uForm1, uForm2 ; {$R *.lfm} { TfMainForm } procedure TfMainForm.FormCreate(Sender : TObject) ; begin // This will show how TDI can preserve ActiveControl in Forms, when Changing Pages // Screen.OnActiveControlChange := @ShowNewControl; cbxBackgroundCorner.ItemIndex := Integer(TDINoteBook1.BackgroundCorner); end; procedure TfMainForm.FormDestroy(Sender : TObject) ; begin mEvents.Lines.Add('fMainForm.Destroy'); end; procedure TfMainForm.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin mEvents.Lines.Add('fMainForm.FormKeyDown'); end; procedure TfMainForm.MenuItem3Click(Sender : TObject) ; begin if not Assigned( Form2 ) then Form2 := TForm2.Create(Self); Form2.Show; end; procedure TfMainForm.cbxBackgroundCornerChange(Sender : TObject) ; begin TDINoteBook1.BackgroundCorner := TTDIBackgroundCorner( cbxBackgroundCorner.ItemIndex ); end; procedure TfMainForm.bToggleLogClick(Sender : TObject) ; begin mEvents.Visible := not mEvents.Visible ; if mEvents.Visible then bToggleLog.Caption := 'Hide Log >' else bToggleLog.Caption := '< Show Log' ; end; procedure TfMainForm.Button1Click(Sender : TObject) ; begin Form2.Free; Form2 := nil; end; procedure TfMainForm.FormClose(Sender : TObject ; var CloseAction : TCloseAction ) ; begin Screen.OnActiveControlChange := nil; end; procedure TfMainForm.FormCloseQuery(Sender : TObject ; var CanClose : boolean) ; begin CanClose := TDINoteBook1.CanCloseAllPages; end; procedure TfMainForm.miExitClick(Sender : TObject) ; begin Close; end; procedure TfMainForm.miForm1Click(Sender : TObject) ; begin // You can Use Form Types // TDINoteBook1.CreateFormInNewPage( TForm1, 3 ); end; procedure TfMainForm.miForm2Click(Sender : TObject) ; begin if not Assigned( Form2 ) then Form2 := TForm2.Create(Self); TDINoteBook1.ShowFormInPage( Form2, 4 ); end; procedure TfMainForm.seFixedPagesChange(Sender : TObject) ; begin TDINoteBook1.FixedPages := seFixedPages.Value; end; procedure TfMainForm.TDINoteBook1Change(Sender : TObject) ; begin mEvents.Lines.Add('OnChange'); end; procedure TfMainForm.TDINoteBook1CloseTabClicked(Sender : TObject) ; begin mEvents.Lines.Add( 'TDINoteBook1.OnCloseTabClicked' ); end; procedure TfMainForm.TDINoteBook1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin mEvents.Lines.Add( 'TDINoteBook1.OnMouseDown' ); end; procedure TfMainForm.ShowNewControl(Sender : TObject) ; var ControlCaption : String ; begin if Assigned( Screen.ActiveControl ) then ControlCaption := Screen.ActiveControl.ClassName + ' - '+ Screen.ActiveControl.Name else ControlCaption := 'nil' ; StatusBar1.Panels[1].Text := ControlCaption; mEvents.Lines.Add( 'New Control: '+ControlCaption ); end ; end.