diff --git a/components/tdi/Demo/TDIDemo.lps b/components/tdi/Demo/TDIDemo.lps
index bbffe1f0a..c14fd3295 100644
--- a/components/tdi/Demo/TDIDemo.lps
+++ b/components/tdi/Demo/TDIDemo.lps
@@ -4,7 +4,7 @@
-
+
@@ -12,7 +12,7 @@
-
+
@@ -23,7 +23,7 @@
-
+
@@ -32,13 +32,10 @@
-
-
-
-
-
-
+
+
+
@@ -49,9 +46,9 @@
-
-
-
+
+
+
@@ -61,28 +58,28 @@
+
-
-
-
+
+
+
-
-
+
-
-
-
+
+
+
-
-
-
-
+
+
+
+
@@ -92,20 +89,20 @@
-
+
-
-
-
+
+
+
-
-
+
+
@@ -114,7 +111,7 @@
-
+
@@ -125,7 +122,7 @@
-
+
@@ -133,7 +130,7 @@
-
+
@@ -141,14 +138,14 @@
-
+
-
+
@@ -157,37 +154,39 @@
-
+
-
-
+
+
-
-
+
+
-
+
+
-
-
+
+
+
-
-
-
+
+
+
@@ -195,30 +194,30 @@
-
+
-
-
+
+
-
-
-
+
+
+
-
+
@@ -226,7 +225,7 @@
-
+
@@ -234,36 +233,36 @@
-
+
-
+
-
-
-
+
+
+
-
+
-
+
@@ -271,7 +270,7 @@
-
+
@@ -279,14 +278,14 @@
-
+
-
+
@@ -294,7 +293,7 @@
-
+
@@ -302,7 +301,7 @@
-
+
@@ -310,7 +309,7 @@
-
+
@@ -318,7 +317,7 @@
-
+
@@ -326,7 +325,7 @@
-
+
@@ -334,21 +333,21 @@
-
+
-
+
-
+
@@ -356,7 +355,7 @@
-
+
@@ -364,14 +363,14 @@
-
+
-
+
@@ -379,7 +378,7 @@
-
+
@@ -387,7 +386,7 @@
-
+
@@ -395,14 +394,14 @@
-
+
-
-
-
+
+
+
@@ -413,29 +412,29 @@
-
+
-
-
-
+
+
+
-
+
-
-
-
+
+
+
@@ -443,14 +442,14 @@
-
+
-
+
@@ -458,7 +457,7 @@
-
+
@@ -466,7 +465,7 @@
-
+
@@ -474,28 +473,28 @@
-
+
-
+
-
+
-
+
@@ -504,51 +503,51 @@
-
-
-
+
+
+
-
+
-
+
-
+
-
+
-
-
-
+
+
+
-
+
@@ -556,7 +555,7 @@
-
+
@@ -564,7 +563,7 @@
-
+
@@ -572,14 +571,14 @@
-
+
-
+
@@ -587,14 +586,14 @@
-
+
-
+
@@ -602,112 +601,186 @@
-
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
-
+
+
-
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
+
-
-
+
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/components/tdi/Demo/uform2.lfm b/components/tdi/Demo/uform2.lfm
index b9bf7b75c..0c18b37bb 100644
--- a/components/tdi/Demo/uform2.lfm
+++ b/components/tdi/Demo/uform2.lfm
@@ -16,8 +16,8 @@ object Form2: TForm2
LCLVersion = '1.1'
object Edit1: TEdit
Left = 48
- Height = 27
- Top = 80
+ Height = 23
+ Top = 72
Width = 403
Anchors = [akTop, akLeft, akRight]
TabOrder = 0
@@ -25,47 +25,42 @@ object Form2: TForm2
end
object Edit2: TEdit
Left = 48
- Height = 27
- Top = 120
+ Height = 23
+ Top = 128
Width = 403
Anchors = [akTop, akLeft, akRight]
- TabOrder = 1
+ TabOrder = 2
Text = 'Edit2'
end
object CheckBox1: TCheckBox
Left = 48
- Height = 21
- Top = 152
- Width = 89
- Caption = 'CheckBox1'
- TabOrder = 2
- end
- object CheckBox2: TCheckBox
- Left = 48
- Height = 21
- Top = 184
- Width = 89
- Caption = 'CheckBox2'
- TabOrder = 3
+ Height = 19
+ Top = 98
+ Width = 90
+ Caption = 'Disable Edit 1'
+ Checked = True
+ OnChange = CheckBox1Change
+ State = cbChecked
+ TabOrder = 1
end
object bClose: TButton
- Left = 374
- Height = 29
- Top = 188
- Width = 77
+ Left = 365
+ Height = 25
+ Top = 192
+ Width = 86
Anchors = [akRight, akBottom]
AutoSize = True
Caption = 'Close Form'
OnClick = bCloseClick
- TabOrder = 4
+ TabOrder = 5
end
object Label2: TLabel
AnchorSideLeft.Control = Owner
AnchorSideLeft.Side = asrCenter
- Left = 12
- Height = 39
+ Left = 44
+ Height = 31
Top = 16
- Width = 474
+ Width = 411
Alignment = taCenter
Caption = 'This Form does NOT have Max Constraints. It will be Aligned by "alClient". '#13#10'Design forms like this using Anchors to expand controls all over the Page'
Font.Style = [fsBold]
@@ -77,12 +72,31 @@ object Form2: TForm2
AnchorSideLeft.Side = asrCenter
AnchorSideTop.Control = bClose
AnchorSideTop.Side = asrBottom
- Left = 346
- Height = 18
+ Left = 349
+ Height = 16
Top = 223
- Width = 133
+ Width = 118
BorderSpacing.Top = 6
Caption = 'This Form is not Freed'
ParentColor = False
end
+ object bToggle1: TButton
+ Left = 48
+ Height = 25
+ Top = 192
+ Width = 75
+ Caption = 'Toggle 1'
+ OnClick = bToggle1Click
+ TabOrder = 3
+ end
+ object bToggle2: TButton
+ Left = 144
+ Height = 25
+ Top = 192
+ Width = 75
+ Caption = 'Toggle 2'
+ Enabled = False
+ OnClick = bToggle1Click
+ TabOrder = 4
+ end
end
diff --git a/components/tdi/Demo/uform2.pas b/components/tdi/Demo/uform2.pas
index 1a255159b..a99caf737 100644
--- a/components/tdi/Demo/uform2.pas
+++ b/components/tdi/Demo/uform2.pas
@@ -14,13 +14,16 @@ type
TForm2 = class(TForm)
bClose : TButton ;
+ bToggle1 : TButton ;
+ bToggle2 : TButton ;
CheckBox1 : TCheckBox ;
- CheckBox2 : TCheckBox ;
Edit1 : TEdit ;
Edit2 : TEdit ;
Label1 : TLabel ;
Label2 : TLabel ;
procedure bCloseClick(Sender : TObject) ;
+ procedure bToggle1Click(Sender : TObject) ;
+ procedure CheckBox1Change(Sender : TObject) ;
procedure FormClose(Sender : TObject ; var CloseAction : TCloseAction) ;
procedure FormCloseQuery(Sender : TObject ; var CanClose : boolean) ;
procedure FormDestroy(Sender : TObject) ;
@@ -53,6 +56,17 @@ begin
ClientRect;
end;
+procedure TForm2.bToggle1Click(Sender : TObject) ;
+begin
+ bToggle1.Enabled := not bToggle1.Enabled;
+ bToggle2.Enabled := not bToggle1.Enabled;
+end;
+
+procedure TForm2.CheckBox1Change(Sender : TObject) ;
+begin
+ Edit1.Enabled := CheckBox1.Checked;
+end;
+
procedure TForm2.FormCloseQuery(Sender : TObject ; var CanClose : boolean) ;
begin
fMainForm.mEvents.Lines.Add( 'Form2.CloseQuery: '+BoolToStr(CanClose,'True','False') );
diff --git a/components/tdi/Demo/umainform.lfm b/components/tdi/Demo/umainform.lfm
index 9bb45cd7e..cc5210ec9 100644
--- a/components/tdi/Demo/umainform.lfm
+++ b/components/tdi/Demo/umainform.lfm
@@ -1,10 +1,10 @@
object fMainForm: TfMainForm
- Left = 374
+ Left = 428
Height = 484
- Top = 155
+ Top = 154
Width = 799
Caption = 'fMainForm'
- ClientHeight = 461
+ ClientHeight = 464
ClientWidth = 799
KeyPreview = True
Menu = MainMenu1
@@ -16,8 +16,8 @@ object fMainForm: TfMainForm
LCLVersion = '1.1'
object StatusBar1: TStatusBar
Left = 0
- Height = 17
- Top = 444
+ Height = 23
+ Top = 441
Width = 799
Panels = <
item
@@ -31,9 +31,10 @@ object fMainForm: TfMainForm
end
object TDINoteBook1: TTDINoteBook
Left = 0
- Height = 394
+ Height = 391
Top = 0
Width = 579
+ TabStop = False
ActivePage = tsFixed
Align = alClient
Constraints.MinHeight = 300
@@ -52,24 +53,32 @@ object fMainForm: TfMainForm
MainMenu = MainMenu1
TDIActions.TabsMenu.Caption = 'Tabs'
TDIActions.TabsMenu.ImageIndex = 0
+ TDIActions.TabsMenu.Visible = False
TDIActions.CloseTab.Caption = 'Close Tab'
TDIActions.CloseTab.ImageIndex = 1
+ TDIActions.CloseTab.Visible = True
TDIActions.CloseAllTabs.Caption = 'Close All Tabs'
TDIActions.CloseAllTabs.ImageIndex = 2
- ClosePageShortCut = 16499
+ TDIActions.CloseAllTabs.Visible = True
+ TDIActions.NextTab.Caption = 'Next Tab'
+ TDIActions.NextTab.ImageIndex = 6
+ TDIActions.NextTab.Visible = True
+ TDIActions.PreviousTab.Caption = 'Previous Tab'
+ TDIActions.PreviousTab.ImageIndex = 7
+ TDIActions.PreviousTab.Visible = True
FixedPages = 1
object tsFixed: TTabSheet
Caption = 'TTDINotebook Demo'
- ClientHeight = 364
- ClientWidth = 577
+ ClientHeight = 363
+ ClientWidth = 571
ImageIndex = 5
object Label2: TLabel
AnchorSideLeft.Control = tsFixed
AnchorSideLeft.Side = asrCenter
- Left = 152
- Height = 39
+ Left = 163
+ Height = 31
Top = 312
- Width = 272
+ Width = 244
Alignment = taCenter
Caption = 'This is a Fixed Page, and cannot be closed.'#13#10'You can configure it on "FixedPages" Property'
ParentColor = False
@@ -78,7 +87,7 @@ object fMainForm: TfMainForm
Left = 0
Height = 267
Top = 0
- Width = 577
+ Width = 571
Align = alTop
FixedTypeface = 'Courier New'
DefaultTypeFace = 'default'
@@ -95,7 +104,7 @@ object fMainForm: TfMainForm
object pBottom: TPanel
Left = 0
Height = 50
- Top = 394
+ Top = 391
Width = 799
Align = alBottom
ClientHeight = 50
@@ -103,10 +112,10 @@ object fMainForm: TfMainForm
TabOrder = 2
object cbxBackgroundCorner: TComboBox
Left = 21
- Height = 31
+ Height = 23
Top = 18
Width = 115
- ItemHeight = 0
+ ItemHeight = 15
Items.Strings = (
'coTopLeft'
'coTopRight'
@@ -119,19 +128,19 @@ object fMainForm: TfMainForm
end
object Label1: TLabel
Left = 22
- Height = 18
+ Height = 16
Top = 1
- Width = 114
+ Width = 101
Caption = 'BackgroundCorner'
ParentColor = False
end
object bToggleLog: TButton
AnchorSideTop.Control = pBottom
AnchorSideTop.Side = asrCenter
- Left = 688
- Height = 29
- Top = 11
- Width = 72
+ Left = 675
+ Height = 25
+ Top = 13
+ Width = 85
Anchors = [akTop, akRight]
AutoSize = True
Caption = 'Hide Log >'
@@ -140,15 +149,15 @@ object fMainForm: TfMainForm
end
object Label3: TLabel
Left = 182
- Height = 18
+ Height = 16
Top = 1
- Width = 68
+ Width = 59
Caption = 'FixedPages'
ParentColor = False
end
object seFixedPages: TSpinEdit
Left = 184
- Height = 27
+ Height = 23
Top = 17
Width = 50
MaxValue = 10
@@ -159,7 +168,7 @@ object fMainForm: TfMainForm
end
object mEvents: TMemo
Left = 584
- Height = 394
+ Height = 391
Top = 0
Width = 215
Align = alRight
@@ -171,7 +180,7 @@ object fMainForm: TfMainForm
end
object Splitter1: TSplitter
Left = 579
- Height = 394
+ Height = 391
Top = 0
Width = 5
Align = alRight
@@ -182,7 +191,7 @@ object fMainForm: TfMainForm
AnchorSideBottom.Side = asrBottom
Left = 538
Height = 94
- Top = 266
+ Top = 269
Width = 94
Anchors = [akRight, akBottom]
AutoSize = True
@@ -697,7 +706,7 @@ object fMainForm: TfMainForm
left = 416
top = 400
Bitmap = {
- 4C69060000001000000010000000000000000000000000000000000000000000
+ 4C69080000001000000010000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
@@ -889,7 +898,71 @@ object fMainForm: TfMainForm
FFFF1818FFFF1818FFFF1818FFFF1010E7FF5A215AFFAD4A18FFA54218FFA539
10FF9C3110FF942910FF841008FFFF00FF001818DEFF1818DEFF1818D6FF1818
D6FF1818D6FF1818CEFF1818CEFF1818CEFF42428CFFFF00FF00FF00FF00FF00
- FF00FF00FF00FF00FF00FF00FF00
+ FF00FF00FF00FF00FF00FF00FF00000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000B18B7132D2B099908A4E2517000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00008349227FEFDEC3FFB98A65E8904E22490000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00006636157FE7D4B6FFE5D0B0FFCAA988FD9B5C308E733E1A06000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000522B117FDAC2A4FFD9C0A1FFD8BFA0FFD2B596FFB0764CCE955123270000
+ 000000000000000000000000000000000000A3846DF19B7556FF9A7455FF9370
+ 53FF8B6B51FFD1B495FFD1B494FFD0B293FFCEB091FFCBAE8FFFB88A65F4A35C
+ 2B63000000000000000000000000000000008A664AFFB59778FFBF9F80FFC6A5
+ 85FFCBA989FFCDAB8AFFCDAB8AFFCBA989FFC7A686FFC2A182FFBB9C7DFFB38E
+ 6DFFA56538A981451D1000000000000000007F5A3EFFAC896AFFBA9575FFC39E
+ 7DFFCAA381FFCCA583FFCCA483FFC9A280FFC49E7DFFBB9575FFAD8565FF996F
+ 50FF7E5031FF82451DDF914E2030000000006A4023FF926241FFAC7B57FFBB8A
+ 65FFC2906CFFC4926EFFC2906BFFBD8A65FFB57F5AFFA7724DFF986440FF8755
+ 32FF764524FF7B4520DF87491E3000000000653D1FFF8F5B38FFAE7752FFBE88
+ 63FFC6906CFFC9936FFFC7926DFFC28C67FFBA845EFFAE7852FF9D6844FF8A59
+ 36FF7D4924A66134160F000000000000000078593BF1744B2AFF835A38FF8660
+ 41FF886446FFD5A17BFFD09B77FFC9936FFFBE8863FFB27B55FF8E603BF16C3E
+ 1C5E000000000000000000000000000000000000000000000000000000000000
+ 0000301A0A7FDFAD85FFD7A37FFFCE9874FFBB8961FF7A522FC8502B12230000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000341C097FE7B78CFFDBA784FFAE8359FC57371A8430190A04000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00003B220C7FE1B480FF88663CE13B210C3F0000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000644B274A6E552F932B160611000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000000084492117D1AE9690BE957A32000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000008E4C2049B98A65E8EEDBBEFF8C4E257F000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00006D3B19069B5B2F8EC7A787FDE2CDAEFFE1CDADFF6D39177F000000000000
+ 000000000000000000000000000000000000000000000000000000000000914E
+ 2127AE7449CECCB193FFD3BB9CFFD4BB9DFFD4BB9DFF542C127F000000000000
+ 0000000000000000000000000000000000000000000000000000A1592863B285
+ 60F4C3A98BFFC8AD8EFFCCB091FFCDB192FFCDB192FF8B6D54FF917054FF9872
+ 53FF977051FF9E7E66F100000000000000007C421C10A05F32A9A98565FFB396
+ 78FFBC9E7FFFC4A485FFCAA989FFCDAC8CFFCDAC8BFFCAA888FFC3A283FFBA9A
+ 7CFFB09173FF866144FF0000000088491F30966139DF967558FFA07F61FFAD8B
+ 6CFFBA9676FFC6A07FFFCEA786FFD1AB8AFFD1AB8AFFCEA785FFC59F7EFFB894
+ 73FFAB886AFF866348FF000000007E441C30865430DF7A5335FF91694AFFA77F
+ 5FFFBA9171FFCAA07FFFD3AB8AFFD9B191FFD9B191FFD3A989FFC89C7BFFB689
+ 68FF9B6D4DFF6C4123FF00000000000000005C31140F784420A67F4F2DFF9561
+ 3EFFAE7853FFC18B66FFD29D78FFDEAA87FFDFAB88FFD39E7AFFC38D68FFB07A
+ 54FF97633FFF6E4526FF00000000000000000000000000000000683A195E8A5C
+ 38F1B27C56FFC48E6AFFD6A17EFFE6B391FFE8B792FF8B694BFF866040FF8359
+ 38FF78502EFF7E5E3FF100000000000000000000000000000000000000004C28
+ 1023764E2CC8BB8961FFD09B77FFDBA784FFDEAC85FF351E0C7F000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00002C16080452321784A67B51FCCB9671FFCF9C71FF3B220C7F000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000000371D0A3F7A582FE1C0905BFF42270F7F000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000271305116A512D936B502B4A000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000
}
end
end
diff --git a/components/tdi/tdiclass.pas b/components/tdi/tdiclass.pas
index 5195b62d4..33761ce30 100644
--- a/components/tdi/tdiclass.pas
+++ b/components/tdi/tdiclass.pas
@@ -6,7 +6,7 @@ interface
uses
Classes, SysUtils, Forms, Controls, ComCtrls, ExtCtrls, Menus,
- ExtendedNotebook, Buttons, Graphics ;
+ ExtendedNotebook, Buttons, Graphics ;
type
@@ -21,11 +21,13 @@ type
private
FCaption : String ;
FImageIndex : Integer ;
+ FVisible : Boolean ;
public
Constructor Create ;
published
property Caption : String read FCaption write FCaption ;
property ImageIndex : Integer read FImageIndex write FImageIndex ;
+ property Visible : Boolean read FVisible write FVisible;
end ;
{ TTDIActions }
@@ -34,6 +36,8 @@ type
private
FCloseAllTabs : TTDIAction ;
FCloseTab : TTDIAction ;
+ FNextTab : TTDIAction ;
+ FPreviousTab : TTDIAction ;
FTabsMenu : TTDIAction ;
public
Constructor Create ;
@@ -42,6 +46,8 @@ type
property TabsMenu : TTDIAction read FTabsMenu write FTabsMenu ;
property CloseTab : TTDIAction read FCloseTab write FCloseTab ;
property CloseAllTabs : TTDIAction read FCloseAllTabs write FCloseAllTabs ;
+ property NextTab : TTDIAction read FNextTab write FNextTab ;
+ property PreviousTab : TTDIAction read FPreviousTab write FPreviousTab ;
end ;
{ TTDIPage }
@@ -75,6 +81,10 @@ type
property LastActiveControl : TWinControl read fsLastActiveControl write fsLastActiveControl ;
end ;
+
+ TTDIOption = ( tdiMiddleButtomClosePage, tdiRestoreLastActiveControl,
+ tdiVerifyIfCanChangePage ) ;
+ TTDIOptions = set of TTDIOption ;
{ TTDINoteBook }
TTDINoteBook = class(TExtendedNotebook)
@@ -85,8 +95,8 @@ type
FMainMenu : TMainMenu ;
FBackgroundCorner : TTDIBackgroundCorner ;
FTDIActions : TTDIActions ;
- FClosePageShortCut: TShortCut;
- FClosePageMouseMiddleButtom: Boolean;
+ FTDIOptions : TTDIOptions ;
+ FShortCutClosePage: TShortCut;
procedure SetBackgroundImage(AValue : TImage) ;
procedure SetBackgroundCorner(AValue : TTDIBackgroundCorner) ;
@@ -98,10 +108,8 @@ type
FCloseMenuItem : TMenuItem ;
FCloseMenuItem2 : TMenuItem ;
FCloseAllTabsMenuItem : TMenuItem ;
- FRestoreActiveControl : Boolean ;
FTabsMenuItem : TMenuItem ;
FTimerRestoreLastControl : TTimer;
- FVerifyIfCanChangePage : Boolean ;
FIsRemovingAPage : Boolean;
procedure CreateCloseBitBtn ;
@@ -116,6 +124,8 @@ type
procedure CloseAllTabsClicked( Sender: TObject );
procedure SelectTabByMenu( Sender: TObject );
procedure DropDownTabsMenu( Sender: TObject );
+ procedure NextPageClicked( Sender: TObject );
+ procedure PreviousPageClicked( Sender: TObject );
procedure TimerRestoreLastFocus( Sender: TObject );
@@ -142,6 +152,8 @@ type
Function CanCloseAllPages: Boolean ;
Function CanCloseAPage( APageIndex: Integer): Boolean;
+
+ procedure ScrollPage( ToForward: Boolean );
procedure CheckInterface;
published
@@ -155,22 +167,19 @@ type
property TDIActions : TTDIActions read FTDIActions write FTDIActions ;
- property ClosePageMouseMiddleButtom : Boolean read FClosePageMouseMiddleButtom
- write FClosePageMouseMiddleButtom default True;
- property ClosePageShortCut: TShortCut read FClosePageShortCut
- write FClosePageShortCut default 0;
+ property TDIOptions : TTDIOptions read FTDIOptions write FTDIOptions
+ default [ tdiMiddleButtomClosePage, tdiRestoreLastActiveControl,
+ tdiVerifyIfCanChangePage ];
+ property ShortCutClosePage: TShortCut read FShortCutClosePage
+ write FShortCutClosePage default 16499; // Ctrl+F4
- property RestoreActiveControl : Boolean read FRestoreActiveControl
- write FRestoreActiveControl default True;
- property VerifyIfCanChangePage : Boolean read FVerifyIfCanChangePage
- write FVerifyIfCanChangePage default True;
property FixedPages : Integer read FFixedPages write SetFixedPages default 0;
end ;
implementation
-Uses TDIConst ;
+Uses LCLType, TDIConst;
{ TTDIAction }
@@ -178,6 +187,7 @@ constructor TTDIAction.Create ;
begin
FCaption := '';
FImageIndex := -1;
+ FVisible := True;
end ;
{ TTDIActions }
@@ -192,6 +202,14 @@ begin
FTabsMenu := TTDIAction.Create;
FTabsMenu.Caption := sActionTabsMenu;
+
+ FNextTab := TTDIAction.Create;
+ FNextTab.Caption := sActionNextTab;
+ FNextTab.Visible := False;
+
+ FPreviousTab := TTDIAction.Create;
+ FPreviousTab.Caption := sActionPreviousTab;
+ FPreviousTab.Visible := False;
end ;
destructor TTDIActions.Destroy ;
@@ -368,21 +386,21 @@ constructor TTDINoteBook.Create(TheOwner : TComponent) ;
begin
inherited Create(TheOwner) ;
- FCloseTabButtom := tbMenu;
- FBackgroundCorner := coBottomRight;
- FFixedPages := 0;
- FRestoreActiveControl := True;
- FVerifyIfCanChangePage := True;
- FIsRemovingAPage := False;
- FClosePageMouseMiddleButtom:= True;
- FClosePageShortCut := 0;
- FBackgroundImage := nil;
- FCloseBitBtn := nil;
- FCloseMenuItem := nil;
- FCloseMenuItem2 := nil;
- FCloseAllTabsMenuItem := nil;
- FTabsMenuItem := nil;
- FTDIActions := TTDIActions.Create;
+ FCloseTabButtom := tbMenu;
+ FBackgroundCorner := coBottomRight;
+ FFixedPages := 0;
+ FIsRemovingAPage := False;
+ FShortCutClosePage := 16499;
+ FBackgroundImage := nil;
+ FCloseBitBtn := nil;
+ FCloseMenuItem := nil;
+ FCloseMenuItem2 := nil;
+ FCloseAllTabsMenuItem := nil;
+ FTabsMenuItem := nil;
+ FTDIActions := TTDIActions.Create;
+ FTDIOptions := [ tdiMiddleButtomClosePage,
+ tdiRestoreLastActiveControl,
+ tdiVerifyIfCanChangePage ] ;
{ This is ugly, I know... but I didn't found a best solution to restore Last
Focused Control of TDIPage }
@@ -510,6 +528,7 @@ begin
begin
Name := 'miTDITabsMenuItem';
Caption := TDIActions.TabsMenu.Caption;
+ Visible := TDIActions.TabsMenu.Visible;
ImageIndex := TDIActions.TabsMenu.ImageIndex;
RightJustify := True ;
OnClick := @DropDownTabsMenu;
@@ -523,19 +542,60 @@ begin
NewMenuItem := TMenuItem.Create( FTabsMenuItem );
with NewMenuItem do
begin
- Name := 'miTDISeparator';
+ Name := 'miTDISeparator1';
Caption := '-';
end ;
FTabsMenuItem.Add(NewMenuItem);
+ if (nboKeyboardTabSwitch in Options) then
+ begin
+ NewMenuItem := TMenuItem.Create( FTabsMenuItem );
+ with NewMenuItem do
+ begin
+ Name := 'miTDINextPage';
+ Caption := TDIActions.NextTab.Caption;
+ Visible := TDIActions.NextTab.Visible;
+ ImageIndex := TDIActions.NextTab.ImageIndex;
+ ShortCut := Menus.ShortCut(VK_TAB, [ssCtrl] );
+ OnClick := @NextPageClicked;
+ end ;
+ FTabsMenuItem.Add(NewMenuItem);
+
+ NewMenuItem := TMenuItem.Create( FTabsMenuItem );
+ with NewMenuItem do
+ begin
+ Name := 'miTDIPreviousPage';
+ Caption := TDIActions.PreviousTab.Caption;
+ Visible := TDIActions.PreviousTab.Visible;
+ ImageIndex := TDIActions.PreviousTab.ImageIndex;
+ ShortCut := Menus.ShortCut(VK_TAB, [ssCtrl,ssShift] );
+ OnClick := @PreviousPageClicked;
+ end ;
+ FTabsMenuItem.Add(NewMenuItem);
+
+ if TDIActions.NextTab.Visible or TDIActions.PreviousTab.Visible then
+ begin
+ // Creating a Separator //
+ NewMenuItem := TMenuItem.Create( FTabsMenuItem );
+ with NewMenuItem do
+ begin
+ Name := 'miTDISeparator2';
+ Caption := '-';
+ end ;
+ FTabsMenuItem.Add(NewMenuItem);
+ end;
+ end ;
+
// Creating Close Tab MenuItem //
FCloseMenuItem2 := TMenuItem.Create( FTabsMenuItem );
with FCloseMenuItem2 do
begin
Name := 'miTDICloseTab';
Caption := TDIActions.CloseTab.Caption;
+ Visible := TDIActions.CloseTab.Visible;
ImageIndex := TDIActions.CloseTab.ImageIndex;
OnClick := @CloseTabClicked;
+ ShortCut := FShortCutClosePage;
end ;
FTabsMenuItem.Add(FCloseMenuItem2);
@@ -545,6 +605,7 @@ begin
begin
Name := 'miTDICloseAllTabs';
Caption := TDIActions.CloseAllTabs.Caption;
+ Visible := TDIActions.CloseAllTabs.Visible;
ImageIndex := TDIActions.CloseAllTabs.ImageIndex;
OnClick := @CloseAllTabsClicked;
end ;
@@ -765,6 +826,26 @@ begin
end ;
end ;
+procedure TTDINoteBook.ScrollPage(ToForward : Boolean) ;
+var
+ NewPage : Integer ;
+begin
+ if ToForward then
+ begin
+ NewPage := PageIndex + 1 ;
+ if NewPage >= PageCount then
+ NewPage := 0;
+ end
+ else
+ begin
+ NewPage := PageIndex - 1 ;
+ if NewPage < 0 then
+ NewPage := PageCount-1 ;
+ end ;
+
+ PageIndex := NewPage;
+end ;
+
procedure TTDINoteBook.SelectTabByMenu(Sender : TObject) ;
begin
@@ -804,6 +885,16 @@ begin
FCloseAllTabsMenuItem.Enabled := (PageCount > 0);
end ;
+procedure TTDINoteBook.NextPageClicked(Sender : TObject) ;
+begin
+ ScrollPage( True );
+end ;
+
+procedure TTDINoteBook.PreviousPageClicked(Sender : TObject) ;
+begin
+ ScrollPage( False );
+end ;
+
procedure TTDINoteBook.TimerRestoreLastFocus(Sender : TObject) ;
begin
FTimerRestoreLastControl.Enabled := False;
@@ -832,7 +923,7 @@ begin
begin
TTDIPage( ActivePage ).LastActiveControl := AWinControl;
- if FVerifyIfCanChangePage then
+ if tdiVerifyIfCanChangePage in FTDIOptions then
begin
{ Try to detect if occurs some exception when leaving current
control focus. This may occurs in TWinControl.OnExit Validation }
@@ -866,7 +957,8 @@ begin
}
// This is a ugly workaround.. but it works :) //
- FTimerRestoreLastControl.Enabled := True;
+ if tdiRestoreLastActiveControl in FTDIOptions then
+ FTimerRestoreLastControl.Enabled := True;
end ;
procedure TTDINoteBook.Loaded ;
@@ -927,7 +1019,7 @@ procedure TTDINoteBook.MouseDown(Button: TMouseButton; Shift: TShiftState; X,
var
APageIndex : Integer ;
begin
- if FClosePageMouseMiddleButtom and (Button = mbMiddle) then
+ if (tdiMiddleButtomClosePage in FTDIOptions) and (Button = mbMiddle) then
begin
APageIndex := TabIndexAtClientPos( Point(X,Y) );
if (APageIndex >= 0) and (APageIndex >= FixedPages) then
@@ -940,18 +1032,33 @@ begin
inherited MouseDown(Button, Shift, X, Y);
end;
-procedure TTDINoteBook.KeyDown(var Key: Word; Shift: TShiftState);
+procedure TTDINoteBook.KeyDown(var Key : Word; Shift : TShiftState) ;
begin
- // TODO: HiJack TDIPage.Form.OnKeyDown to detect ShortCut inside the Form //
-
- if ShortCut(Key, Shift) = FClosePageShortCut then
- if PageIndex >= FFixedPages then
+ if (FTabsMenuItem = nil) then // Is already Handled by TabsMenu itens?
+ begin
+ if (PageIndex >= FFixedPages) and
+ (ShortCut(Key, Shift) = FShortCutClosePage) then
begin
+ Key := 0;
RemovePage( PageIndex );
exit;
end;
+ end
+ else if (Key = VK_TAB) and (ssCtrl in Shift) then // TabsMenu will do it...
+ exit ;
- inherited KeyDown(Key, Shift);
+ if ActivePage is TTDIPage then
+ begin
+ with TTDIPage( ActivePage ) do
+ begin
+ RestoreLastFocusedControl;
+
+ // TODO: Propagate Key Pressed to FormInPage //
+ //FormInPage.OnKeyDown(Self,Key,Shift);
+ end ;
+ end
+ else
+ inherited KeyDown(Key, Shift);
end;
procedure TTDINoteBook.Notification(AComponent : TComponent ;
diff --git a/components/tdi/tdiconst.pas b/components/tdi/tdiconst.pas
index 0712b96e3..863737ad1 100644
--- a/components/tdi/tdiconst.pas
+++ b/components/tdi/tdiconst.pas
@@ -13,6 +13,8 @@ resourcestring
sActionTabsMenu = 'Tabs';
sActionCloseTab = 'Close Tab';
sActionCloseAllTabs = 'Close All Tabs';
+ sActionNextTab = 'Next Tab';
+ sActionPreviousTab = 'Previous Tab';
implementation