unit Unit1; {$mode objfpc}{$H+} interface uses Classes, SysUtils, LResources, Forms, Controls, Graphics, Dialogs, ExtCtrls, ugradbtn, StdCtrls, ComCtrls, LCLType, LCLProc, LCLIntf, Buttons, ugradtabcontrol, Menus, Spin, EditBtn, types; type TTryOutPage = class(TGradTabPage) end; { TForm1 } TForm1 = class(TForm) CheckBox1: TCheckBox; CheckBox2: TCheckBox; CheckGroup1: TCheckGroup; ComboBox1: TComboBox; ComboBox2: TComboBox; Edit1: TEdit; GradButton1: TGradButton; GradTabPage1: TGradTabPage; GradTabPage2: TGradTabPage; GradTabPage3: TGradTabPage; ImageList1: TImageList; Label1: TLabel; Label2: TLabel; Memo1: TMemo; NewPageBtn: TGradButton; DeleteBtn: TGradButton; GradTabControl1: TGradTabControl; Memo2: TMemo; MenuItem1: TMenuItem; Panel1: TPanel; Panel2: TPanel; PopupMenu1: TPopupMenu; RadioGroup1: TRadioGroup; RadioGroup2: TRadioGroup; SpinEdit2: TSpinEdit; procedure CheckBox1Click(Sender: TObject); procedure CheckBox2Change(Sender: TObject); procedure CheckGroup1Click(Sender: TObject); procedure CheckGroup1ItemClick(Sender: TObject; Index: integer); procedure ComboBox1Change(Sender: TObject); procedure ComboBox2Change(Sender: TObject); procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); procedure DeleteBtnClick(Sender: TObject); procedure GradButton1Click(Sender: TObject); procedure GradTabControl1DragDrop(Sender, Source: TObject; X, Y: Integer); procedure GradTabControl1DragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean); procedure GradTabControl1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure GradTabControl1MouseWheelDown(Sender: TObject; Shift: TShiftState; MousePos: TPoint; var Handled: Boolean); procedure GradTabControl1MouseWheelUp(Sender: TObject; Shift: TShiftState; MousePos: TPoint; var Handled: Boolean); procedure GradTabControl1PageChanged(Sender: TObject); procedure GradTabControl1TabButtonMouseDown( GradTabControl: TGradTabControl; Button: TMouseButton; Shift: TShiftState; X, Y, AIndex: Integer); procedure GradTabControl1TabButtonMouseMove( GradTabControl: TGradTabControl; Shift: TShiftState; X, Y, AIndex: Integer ); procedure GradTabControl1TabButtonMouseUp(GradTabControl: TGradTabControl; Button: TMouseButton; Shift: TShiftState; X, Y, AIndex: Integer); procedure GradTabControl1TabCloseButtonClick( GradTabControl: TGradTabControl; AIndex: Integer); procedure NewPageBtnClick(Sender: TObject); procedure RadioGroup1Click(Sender: TObject); procedure RadioGroup2Click(Sender: TObject); procedure SpinEdit2EditingDone(Sender: TObject); private { private declarations } public FDragIndex : Integer; { public declarations } end; var Form1: TForm1; implementation uses gradtabstyle; { TForm1 } procedure TForm1.FormCreate(Sender: TObject); begin GradTabControl1.Style :=TGradTabVistaBlueStyle.Create; GradTabControl1.Style.RoundedCorners:=false; GradTabControl1.Align:=alClient; GradTabControl1.TabPosition:=tpTop; SpinEdit2.Value:=GradTabControl1.TabHeight; GradTabControl1.Images := ImageList1; GradTabControl1.Page[0].ImageIndex:=0; GradTabControl1.Page[0].TabButton.ShowGlyph:=true; //GradTabControl1.PagesBar.MoveToNext; ComboBox1.Items.Assign(GradTabControl1.Tabs); end; procedure TForm1.CheckBox1Click(Sender: TObject); begin GradTabControl1.LongTabs:=CheckBox1.Checked; //SpinEdit1.Enabled:=CheckBox1.Checked; Edit1.Enabled:=CheckBox1.Checked; GradButton1.Enabled:=CheckBox1.Checked; Edit1.Text:=IntToStr(GradTabControl1.LongWidth); end; procedure TForm1.CheckBox2Change(Sender: TObject); begin GradTabControl1.Style.RoundedCorners:= CheckBox2.Checked; Invalidate; end; procedure TForm1.CheckGroup1Click(Sender: TObject); begin end; procedure TForm1.CheckGroup1ItemClick(Sender: TObject; Index: integer); begin with GradTabControl1 do begin case Index of 0 : AutoShowScrollButtons := CheckGroup1.Checked[0]; 1 : ShowLeftTopScrollButton := CheckGroup1.Checked[1]; 2 : ShowRightBottomScrollButton := CheckGroup1.Checked[2]; end; CheckGroup1.Checked[0] := AutoShowScrollButtons; CheckGroup1.Checked[1] := ShowLeftTopScrollButton; CheckGroup1.Checked[2] := ShowRightBottomScrollButton; end; end; procedure TForm1.ComboBox1Change(Sender: TObject); begin GradTabControl1.PageIndex:=GradTabControl1.Tabs.IndexOf(ComboBox1.Text); end; procedure TForm1.ComboBox2Change(Sender: TObject); begin case ComboBox2.ItemIndex of 0: GradTabControl1.Style := TGradTabStandardStyle.Create; 1: GradTabControl1.Style := TGradTabVistaStyle.Create; 2: GradTabControl1.Style := TGradTabVistaBlueStyle.Create; end; GradTabControl1.Style.RoundedCorners:= CheckBox2.Checked; end; procedure TForm1.FormDestroy(Sender: TObject); begin GradTabControl1.Free; end; procedure TForm1.DeleteBtnClick(Sender: TObject); var C : Integer; T : String; begin T := ComboBox1.Text; C := GradTabControl1.Tabs.IndexOf(T); DebugLn('Text=%s Index=%d',[T,ComboBox1.Items.IndexOf(T)]); if (C < GradTabControl1.PageList.Count) AND (GradTabControl1.PageList.Count<>0) then begin ComboBox1.Items.Delete(ComboBox1.Items.IndexOf(T)); GradTabControl1.Tabs.Delete(C); end; end; procedure TForm1.GradButton1Click(Sender: TObject); begin GradTabControl1.LongWidth := StrToInt(Edit1.Text); Edit1.Text:=IntToStr(GradTabControl1.LongWidth); end; procedure TForm1.GradTabControl1DragDrop(Sender, Source: TObject; X, Y: Integer ); var SenderBtn, SourceBtn : TGradTabPageButton; SenderPage, SourcePage : TGradTabPage; begin DebugLn('Drop Name=%s',[Sender.ClassName]); if not (Sender is TGradTabPageButton) then Exit; SenderBtn := Sender as TGradTabPageButton; SenderPage:= SenderBtn.Owner as TGradTabPage; SourcePage:= GradTabControl1.Page[FDragIndex]; if Sender = Source then Exit; if SourcePage.PageIndex=SenderPage.PageIndex then Exit; SourcePage.PageIndex:=SenderPage.PageIndex; //if (Sender is TGradTabControl) then Accept := True; end; procedure TForm1.NewPageBtnClick(Sender: TObject); var C,R,G,B : Integer; newName : String; begin C := -1; repeat Inc(C); newName := 'tab_'+IntToStr(C); until(GradTabControl1.Tabs.IndexOf(newName)=-1); GradTabControl1.Tabs.Add(newName); Randomize; R := Random(255)+1; G := Random(255)+1; B := Random(255)+1; //WriteLn(R, ' ', G, ' ', B, ColorToString(RGBToColor(R,G,B))); with GradTabControl1.ActivePage do begin Caption:='tab_'+IntToStr(C); TabPopupMenu := PopupMenu1; PopupMenu:= PopupMenu1; ImageIndex:=0; TabShowGlyph:=true; ShowCloseButton:=true; ShowCloseButtonOnMouseOver:=true; end; ComboBox1.ItemIndex:=ComboBox1.Items.Add('tab_'+IntToStr(C)); RadioGroup2Click(nil); end; procedure TForm1.GradTabControl1DragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean); var SenderBtn, SourceBtn : TGradTabPageButton; SenderPage, SourcePage : TGradTabPage; begin //DebugLn('Name=%s',[Sender.ClassName]); Accept := false; if (Sender is TGradTabPageButton) OR (Sender is TGradTabPagesBar) then Accept := True; end; procedure TForm1.GradTabControl1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin //DebugLn('MouseDown on %s',[Sender.ClassName]); end; procedure TForm1.GradTabControl1MouseWheelDown(Sender: TObject; Shift: TShiftState; MousePos: TPoint; var Handled: Boolean); var NewNum : Integer; begin NewNum:= GradTabControl1.PageIndex; Inc(NewNum); GradTabControl1.PageIndex:=NewNum; end; procedure TForm1.GradTabControl1MouseWheelUp(Sender: TObject; Shift: TShiftState; MousePos: TPoint; var Handled: Boolean); var NewNum : Integer; begin NewNum:= GradTabControl1.PageIndex; Dec(NewNum); GradTabControl1.PageIndex:=NewNum; end; procedure TForm1.GradTabControl1PageChanged(Sender: TObject); begin with GradTabControl1 do ComboBox1.Text:=Tabs[PageIndex]; end; procedure TForm1.GradTabControl1TabButtonMouseDown( GradTabControl: TGradTabControl; Button: TMouseButton; Shift: TShiftState; X, Y, AIndex: Integer); begin DebugLn('MouseDown - BeginDrag'); if ssCtrl in Shift then begin GradTabControl1.BeginDrag(False); FDragIndex:=AIndex; end; end; procedure TForm1.GradTabControl1TabButtonMouseMove( GradTabControl: TGradTabControl; Shift: TShiftState; X, Y, AIndex: Integer); begin end; procedure TForm1.GradTabControl1TabButtonMouseUp( GradTabControl: TGradTabControl; Button: TMouseButton; Shift: TShiftState; X, Y, AIndex: Integer); begin //ShowMessage('TabMouseUp: Index: '+IntToStr(AIndex)+' Caption: '+GradTabControl.Page[AIndex].Caption); if Button=mbMiddle then begin //GradTabControl.Tabs.Delete(AIndex); ComboBox1.Items.Delete(ComboBox1.Items.IndexOf(GradTabControl.Page[AIndex].Caption)); GradTabControl.Page[AIndex].Free; end; end; procedure TForm1.GradTabControl1TabCloseButtonClick( GradTabControl: TGradTabControl; AIndex: Integer); begin ComboBox1.Items.Delete(ComboBox1.Items.IndexOf(GradTabControl.Page[AIndex].Caption)); GradTabControl.Page[AIndex].Free; end; procedure TForm1.RadioGroup1Click(Sender: TObject); begin case RadioGroup1.ItemIndex of 0: GradTabControl1.TabPosition := tpTop; 1: GradTabControl1.TabPosition := tpBottom; 2: GradTabControl1.TabPosition := tpLeft; 3: GradTabControl1.TabPosition := tpRight; end; end; procedure TForm1.RadioGroup2Click(Sender: TObject); var i : Integer; begin for i := 0 to GradTabControl1.PageCount - 1 do with GradTabControl1.Page[i] do case RadioGroup2.ItemIndex of 0: TabButtonLayout := blGlyphLeft; 1: TabButtonLayout := blGlyphBottom; 2: TabButtonLayout := blGlyphRight; 3: TabButtonLayout := blGlyphTop; end; end; procedure TForm1.SpinEdit2EditingDone(Sender: TObject); begin GradTabControl1.TabHeight:=SpinEdit2.Value; end; initialization {$I unit1.lrs} end.