From 02f81dec334717740874b49174b7a8a75aad2cae Mon Sep 17 00:00:00 2001 From: eugene1 Date: Thu, 25 Jun 2009 00:51:42 +0000 Subject: [PATCH] GradTabControl: Added Style-Support (Standard, Vista-Like) git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@860 8e941d3f-bd1b-0410-a28a-d453659cc2b4 --- .../gradcontrols/examples/Forms/unit1.lfm | 13 +- .../gradcontrols/examples/Forms/unit1.lrs | 503 +++++------ .../gradcontrols/examples/Forms/unit1.pas | 4 + .../gradcontrols/examples/gradcontroltest.lpi | 2 +- .../gradcontrols/packages/gradtabcontrol.lpk | 6 +- .../gradcontrols/packages/gradtabcontrol.pas | 2 +- components/gradcontrols/src/gradtabstyle.pas | 322 +++++++ .../gradcontrols/src/ugradtabcontrol.pas | 814 ++++++++++-------- 8 files changed, 1058 insertions(+), 608 deletions(-) create mode 100644 components/gradcontrols/src/gradtabstyle.pas diff --git a/components/gradcontrols/examples/Forms/unit1.lfm b/components/gradcontrols/examples/Forms/unit1.lfm index 83ae52fde..b6d7b010a 100644 --- a/components/gradcontrols/examples/Forms/unit1.lfm +++ b/components/gradcontrols/examples/Forms/unit1.lfm @@ -1,7 +1,7 @@ object Form1: TForm1 - Left = 243 + Left = 253 Height = 492 - Top = 105 + Top = 145 Width = 884 Caption = 'TGradTabControl-Testsuite' ClientHeight = 492 @@ -43,12 +43,13 @@ object Form1: TForm1 ShowLeftTopScrollButton = False ShowRightBottomScrollButton = False Images = ImageList1 + CustomDraw = False object GradTabPage3: TGradTabPage Left = 2 Height = 466 Top = 22 Width = 640 - PageIndex = 2 + PageIndex = 1 Caption = 'GradTabPage3' TabColor = clBlue TabTextAlignment = taLeftJustify @@ -93,10 +94,10 @@ object Form1: TForm1 end object GradTabPage2: TGradTabPage Left = 2 - Height = 466 + Height = 488 Top = 22 - Width = 640 - PageIndex = 1 + Width = 642 + PageIndex = 2 Caption = 'GradTabPage2' ShowCloseButton = True TabColor = clBlue diff --git a/components/gradcontrols/examples/Forms/unit1.lrs b/components/gradcontrols/examples/Forms/unit1.lrs index 15709adee..386e0b9d3 100644 --- a/components/gradcontrols/examples/Forms/unit1.lrs +++ b/components/gradcontrols/examples/Forms/unit1.lrs @@ -1,40 +1,90 @@ -{ This is an automatically generated lazarus resource file } +{ Das ist eine automatisch erzeugte Lazarus-Ressourcendatei } LazarusResources.Add('TForm1','FORMDATA',[ - 'TPF0'#6'TForm1'#5'Form1'#4'Left'#3#243#0#6'Height'#3#236#1#3'Top'#2'i'#5'Wid' - +'th'#3't'#3#7'Caption'#6#25'TGradTabControl-Testsuite'#12'ClientHeight'#3#236 - +#1#11'ClientWidth'#3't'#3#8'OnCreate'#7#10'FormCreate'#9'OnDestroy'#7#11'For' - +'mDestroy'#10'LCLVersion'#6#6'0.9.27'#0#6'TPanel'#6'Panel1'#4'Left'#2#0#6'He' - +'ight'#3#236#1#3'Top'#2#0#5'Width'#3#134#2#5'Align'#7#8'alClient'#7'Caption' - +#6#6'Panel1'#12'ClientHeight'#3#236#1#11'ClientWidth'#3#134#2#8'TabOrder'#2#0 - +#0#15'TGradTabControl'#15'GradTabControl1'#4'Left'#2#1#6'Height'#3#234#1#3'T' - +'op'#2#1#5'Width'#3#132#2#5'Align'#7#8'alClient'#10'ActivePage'#7#12'GradTab' - +'Page1'#20'OnTabButtonMouseDown'#7'!GradTabControl1TabButtonMouseDown'#18'On' - +'TabButtonMouseUp'#7#31'GradTabControl1TabButtonMouseUp'#20'OnTabButtonMouse' - +'Move'#7'!GradTabControl1TabButtonMouseMove'#21'OnTabCloseButtonClick'#7'"Gr' - +'adTabControl1TabCloseButtonClick'#10'OnDragDrop'#7#23'GradTabControl1DragDr' - +'op'#10'OnDragOver'#7#23'GradTabControl1DragOver'#11'OnMouseDown'#7#24'GradT' - +'abControl1MouseDown'#14'OnMouseWheelUp'#7#27'GradTabControl1MouseWheelUp'#16 - +'OnMouseWheelDown'#7#29'GradTabControl1MouseWheelDown'#9'PageIndex'#2#0#9'Ta' - +'bHeight'#2#20#8'LongTabs'#8#9'LongWidth'#2'e'#13'OnPageChanged'#7#26'GradTa' - +'bControl1PageChanged'#23'ShowLeftTopScrollButton'#8#27'ShowRightBottomScrol' - +'lButton'#8#6'Images'#7#10'ImageList1'#0#12'TGradTabPage'#12'GradTabPage3'#4 - +'Left'#2#2#6'Height'#3#210#1#3'Top'#2#22#5'Width'#3#128#2#9'PageIndex'#2#2#7 - +'Caption'#6#12'GradTabPage3'#8'TabColor'#7#6'clBlue'#16'TabTextAlignment'#7 - +#13'taLeftJustify'#13'TabGlyph.Data'#10':'#4#0#0'6'#4#0#0'BM6'#4#0#0#0#0#0#0 - +'6'#0#0#0'('#0#0#0#16#0#0#0#16#0#0#0#1#0' '#0#0#0#0#0#0#4#0#0'd'#0#0#0'd'#0#0 - +#0#0#0#0#0#0#0#0#0'nUN'#141'pND'#166'h?5'#165#28#14#14#18#134#198#220'-k'#194 - +#225#153'_'#188#221#184'U'#180#212#210'L'#169#202#232'C'#160#192#234'>'#156 - +#188#213'B'#158#191#188'P'#168#199#159'y'#185#208';'#0#0'#'#0#0#0'#'#0'fNI' - +#130'Y=7pmB7pa'#134#150'Dp'#208#242#246'_'#199#235#255'S'#187#223#255'G'#176 + 'TPF0'#6'TForm1'#5'Form1'#4'Left'#3#253#0#6'Height'#3#236#1#3'Top'#3#145#0#5 + +'Width'#3't'#3#7'Caption'#6#25'TGradTabControl-Testsuite'#12'ClientHeight'#3 + +#236#1#11'ClientWidth'#3't'#3#8'OnCreate'#7#10'FormCreate'#9'OnDestroy'#7#11 + +'FormDestroy'#10'LCLVersion'#6#6'0.9.27'#0#6'TPanel'#6'Panel1'#4'Left'#2#0#6 + +'Height'#3#236#1#3'Top'#2#0#5'Width'#3#134#2#5'Align'#7#8'alClient'#7'Captio' + +'n'#6#6'Panel1'#12'ClientHeight'#3#236#1#11'ClientWidth'#3#134#2#8'TabOrder' + +#2#0#0#15'TGradTabControl'#15'GradTabControl1'#4'Left'#2#1#6'Height'#3#234#1 + +#3'Top'#2#1#5'Width'#3#132#2#5'Align'#7#8'alClient'#10'ActivePage'#7#12'Grad' + +'TabPage1'#20'OnTabButtonMouseDown'#7'!GradTabControl1TabButtonMouseDown'#18 + +'OnTabButtonMouseUp'#7#31'GradTabControl1TabButtonMouseUp'#20'OnTabButtonMou' + +'seMove'#7'!GradTabControl1TabButtonMouseMove'#21'OnTabCloseButtonClick'#7'"' + +'GradTabControl1TabCloseButtonClick'#10'OnDragDrop'#7#23'GradTabControl1Drag' + +'Drop'#10'OnDragOver'#7#23'GradTabControl1DragOver'#11'OnMouseDown'#7#24'Gra' + +'dTabControl1MouseDown'#14'OnMouseWheelUp'#7#27'GradTabControl1MouseWheelUp' + +#16'OnMouseWheelDown'#7#29'GradTabControl1MouseWheelDown'#9'PageIndex'#2#0#9 + +'TabHeight'#2#20#8'LongTabs'#8#9'LongWidth'#2'e'#13'OnPageChanged'#7#26'Grad' + +'TabControl1PageChanged'#23'ShowLeftTopScrollButton'#8#27'ShowRightBottomScr' + +'ollButton'#8#6'Images'#7#10'ImageList1'#10'CustomDraw'#8#0#12'TGradTabPage' + +#12'GradTabPage3'#4'Left'#2#2#6'Height'#3#210#1#3'Top'#2#22#5'Width'#3#128#2 + +#9'PageIndex'#2#1#7'Caption'#6#12'GradTabPage3'#8'TabColor'#7#6'clBlue'#16'T' + +'abTextAlignment'#7#13'taLeftJustify'#13'TabGlyph.Data'#10':'#4#0#0'6'#4#0#0 + +'BM6'#4#0#0#0#0#0#0'6'#0#0#0'('#0#0#0#16#0#0#0#16#0#0#0#1#0' '#0#0#0#0#0#0#4 + +#0#0'd'#0#0#0'd'#0#0#0#0#0#0#0#0#0#0#0'nUN'#141'pND'#166'h?5'#165#28#14#14#18 + +#134#198#220'-k'#194#225#153'_'#188#221#184'U'#180#212#210'L'#169#202#232'C' + +#160#192#234'>'#156#188#213'B'#158#191#188'P'#168#199#159'y'#185#208';'#0#0 + +'#'#0#0#0'#'#0'fNI'#130'Y=7pmB7pa'#134#150'Dp'#208#242#246'_'#199#235#255'S' + +#187#223#255'G'#176#212#255'<'#164#200#255'0'#153#189#255'('#144#180#255')' + +#144#181#255'4'#156#192#255'U'#183#217#250#133#201#225'O'#0#0'#'#0'Q<6&nKB' + +#142'L-&kv'#187#210'ok'#210#245#255']'#186#213#255'Q'#175#205#255'R'#172#200 + +#255'J'#168#199#255'E'#163#195#255'F'#159#188#255'='#153#184#255'@'#158#187 + +#255'O'#181#217#255'z'#205#235#130#0#0'#'#0#0#0#0#6'X>5|`:0'#181'{'#175#193 + +'m^'#187#219#252'^'#193#227#255'Z'#187#220#255'G'#176#212#255'<'#164#200#255 + +'0'#153#189#255'('#144#180#255'3'#149#182#255'B'#162#196#255'T'#177#209#253 + +'~'#192#210#136#0#0'#'#0#0#0'#'#0'iH>'#131'_90'#142#133#204#230'Zk'#210#246 + +#255'_'#199#235#255'S'#187#223#255'G'#176#212#255'D'#164#195#255':'#154#183 + +#255'('#144#180#255')'#144#181#255'4'#156#192#255'N'#182#218#255'}'#204#230 + +'x'#0#0'#'#0#0#0#0#7'^?8m_8.it'#183#205'rh'#197#226#255'U'#176#205#255'N'#175 + +#206#255'J'#171#205#255'C'#169#204#255'='#163#199#255'='#160#193#255'@'#161 + +#193#255'I'#164#195#255'Q'#175#205#255'z'#204#233#130#0#0'#'#0#0#0#0#4'^A7' + +#138'e>3w'#133#184#196'Qi'#196#229#252'`'#199#235#255'S'#187#223#255'G'#176 +#212#255'<'#164#200#255'0'#153#189#255'('#144#180#255')'#144#181#255'4'#156 - +#192#255'U'#183#217#250#133#201#225'O'#0#0'#'#0'Q<6&nKB'#142'L-&kv'#187#210 - +'ok'#210#245#255']'#186#213#255'Q'#175#205#255'R'#172#200#255'J'#168#199#255 - +'E'#163#195#255'F'#159#188#255'='#153#184#255'@'#158#187#255'O'#181#217#255 - +'z'#205#235#130#0#0'#'#0#0#0#0#6'X>5|`:0'#181'{'#175#193'm^'#187#219#252'^' - +#193#227#255'Z'#187#220#255'G'#176#212#255'<'#164#200#255'0'#153#189#255'(' - +#144#180#255'3'#149#182#255'B'#162#196#255'T'#177#209#253'~'#192#210#136#0#0 - +'#'#0#0#0'#'#0'iH>'#131'_90'#142#133#204#230'Zk'#210#246#255'_'#199#235#255 + +#192#255'W'#181#213#253#135#187#204'w'#0#0'#'#0#0#0'#'#0',#'#26#29'Q2)'#138 + +'p'#177#198'qj'#210#246#255'`'#199#234#255'\'#183#211#255'O'#171#199#255'B' + +#161#192#255';'#155#185#255'9'#149#176#255'8'#146#175#255'6'#156#191#255'N' + +#182#218#255'{'#206#233#129#0#0'#'#0#0#0#0#4'pND'#150'lB7'#154'z'#187#206'q]' + +#184#210#255'P'#178#212#255'I'#179#216#255'D'#176#212#255'A'#168#205#255'9' + +#160#196#255'4'#157#194#255'5'#160#198#255'@'#165#198#255'O'#172#200#255'~' + +#202#228#134#0#0'#'#0#0#0#0#5'bD;'#177'P0('#159't'#157#168'Sl'#205#238#251'_' + +#199#235#255'S'#187#223#255'G'#176#212#255'<'#164#200#255'0'#153#189#255'(' + +#144#180#255')'#144#181#255'4'#156#192#255'U'#182#216#253#130#192#205'l'#0#0 + +'#'#0#0#0'#'#0'dF='#150'G,$]{'#196#221'lj'#210#246#255'`'#189#217#255'O'#176 + +#205#255'J'#170#200#255'L'#168#196#255'I'#164#193#255'='#154#184#255'6'#151 + +#182#255'@'#157#187#255'N'#182#218#255'z'#204#233#130#0#0'#'#0'dNF'#128'hH?' + +#142'U5-~'#132#197#217'j['#186#217#252'Y'#190#225#255'Y'#185#219#255'P'#177 + +#211#255'<'#164#200#255'0'#153#189#255'1'#147#181#255'9'#153#187#255'@'#164 + +#199#255'P'#175#207#253'|'#195#215#135#0#0'#'#0'kRJ|pLE'#137'\9-l'#195#218 + +'Ol'#210#245#254'_'#199#235#255'S'#187#223#255'G'#176#212#255'<'#164#200#255 + +'0'#153#189#255'('#144#180#255')'#145#181#255'4'#156#192#255'O'#182#218#255 + +#130#205#229'o'#0#0'#'#0#0#0#0#6'6"'#27'&M.(t}'#198#223'lk'#204#235#255'I' + +#175#207#255';'#166#201#255'4'#162#197#255'.'#158#195#255'-'#157#194#255'-' + +#156#191#255'/'#155#190#255'6'#158#192#255'P'#178#210#255'y'#204#234#130#0#0 + +'#'#0#0#0#0#9'bB:'#188'R2('#164'z'#164#179'U7'#162#195#243#24#159#207#255#24 + +#159#207#255#24#159#207#255#24#159#207#255#24#159#207#255#24#159#207#255#24 + +#159#207#255#24#159#207#255'.'#159#196#247'{'#184#200'i'#0#0'#'#0#0#0'#'#0'{' + ,'SIfg@4'#148#26#0#0#10'q'#161#162'$:'#159#189#158'1'#159#193#188'.'#159#195 + +#211'+'#158#196#234'+'#159#195#236'-'#159#195#214'0'#159#195#191'7'#160#192 + +#164'^'#161#173'1'#0#0'#'#0#0#0'#'#0#12'TabShowGlyph'#9#15'TabButtonLayout'#7 + +#11'blGlyphLeft'#0#0#12'TGradTabPage'#12'GradTabPage2'#4'Left'#2#2#6'Height' + +#3#232#1#3'Top'#2#22#5'Width'#3#130#2#9'PageIndex'#2#2#7'Caption'#6#12'GradT' + +'abPage2'#15'ShowCloseButton'#9#8'TabColor'#7#6'clBlue'#16'TabTextAlignment' + +#7#13'taLeftJustify'#13'TabGlyph.Data'#10':'#4#0#0'6'#4#0#0'BM6'#4#0#0#0#0#0 + +#0'6'#0#0#0'('#0#0#0#16#0#0#0#16#0#0#0#1#0' '#0#0#0#0#0#0#4#0#0'd'#0#0#0'd'#0 + +#0#0#0#0#0#0#0#0#0#0'nUN'#141'pND'#166'h?5'#165#28#14#14#18#134#198#220'-k' + +#194#225#153'_'#188#221#184'U'#180#212#210'L'#169#202#232'C'#160#192#234'>' + +#156#188#213'B'#158#191#188'P'#168#199#159'y'#185#208';'#0#0'#'#0#0#0'#'#0'f' + +'NI'#130'Y=7pmB7pa'#134#150'Dp'#208#242#246'_'#199#235#255'S'#187#223#255'G' + +#176#212#255'<'#164#200#255'0'#153#189#255'('#144#180#255')'#144#181#255'4' + +#156#192#255'U'#183#217#250#133#201#225'O'#0#0'#'#0'Q<6&nKB'#142'L-&kv'#187 + +#210'ok'#210#245#255']'#186#213#255'Q'#175#205#255'R'#172#200#255'J'#168#199 + +#255'E'#163#195#255'F'#159#188#255'='#153#184#255'@'#158#187#255'O'#181#217 + +#255'z'#205#235#130#0#0'#'#0#0#0#0#6'X>5|`:0'#181'{'#175#193'm^'#187#219#252 + +'^'#193#227#255'Z'#187#220#255'G'#176#212#255'<'#164#200#255'0'#153#189#255 + +'('#144#180#255'3'#149#182#255'B'#162#196#255'T'#177#209#253'~'#192#210#136#0 + +#0'#'#0#0#0'#'#0'iH>'#131'_90'#142#133#204#230'Zk'#210#246#255'_'#199#235#255 +'S'#187#223#255'G'#176#212#255'D'#164#195#255':'#154#183#255'('#144#180#255 +')'#144#181#255'4'#156#192#255'N'#182#218#255'}'#204#230'x'#0#0'#'#0#0#0#0#7 +'^?8m_8.it'#183#205'rh'#197#226#255'U'#176#205#255'N'#175#206#255'J'#171#205 @@ -65,223 +115,174 @@ LazarusResources.Add('TForm1','FORMDATA',[ +#188'R2('#164'z'#164#179'U7'#162#195#243#24#159#207#255#24#159#207#255#24#159 +#207#255#24#159#207#255#24#159#207#255#24#159#207#255#24#159#207#255#24#159 +#207#255'.'#159#196#247'{'#184#200'i'#0#0'#'#0#0#0'#'#0'{SIfg@4'#148#26#0#0 - ,#10'q'#161#162'$:'#159#189#158'1'#159#193#188'.'#159#195#211'+'#158#196#234 + +#10'q'#161#162'$:'#159#189#158'1'#159#193#188'.'#159#195#211'+'#158#196#234 +'+'#159#195#236'-'#159#195#214'0'#159#195#191'7'#160#192#164'^'#161#173'1'#0 +#0'#'#0#0#0'#'#0#12'TabShowGlyph'#9#15'TabButtonLayout'#7#11'blGlyphLeft'#0#0 - +#12'TGradTabPage'#12'GradTabPage2'#4'Left'#2#2#6'Height'#3#210#1#3'Top'#2#22 - +#5'Width'#3#128#2#9'PageIndex'#2#1#7'Caption'#6#12'GradTabPage2'#15'ShowClos' - +'eButton'#9#8'TabColor'#7#6'clBlue'#16'TabTextAlignment'#7#13'taLeftJustify' - +#13'TabGlyph.Data'#10':'#4#0#0'6'#4#0#0'BM6'#4#0#0#0#0#0#0'6'#0#0#0'('#0#0#0 - +#16#0#0#0#16#0#0#0#1#0' '#0#0#0#0#0#0#4#0#0'd'#0#0#0'd'#0#0#0#0#0#0#0#0#0#0#0 - +'nUN'#141'pND'#166'h?5'#165#28#14#14#18#134#198#220'-k'#194#225#153'_'#188 - +#221#184'U'#180#212#210'L'#169#202#232'C'#160#192#234'>'#156#188#213'B'#158 - +#191#188'P'#168#199#159'y'#185#208';'#0#0'#'#0#0#0'#'#0'fNI'#130'Y=7pmB7pa' - +#134#150'Dp'#208#242#246'_'#199#235#255'S'#187#223#255'G'#176#212#255'<'#164 - +#200#255'0'#153#189#255'('#144#180#255')'#144#181#255'4'#156#192#255'U'#183 - +#217#250#133#201#225'O'#0#0'#'#0'Q<6&nKB'#142'L-&kv'#187#210'ok'#210#245#255 - +']'#186#213#255'Q'#175#205#255'R'#172#200#255'J'#168#199#255'E'#163#195#255 - +'F'#159#188#255'='#153#184#255'@'#158#187#255'O'#181#217#255'z'#205#235#130#0 - +#0'#'#0#0#0#0#6'X>5|`:0'#181'{'#175#193'm^'#187#219#252'^'#193#227#255'Z'#187 - +#220#255'G'#176#212#255'<'#164#200#255'0'#153#189#255'('#144#180#255'3'#149 - +#182#255'B'#162#196#255'T'#177#209#253'~'#192#210#136#0#0'#'#0#0#0'#'#0'iH>' - +#131'_90'#142#133#204#230'Zk'#210#246#255'_'#199#235#255'S'#187#223#255'G' - +#176#212#255'D'#164#195#255':'#154#183#255'('#144#180#255')'#144#181#255'4' - +#156#192#255'N'#182#218#255'}'#204#230'x'#0#0'#'#0#0#0#0#7'^?8m_8.it'#183#205 - +'rh'#197#226#255'U'#176#205#255'N'#175#206#255'J'#171#205#255'C'#169#204#255 - +'='#163#199#255'='#160#193#255'@'#161#193#255'I'#164#195#255'Q'#175#205#255 - +'z'#204#233#130#0#0'#'#0#0#0#0#4'^A7'#138'e>3w'#133#184#196'Qi'#196#229#252 - +'`'#199#235#255'S'#187#223#255'G'#176#212#255'<'#164#200#255'0'#153#189#255 - +'('#144#180#255')'#144#181#255'4'#156#192#255'W'#181#213#253#135#187#204'w'#0 - +#0'#'#0#0#0'#'#0',#'#26#29'Q2)'#138'p'#177#198'qj'#210#246#255'`'#199#234#255 - +'\'#183#211#255'O'#171#199#255'B'#161#192#255';'#155#185#255'9'#149#176#255 - +'8'#146#175#255'6'#156#191#255'N'#182#218#255'{'#206#233#129#0#0'#'#0#0#0#0#4 - +'pND'#150'lB7'#154'z'#187#206'q]'#184#210#255'P'#178#212#255'I'#179#216#255 - +'D'#176#212#255'A'#168#205#255'9'#160#196#255'4'#157#194#255'5'#160#198#255 - +'@'#165#198#255'O'#172#200#255'~'#202#228#134#0#0'#'#0#0#0#0#5'bD;'#177'P0(' - +#159't'#157#168'Sl'#205#238#251'_'#199#235#255'S'#187#223#255'G'#176#212#255 - +'<'#164#200#255'0'#153#189#255'('#144#180#255')'#144#181#255'4'#156#192#255 - +'U'#182#216#253#130#192#205'l'#0#0'#'#0#0#0'#'#0'dF='#150'G,$]{'#196#221'lj' - +#210#246#255'`'#189#217#255'O'#176#205#255'J'#170#200#255'L'#168#196#255'I' - +#164#193#255'='#154#184#255'6'#151#182#255'@'#157#187#255'N'#182#218#255'z' - +#204#233#130#0#0'#'#0'dNF'#128'hH?'#142'U5-~'#132#197#217'j['#186#217#252'Y' - +#190#225#255'Y'#185#219#255'P'#177#211#255'<'#164#200#255'0'#153#189#255'1' - +#147#181#255'9'#153#187#255'@'#164#199#255'P'#175#207#253'|'#195#215#135#0#0 - +'#'#0'kRJ|pLE'#137'\9-l'#195#218'Ol'#210#245#254'_'#199#235#255'S'#187#223 - +#255'G'#176#212#255'<'#164#200#255'0'#153#189#255'('#144#180#255')'#145#181 - +#255'4'#156#192#255'O'#182#218#255#130#205#229'o'#0#0'#'#0#0#0#0#6'6"'#27'&M' - +'.(t}'#198#223'lk'#204#235#255'I'#175#207#255';'#166#201#255'4'#162#197#255 - +'.'#158#195#255'-'#157#194#255'-'#156#191#255'/'#155#190#255'6'#158#192#255 - +'P'#178#210#255'y'#204#234#130#0#0'#'#0#0#0#0#9'bB:'#188'R2('#164'z'#164#179 - +'U7'#162#195#243#24#159#207#255#24#159#207#255#24#159#207#255#24#159#207#255 - +#24#159#207#255#24#159#207#255#24#159#207#255#24#159#207#255'.'#159#196#247 - +'{'#184#200'i'#0#0'#'#0#0#0'#'#0'{SIfg@4'#148#26#0#0#10'q'#161#162'$:'#159 - +#189#158'1'#159#193#188'.'#159#195#211'+'#158#196#234'+'#159#195#236'-'#159 - +#195#214'0'#159#195#191'7'#160#192#164'^'#161#173'1'#0#0'#'#0#0#0'#'#0#12'Ta' - +'bShowGlyph'#9#15'TabButtonLayout'#7#11'blGlyphLeft'#0#0#12'TGradTabPage'#12 - +'GradTabPage1'#4'Left'#2#2#6'Height'#3#210#1#3'Top'#2#22#5'Width'#3#128#2#9 - +'PageIndex'#2#0#7'Caption'#6#9'Some Memo'#15'ShowCloseButton'#9#5'Color'#7#10 - +'clGrayText'#8'TabColor'#7#7'clGreen'#16'TabTextAlignment'#7#13'taLeftJustif' - +'y'#13'TabGlyph.Data'#10':'#4#0#0'6'#4#0#0'BM6'#4#0#0#0#0#0#0'6'#0#0#0'('#0#0 - +#0#16#0#0#0#16#0#0#0#1#0' '#0#0#0#0#0#0#4#0#0'd'#0#0#0'd'#0#0#0#0#0#0#0#0#0#0 - +#0'nUN'#141'pND'#166'h?5'#165#28#14#14#18#134#198#220'-k'#194#225#153'_'#188 - +#221#184'U'#180#212#210'L'#169#202#232'C'#160#192#234'>'#156#188#213'B'#158 - +#191#188'P'#168#199#159'y'#185#208';'#0#0'#'#0#0#0'#'#0'fNI'#130'Y=7pmB7pa' - +#134#150'Dp'#208#242#246'_'#199#235#255'S'#187#223#255'G'#176#212#255'<'#164 - +#200#255'0'#153#189#255'('#144#180#255')'#144#181#255'4'#156#192#255'U'#183 - +#217#250#133#201#225'O'#0#0'#'#0'Q<6&nKB'#142'L-&kv'#187#210'ok'#210#245#255 - ,']'#186#213#255'Q'#175#205#255'R'#172#200#255'J'#168#199#255'E'#163#195#255 - +'F'#159#188#255'='#153#184#255'@'#158#187#255'O'#181#217#255'z'#205#235#130#0 - +#0'#'#0#0#0#0#6'X>5|`:0'#181'{'#175#193'm^'#187#219#252'^'#193#227#255'Z'#187 - +#220#255'G'#176#212#255'<'#164#200#255'0'#153#189#255'('#144#180#255'3'#149 - +#182#255'B'#162#196#255'T'#177#209#253'~'#192#210#136#0#0'#'#0#0#0'#'#0'iH>' - +#131'_90'#142#133#204#230'Zk'#210#246#255'_'#199#235#255'S'#187#223#255'G' - +#176#212#255'D'#164#195#255':'#154#183#255'('#144#180#255')'#144#181#255'4' - +#156#192#255'N'#182#218#255'}'#204#230'x'#0#0'#'#0#0#0#0#7'^?8m_8.it'#183#205 - +'rh'#197#226#255'U'#176#205#255'N'#175#206#255'J'#171#205#255'C'#169#204#255 - +'='#163#199#255'='#160#193#255'@'#161#193#255'I'#164#195#255'Q'#175#205#255 - +'z'#204#233#130#0#0'#'#0#0#0#0#4'^A7'#138'e>3w'#133#184#196'Qi'#196#229#252 - +'`'#199#235#255'S'#187#223#255'G'#176#212#255'<'#164#200#255'0'#153#189#255 - +'('#144#180#255')'#144#181#255'4'#156#192#255'W'#181#213#253#135#187#204'w'#0 - +#0'#'#0#0#0'#'#0',#'#26#29'Q2)'#138'p'#177#198'qj'#210#246#255'`'#199#234#255 - +'\'#183#211#255'O'#171#199#255'B'#161#192#255';'#155#185#255'9'#149#176#255 - +'8'#146#175#255'6'#156#191#255'N'#182#218#255'{'#206#233#129#0#0'#'#0#0#0#0#4 - +'pND'#150'lB7'#154'z'#187#206'q]'#184#210#255'P'#178#212#255'I'#179#216#255 - +'D'#176#212#255'A'#168#205#255'9'#160#196#255'4'#157#194#255'5'#160#198#255 - +'@'#165#198#255'O'#172#200#255'~'#202#228#134#0#0'#'#0#0#0#0#5'bD;'#177'P0(' - +#159't'#157#168'Sl'#205#238#251'_'#199#235#255'S'#187#223#255'G'#176#212#255 - +'<'#164#200#255'0'#153#189#255'('#144#180#255')'#144#181#255'4'#156#192#255 - +'U'#182#216#253#130#192#205'l'#0#0'#'#0#0#0'#'#0'dF='#150'G,$]{'#196#221'lj' - +#210#246#255'`'#189#217#255'O'#176#205#255'J'#170#200#255'L'#168#196#255'I' - +#164#193#255'='#154#184#255'6'#151#182#255'@'#157#187#255'N'#182#218#255'z' - +#204#233#130#0#0'#'#0'dNF'#128'hH?'#142'U5-~'#132#197#217'j['#186#217#252'Y' - +#190#225#255'Y'#185#219#255'P'#177#211#255'<'#164#200#255'0'#153#189#255'1' - +#147#181#255'9'#153#187#255'@'#164#199#255'P'#175#207#253'|'#195#215#135#0#0 - +'#'#0'kRJ|pLE'#137'\9-l'#195#218'Ol'#210#245#254'_'#199#235#255'S'#187#223 - +#255'G'#176#212#255'<'#164#200#255'0'#153#189#255'('#144#180#255')'#145#181 - +#255'4'#156#192#255'O'#182#218#255#130#205#229'o'#0#0'#'#0#0#0#0#6'6"'#27'&M' - +'.(t}'#198#223'lk'#204#235#255'I'#175#207#255';'#166#201#255'4'#162#197#255 - +'.'#158#195#255'-'#157#194#255'-'#156#191#255'/'#155#190#255'6'#158#192#255 - +'P'#178#210#255'y'#204#234#130#0#0'#'#0#0#0#0#9'bB:'#188'R2('#164'z'#164#179 - +'U7'#162#195#243#24#159#207#255#24#159#207#255#24#159#207#255#24#159#207#255 - +#24#159#207#255#24#159#207#255#24#159#207#255#24#159#207#255'.'#159#196#247 - +'{'#184#200'i'#0#0'#'#0#0#0'#'#0'{SIfg@4'#148#26#0#0#10'q'#161#162'$:'#159 - +#189#158'1'#159#193#188'.'#159#195#211'+'#158#196#234'+'#159#195#236'-'#159 - +#195#214'0'#159#195#191'7'#160#192#164'^'#161#173'1'#0#0'#'#0#0#0'#'#0#12'Ta' - +'bShowGlyph'#9#15'TabButtonLayout'#7#11'blGlyphLeft'#0#5'TMemo'#5'Memo1'#4'L' - +'eft'#3'8'#1#6'Height'#3#210#1#3'Top'#2#0#5'Width'#3'H'#1#5'Align'#7#7'alRig' - +'ht'#13'Lines.Strings'#1#6#9'Some Memo'#6#7'alRight'#0#8'TabOrder'#2#0#0#0#0 - +#0#0#6'TPanel'#6'Panel2'#4'Left'#3#134#2#6'Height'#3#236#1#3'Top'#2#0#5'Widt' - +'h'#3#238#0#5'Align'#7#7'alRight'#12'ClientHeight'#3#236#1#11'ClientWidth'#3 - +#238#0#8'TabOrder'#2#1#0#6'TLabel'#6'Label1'#4'Left'#2#16#6'Height'#2#16#3'T' - +'op'#3#160#0#5'Width'#2'9'#7'Caption'#6#9'TabHeight'#11'ParentColor'#8#0#0#9 - +'TComboBox'#9'ComboBox1'#4'Left'#2#16#6'Height'#2#23#3'Top'#2#16#5'Width'#2 - +'d'#10'ItemHeight'#2#15#8'OnChange'#7#15'ComboBox1Change'#5'Style'#7#14'csDr' - +'opDownList'#8'TabOrder'#2#0#0#0#11'TRadioGroup'#11'RadioGroup1'#4'Left'#3 - +#128#0#6'Height'#2'q'#3'Top'#2#16#5'Width'#2'd'#8'AutoFill'#9#7'Caption'#6#12 - +'Tab Position'#28'ChildSizing.LeftRightSpacing'#2#6#28'ChildSizing.TopBottom' - +'Spacing'#2#6#29'ChildSizing.EnlargeHorizontal'#7#24'crsHomogenousChildResiz' - +'e'#27'ChildSizing.EnlargeVertical'#7#24'crsHomogenousChildResize'#28'ChildS' - +'izing.ShrinkHorizontal'#7#14'crsScaleChilds'#26'ChildSizing.ShrinkVertical' - +#7#14'crsScaleChilds'#18'ChildSizing.Layout'#7#29'cclLeftToRightThenTopToBot' - +'tom'#27'ChildSizing.ControlsPerLine'#2#1#12'ClientHeight'#2'_'#11'ClientWid' - +'th'#2'`'#9'ItemIndex'#2#0#13'Items.Strings'#1#6#5'tpTop'#6#8'tpBottom'#6#6 - +'tpLeft'#6#7'tpRight'#0#7'OnClick'#7#16'RadioGroup1Click'#8'TabOrder'#2#1#0#0 - +#9'TCheckBox'#9'CheckBox1'#4'Left'#2#16#6'Height'#2#16#3'Top'#2'p'#5'Width'#2 - +'d'#8'AutoSize'#8#7'Caption'#6#9'Long Tabs'#7'OnClick'#7#14'CheckBox1Click'#8 - +'TabOrder'#2#2#0#0#11'TGradButton'#10'NewPageBtn'#4'Left'#2#16#6'Height'#2#25 - +#3'Top'#2'0'#5'Width'#2'd'#7'Caption'#6#8'New Page'#10'Font.Color'#7#7'clWhi' - +'te'#7'OnClick'#7#15'NewPageBtnClick'#8'TabOrder'#2#3#7'TabStop'#9#11'Normal' - +'Blend'#5#0#0#0#0#0#0#0#128#254'?'#9'OverBlend'#5'5^'#186'I'#12#2'+'#167#254 - +'?'#9'BaseColor'#7#6'clBlue'#5'Color'#7#6'clBlue'#16'NormalBlendColor'#7#7'c' - ,'lWhite'#14'OverBlendColor'#7#8'clSilver'#15'BackgroundColor'#7#9'clBtnFace' - +#15'ShowFocusBorder'#9#9'ShowGlyph'#8#20'GlyphBackgroundColor'#7#7'clWhite' - +#10'ClickColor'#7#6'clBlue'#19'OwnerBackgroundDraw'#8#22'AutoWidthBorderSpac' - +'ing'#2#15#23'AutoHeightBorderSpacing'#2#15#0#0#11'TGradButton'#9'DeleteBtn' - +#4'Left'#2#16#6'Height'#2#25#3'Top'#2'P'#5'Width'#2'd'#7'Caption'#6#6'Delete' - +#10'Font.Color'#7#7'clWhite'#7'OnClick'#7#14'DeleteBtnClick'#8'TabOrder'#2#4 - +#7'TabStop'#9#11'NormalBlend'#5#0#0#0#0#0#0#0#128#254'?'#9'OverBlend'#5'5^' - +#186'I'#12#2'+'#167#254'?'#9'BaseColor'#7#6'clBlue'#5'Color'#7#6'clBlue'#16 - +'NormalBlendColor'#7#7'clWhite'#14'OverBlendColor'#7#8'clSilver'#15'Backgrou' - +'ndColor'#7#9'clBtnFace'#15'ShowFocusBorder'#9#9'ShowGlyph'#8#20'GlyphBackgr' - +'oundColor'#7#7'clWhite'#10'ClickColor'#7#6'clBlue'#19'OwnerBackgroundDraw'#8 - +#22'AutoWidthBorderSpacing'#2#15#23'AutoHeightBorderSpacing'#2#15#0#0#9'TSpi' - +'nEdit'#9'SpinEdit2'#4'Left'#2#16#6'Height'#2#25#3'Top'#3#176#0#5'Width'#2'd' - +#13'OnEditingDone'#7#20'SpinEdit2EditingDone'#8'TabOrder'#2#5#0#0#5'TEdit'#5 - +'Edit1'#4'Left'#2#16#6'Height'#2#25#3'Top'#3#136#0#5'Width'#2'H'#8'TabOrder' - +#2#6#4'Text'#6#5'Edit1'#0#0#11'TGradButton'#11'GradButton1'#4'Left'#2'Z'#6'H' - +'eight'#2#19#3'Top'#3#136#0#5'Width'#2#26#7'Caption'#6#3'set'#10'Font.Color' - +#7#7'clWhite'#7'OnClick'#7#16'GradButton1Click'#8'TabOrder'#2#7#7'TabStop'#9 - +#11'NormalBlend'#5#0#0#0#0#0#0#0#128#254'?'#9'OverBlend'#5'5^'#186'I'#12#2'+' - +#167#254'?'#9'BaseColor'#7#6'clBlue'#5'Color'#7#6'clBlue'#16'NormalBlendColo' - +'r'#7#7'clWhite'#14'OverBlendColor'#7#8'clSilver'#15'BackgroundColor'#7#9'cl' - +'BtnFace'#15'ShowFocusBorder'#9#9'ShowGlyph'#8#20'GlyphBackgroundColor'#7#7 - +'clWhite'#10'ClickColor'#7#6'clBlue'#19'OwnerBackgroundDraw'#8#22'AutoWidthB' - +'orderSpacing'#2#15#23'AutoHeightBorderSpacing'#2#15#0#0#11'TCheckGroup'#11 - +'CheckGroup1'#4'Left'#3#128#0#6'Height'#2'i'#3'Top'#3#143#0#5'Width'#2'd'#8 - +'AutoFill'#9#7'Caption'#6#14'Scroll Buttons'#28'ChildSizing.LeftRightSpacing' - +#2#6#28'ChildSizing.TopBottomSpacing'#2#6#29'ChildSizing.EnlargeHorizontal'#7 - +#24'crsHomogenousChildResize'#27'ChildSizing.EnlargeVertical'#7#24'crsHomoge' - +'nousChildResize'#28'ChildSizing.ShrinkHorizontal'#7#14'crsScaleChilds'#26'C' - +'hildSizing.ShrinkVertical'#7#14'crsScaleChilds'#18'ChildSizing.Layout'#7#29 - +'cclLeftToRightThenTopToBottom'#27'ChildSizing.ControlsPerLine'#2#1#13'Items' - +'.Strings'#1#6#4'Auto'#6#7'LeftTop'#6#11'RightBottom'#0#7'OnClick'#7#16'Chec' - +'kGroup1Click'#11'OnItemClick'#7#20'CheckGroup1ItemClick'#8'TabOrder'#2#8#4 - +'Data'#10#7#0#0#0#3#0#0#0#3#2#2#0#0#11'TRadioGroup'#11'RadioGroup2'#4'Left'#3 - +#130#0#6'Height'#2'i'#3'Top'#3#0#1#5'Width'#2'd'#8'AutoFill'#9#7'Caption'#6 - +#17'Tab Button Layout'#28'ChildSizing.LeftRightSpacing'#2#6#28'ChildSizing.T' - +'opBottomSpacing'#2#6#29'ChildSizing.EnlargeHorizontal'#7#24'crsHomogenousCh' - +'ildResize'#27'ChildSizing.EnlargeVertical'#7#24'crsHomogenousChildResize'#28 - +'ChildSizing.ShrinkHorizontal'#7#14'crsScaleChilds'#26'ChildSizing.ShrinkVer' - +'tical'#7#14'crsScaleChilds'#18'ChildSizing.Layout'#7#29'cclLeftToRightThenT' - +'opToBottom'#27'ChildSizing.ControlsPerLine'#2#1#12'ClientHeight'#2'W'#11'Cl' - +'ientWidth'#2'`'#9'ItemIndex'#2#0#13'Items.Strings'#1#6#11'blGlyphLeft'#6#13 - +'blGlyphBottom'#6#12'blGlyphRight'#6#10'blGlyphTop'#0#7'OnClick'#7#16'RadioG' - +'roup2Click'#8'TabOrder'#2#9#0#0#0#10'TPopupMenu'#10'PopupMenu1'#4'left'#3 - +#222#2#3'top'#3#141#1#0#9'TMenuItem'#9'MenuItem1'#3'Tag'#4#152''#18#0#7'Cap' - +'tion'#6#9'New Item1'#0#0#0#10'TImageList'#10'ImageList1'#4'left'#3#144#2#3 - +'top'#3#141#1#6'Bitmap'#10#14#4#0#0'Li'#1#0#0#0#16#0#0#0#16#0#0#0#0#0'#'#0'{' - +'SIfg@4'#148#26#0#0#10'q'#161#162'$:'#159#189#158'1'#159#193#188'.'#159#195 - +#211'+'#158#196#234'+'#159#195#236'-'#159#195#214'0'#159#195#191'7'#160#192 - +#164'^'#161#173'1'#0#0'#'#0#0#0'#'#0#0#0#0#9'bB:'#188'R2('#164'z'#164#179'U7' - +#162#195#243#24#159#207#255#24#159#207#255#24#159#207#255#24#159#207#255#24 - +#159#207#255#24#159#207#255#24#159#207#255#24#159#207#255'.'#159#196#247'{' - +#184#200'i'#0#0'#'#0#0#0#0#6'6"'#27'&M.(t}'#198#223'lk'#204#235#255'I'#175 - +#207#255';'#166#201#255'4'#162#197#255'.'#158#195#255'-'#157#194#255'-'#156 - +#191#255'/'#155#190#255'6'#158#192#255'P'#178#210#255'y'#204#234#130#0#0'#'#0 - +'kRJ|pLE'#137'\9-l'#195#218'Ol'#210#245#254'_'#199#235#255'S'#187#223#255'G' - +#176#212#255'<'#164#200#255'0'#153#189#255'('#144#180#255')'#145#181#255'4' - +#156#192#255'O'#182#218#255#130#205#229'o'#0#0'#'#0'dNF'#128'hH?'#142'U5-~' - +#132#197#217'j['#186#217#252'Y'#190#225#255'Y'#185#219#255'P'#177#211#255'<' - +#164#200#255'0'#153#189#255'1'#147#181#255'9'#153#187#255'@'#164#199#255'P' - +#175#207#253'|'#195#215#135#0#0'#'#0#0#0'#'#0'dF='#150'G,$]{'#196#221'lj'#210 - +#246#255'`'#189#217#255'O'#176#205#255'J'#170#200#255'L'#168#196#255'I'#164 - +#193#255'='#154#184#255'6'#151#182#255'@'#157#187#255'N'#182#218#255'z'#204 - +#233#130#0#0'#'#0#0#0#0#5'bD;'#177'P0('#159't'#157#168'Sl'#205#238#251'_'#199 - ,#235#255'S'#187#223#255'G'#176#212#255'<'#164#200#255'0'#153#189#255'('#144 - +#180#255')'#144#181#255'4'#156#192#255'U'#182#216#253#130#192#205'l'#0#0'#'#0 - +#0#0#0#4'pND'#150'lB7'#154'z'#187#206'q]'#184#210#255'P'#178#212#255'I'#179 - +#216#255'D'#176#212#255'A'#168#205#255'9'#160#196#255'4'#157#194#255'5'#160 - +#198#255'@'#165#198#255'O'#172#200#255'~'#202#228#134#0#0'#'#0#0#0'#'#0',#' - +#26#29'Q2)'#138'p'#177#198'qj'#210#246#255'`'#199#234#255'\'#183#211#255'O' - +#171#199#255'B'#161#192#255';'#155#185#255'9'#149#176#255'8'#146#175#255'6' - +#156#191#255'N'#182#218#255'{'#206#233#129#0#0'#'#0#0#0#0#4'^A7'#138'e>3w' - +#133#184#196'Qi'#196#229#252'`'#199#235#255'S'#187#223#255'G'#176#212#255'<' - +#164#200#255'0'#153#189#255'('#144#180#255')'#144#181#255'4'#156#192#255'W' - +#181#213#253#135#187#204'w'#0#0'#'#0#0#0#0#7'^?8m_8.it'#183#205'rh'#197#226 - +#255'U'#176#205#255'N'#175#206#255'J'#171#205#255'C'#169#204#255'='#163#199 - +#255'='#160#193#255'@'#161#193#255'I'#164#195#255'Q'#175#205#255'z'#204#233 - +#130#0#0'#'#0#0#0'#'#0'iH>'#131'_90'#142#133#204#230'Zk'#210#246#255'_'#199 - +#235#255'S'#187#223#255'G'#176#212#255'D'#164#195#255':'#154#183#255'('#144 - +#180#255')'#144#181#255'4'#156#192#255'N'#182#218#255'}'#204#230'x'#0#0'#'#0 - +#0#0#0#6'X>5|`:0'#181'{'#175#193'm^'#187#219#252'^'#193#227#255'Z'#187#220 - +#255'G'#176#212#255'<'#164#200#255'0'#153#189#255'('#144#180#255'3'#149#182 - +#255'B'#162#196#255'T'#177#209#253'~'#192#210#136#0#0'#'#0'Q<6&nKB'#142'L-&k' - +'v'#187#210'ok'#210#245#255']'#186#213#255'Q'#175#205#255'R'#172#200#255'J' - +#168#199#255'E'#163#195#255'F'#159#188#255'='#153#184#255'@'#158#187#255'O' - +#181#217#255'z'#205#235#130#0#0'#'#0'fNI'#130'Y=7pmB7pa'#134#150'Dp'#208#242 - +#246'_'#199#235#255'S'#187#223#255'G'#176#212#255'<'#164#200#255'0'#153#189 - +#255'('#144#180#255')'#144#181#255'4'#156#192#255'U'#183#217#250#133#201#225 - +'O'#0#0'#'#0'nUN'#141'pND'#166'h?5'#165#28#14#14#18#134#198#220'-k'#194#225 - +#153'_'#188#221#184'U'#180#212#210'L'#169#202#232'C'#160#192#234'>'#156#188 - +#213'B'#158#191#188'P'#168#199#159'y'#185#208';'#0#0'#'#0#0#0'#'#0#0#0#0 + +#12'TGradTabPage'#12'GradTabPage1'#4'Left'#2#2#6'Height'#3#210#1#3'Top'#2#22 + +#5'Width'#3#128#2#9'PageIndex'#2#0#7'Caption'#6#9'Some Memo'#15'ShowCloseBut' + +'ton'#9#5'Color'#7#10'clGrayText'#8'TabColor'#7#7'clGreen'#16'TabTextAlignme' + +'nt'#7#13'taLeftJustify'#13'TabGlyph.Data'#10':'#4#0#0'6'#4#0#0'BM6'#4#0#0#0 + +#0#0#0'6'#0#0#0'('#0#0#0#16#0#0#0#16#0#0#0#1#0' '#0#0#0#0#0#0#4#0#0'd'#0#0#0 + +'d'#0#0#0#0#0#0#0#0#0#0#0'nUN'#141'pND'#166'h?5'#165#28#14#14#18#134#198#220 + +'-k'#194#225#153'_'#188#221#184'U'#180#212#210'L'#169#202#232'C'#160#192#234 + +'>'#156#188#213'B'#158#191#188'P'#168#199#159'y'#185#208';'#0#0'#'#0#0#0'#'#0 + +'fNI'#130'Y=7pmB7pa'#134#150'Dp'#208#242#246'_'#199#235#255'S'#187#223#255'G' + +#176#212#255'<'#164#200#255'0'#153#189#255'('#144#180#255')'#144#181#255'4' + +#156#192#255'U'#183#217#250#133#201#225'O'#0#0'#'#0'Q<6&nKB'#142'L-&kv'#187 + ,#210'ok'#210#245#255']'#186#213#255'Q'#175#205#255'R'#172#200#255'J'#168#199 + +#255'E'#163#195#255'F'#159#188#255'='#153#184#255'@'#158#187#255'O'#181#217 + +#255'z'#205#235#130#0#0'#'#0#0#0#0#6'X>5|`:0'#181'{'#175#193'm^'#187#219#252 + +'^'#193#227#255'Z'#187#220#255'G'#176#212#255'<'#164#200#255'0'#153#189#255 + +'('#144#180#255'3'#149#182#255'B'#162#196#255'T'#177#209#253'~'#192#210#136#0 + +#0'#'#0#0#0'#'#0'iH>'#131'_90'#142#133#204#230'Zk'#210#246#255'_'#199#235#255 + +'S'#187#223#255'G'#176#212#255'D'#164#195#255':'#154#183#255'('#144#180#255 + +')'#144#181#255'4'#156#192#255'N'#182#218#255'}'#204#230'x'#0#0'#'#0#0#0#0#7 + +'^?8m_8.it'#183#205'rh'#197#226#255'U'#176#205#255'N'#175#206#255'J'#171#205 + +#255'C'#169#204#255'='#163#199#255'='#160#193#255'@'#161#193#255'I'#164#195 + +#255'Q'#175#205#255'z'#204#233#130#0#0'#'#0#0#0#0#4'^A7'#138'e>3w'#133#184 + +#196'Qi'#196#229#252'`'#199#235#255'S'#187#223#255'G'#176#212#255'<'#164#200 + +#255'0'#153#189#255'('#144#180#255')'#144#181#255'4'#156#192#255'W'#181#213 + +#253#135#187#204'w'#0#0'#'#0#0#0'#'#0',#'#26#29'Q2)'#138'p'#177#198'qj'#210 + +#246#255'`'#199#234#255'\'#183#211#255'O'#171#199#255'B'#161#192#255';'#155 + +#185#255'9'#149#176#255'8'#146#175#255'6'#156#191#255'N'#182#218#255'{'#206 + +#233#129#0#0'#'#0#0#0#0#4'pND'#150'lB7'#154'z'#187#206'q]'#184#210#255'P'#178 + +#212#255'I'#179#216#255'D'#176#212#255'A'#168#205#255'9'#160#196#255'4'#157 + +#194#255'5'#160#198#255'@'#165#198#255'O'#172#200#255'~'#202#228#134#0#0'#'#0 + +#0#0#0#5'bD;'#177'P0('#159't'#157#168'Sl'#205#238#251'_'#199#235#255'S'#187 + +#223#255'G'#176#212#255'<'#164#200#255'0'#153#189#255'('#144#180#255')'#144 + +#181#255'4'#156#192#255'U'#182#216#253#130#192#205'l'#0#0'#'#0#0#0'#'#0'dF=' + +#150'G,$]{'#196#221'lj'#210#246#255'`'#189#217#255'O'#176#205#255'J'#170#200 + +#255'L'#168#196#255'I'#164#193#255'='#154#184#255'6'#151#182#255'@'#157#187 + +#255'N'#182#218#255'z'#204#233#130#0#0'#'#0'dNF'#128'hH?'#142'U5-~'#132#197 + +#217'j['#186#217#252'Y'#190#225#255'Y'#185#219#255'P'#177#211#255'<'#164#200 + +#255'0'#153#189#255'1'#147#181#255'9'#153#187#255'@'#164#199#255'P'#175#207 + +#253'|'#195#215#135#0#0'#'#0'kRJ|pLE'#137'\9-l'#195#218'Ol'#210#245#254'_' + +#199#235#255'S'#187#223#255'G'#176#212#255'<'#164#200#255'0'#153#189#255'(' + +#144#180#255')'#145#181#255'4'#156#192#255'O'#182#218#255#130#205#229'o'#0#0 + +'#'#0#0#0#0#6'6"'#27'&M.(t}'#198#223'lk'#204#235#255'I'#175#207#255';'#166 + +#201#255'4'#162#197#255'.'#158#195#255'-'#157#194#255'-'#156#191#255'/'#155 + +#190#255'6'#158#192#255'P'#178#210#255'y'#204#234#130#0#0'#'#0#0#0#0#9'bB:' + +#188'R2('#164'z'#164#179'U7'#162#195#243#24#159#207#255#24#159#207#255#24#159 + +#207#255#24#159#207#255#24#159#207#255#24#159#207#255#24#159#207#255#24#159 + +#207#255'.'#159#196#247'{'#184#200'i'#0#0'#'#0#0#0'#'#0'{SIfg@4'#148#26#0#0 + +#10'q'#161#162'$:'#159#189#158'1'#159#193#188'.'#159#195#211'+'#158#196#234 + +'+'#159#195#236'-'#159#195#214'0'#159#195#191'7'#160#192#164'^'#161#173'1'#0 + +#0'#'#0#0#0'#'#0#12'TabShowGlyph'#9#15'TabButtonLayout'#7#11'blGlyphLeft'#0#5 + +'TMemo'#5'Memo1'#4'Left'#3'8'#1#6'Height'#3#210#1#3'Top'#2#0#5'Width'#3'H'#1 + +#5'Align'#7#7'alRight'#13'Lines.Strings'#1#6#9'Some Memo'#6#7'alRight'#0#8'T' + +'abOrder'#2#0#0#0#0#0#0#6'TPanel'#6'Panel2'#4'Left'#3#134#2#6'Height'#3#236#1 + +#3'Top'#2#0#5'Width'#3#238#0#5'Align'#7#7'alRight'#12'ClientHeight'#3#236#1 + +#11'ClientWidth'#3#238#0#8'TabOrder'#2#1#0#6'TLabel'#6'Label1'#4'Left'#2#16#6 + +'Height'#2#16#3'Top'#3#160#0#5'Width'#2'9'#7'Caption'#6#9'TabHeight'#11'Pare' + +'ntColor'#8#0#0#9'TComboBox'#9'ComboBox1'#4'Left'#2#16#6'Height'#2#23#3'Top' + +#2#16#5'Width'#2'd'#10'ItemHeight'#2#15#8'OnChange'#7#15'ComboBox1Change'#5 + +'Style'#7#14'csDropDownList'#8'TabOrder'#2#0#0#0#11'TRadioGroup'#11'RadioGro' + +'up1'#4'Left'#3#128#0#6'Height'#2'q'#3'Top'#2#16#5'Width'#2'd'#8'AutoFill'#9 + +#7'Caption'#6#12'Tab Position'#28'ChildSizing.LeftRightSpacing'#2#6#28'Child' + +'Sizing.TopBottomSpacing'#2#6#29'ChildSizing.EnlargeHorizontal'#7#24'crsHomo' + +'genousChildResize'#27'ChildSizing.EnlargeVertical'#7#24'crsHomogenousChildR' + +'esize'#28'ChildSizing.ShrinkHorizontal'#7#14'crsScaleChilds'#26'ChildSizing' + +'.ShrinkVertical'#7#14'crsScaleChilds'#18'ChildSizing.Layout'#7#29'cclLeftTo' + +'RightThenTopToBottom'#27'ChildSizing.ControlsPerLine'#2#1#12'ClientHeight'#2 + +'_'#11'ClientWidth'#2'`'#9'ItemIndex'#2#0#13'Items.Strings'#1#6#5'tpTop'#6#8 + +'tpBottom'#6#6'tpLeft'#6#7'tpRight'#0#7'OnClick'#7#16'RadioGroup1Click'#8'Ta' + +'bOrder'#2#1#0#0#9'TCheckBox'#9'CheckBox1'#4'Left'#2#16#6'Height'#2#16#3'Top' + +#2'p'#5'Width'#2'd'#8'AutoSize'#8#7'Caption'#6#9'Long Tabs'#7'OnClick'#7#14 + +'CheckBox1Click'#8'TabOrder'#2#2#0#0#11'TGradButton'#10'NewPageBtn'#4'Left'#2 + +#16#6'Height'#2#25#3'Top'#2'0'#5'Width'#2'd'#7'Caption'#6#8'New Page'#10'Fon' + +'t.Color'#7#7'clWhite'#7'OnClick'#7#15'NewPageBtnClick'#8'TabOrder'#2#3#7'Ta' + +'bStop'#9#11'NormalBlend'#5#0#0#0#0#0#0#0#128#254'?'#9'OverBlend'#5'5^'#186 + +'I'#12#2'+'#167#254'?'#9'BaseColor'#7#6'clBlue'#5'Color'#7#6'clBlue'#16'Norm' + ,'alBlendColor'#7#7'clWhite'#14'OverBlendColor'#7#8'clSilver'#15'BackgroundCo' + +'lor'#7#9'clBtnFace'#15'ShowFocusBorder'#9#9'ShowGlyph'#8#20'GlyphBackground' + +'Color'#7#7'clWhite'#10'ClickColor'#7#6'clBlue'#19'OwnerBackgroundDraw'#8#22 + +'AutoWidthBorderSpacing'#2#15#23'AutoHeightBorderSpacing'#2#15#0#0#11'TGradB' + +'utton'#9'DeleteBtn'#4'Left'#2#16#6'Height'#2#25#3'Top'#2'P'#5'Width'#2'd'#7 + +'Caption'#6#6'Delete'#10'Font.Color'#7#7'clWhite'#7'OnClick'#7#14'DeleteBtnC' + +'lick'#8'TabOrder'#2#4#7'TabStop'#9#11'NormalBlend'#5#0#0#0#0#0#0#0#128#254 + +'?'#9'OverBlend'#5'5^'#186'I'#12#2'+'#167#254'?'#9'BaseColor'#7#6'clBlue'#5 + +'Color'#7#6'clBlue'#16'NormalBlendColor'#7#7'clWhite'#14'OverBlendColor'#7#8 + +'clSilver'#15'BackgroundColor'#7#9'clBtnFace'#15'ShowFocusBorder'#9#9'ShowGl' + +'yph'#8#20'GlyphBackgroundColor'#7#7'clWhite'#10'ClickColor'#7#6'clBlue'#19 + +'OwnerBackgroundDraw'#8#22'AutoWidthBorderSpacing'#2#15#23'AutoHeightBorderS' + +'pacing'#2#15#0#0#9'TSpinEdit'#9'SpinEdit2'#4'Left'#2#16#6'Height'#2#25#3'To' + +'p'#3#176#0#5'Width'#2'd'#13'OnEditingDone'#7#20'SpinEdit2EditingDone'#8'Tab' + +'Order'#2#5#0#0#5'TEdit'#5'Edit1'#4'Left'#2#16#6'Height'#2#25#3'Top'#3#136#0 + +#5'Width'#2'H'#8'TabOrder'#2#6#4'Text'#6#5'Edit1'#0#0#11'TGradButton'#11'Gra' + +'dButton1'#4'Left'#2'Z'#6'Height'#2#19#3'Top'#3#136#0#5'Width'#2#26#7'Captio' + +'n'#6#3'set'#10'Font.Color'#7#7'clWhite'#7'OnClick'#7#16'GradButton1Click'#8 + +'TabOrder'#2#7#7'TabStop'#9#11'NormalBlend'#5#0#0#0#0#0#0#0#128#254'?'#9'Ove' + +'rBlend'#5'5^'#186'I'#12#2'+'#167#254'?'#9'BaseColor'#7#6'clBlue'#5'Color'#7 + +#6'clBlue'#16'NormalBlendColor'#7#7'clWhite'#14'OverBlendColor'#7#8'clSilver' + +#15'BackgroundColor'#7#9'clBtnFace'#15'ShowFocusBorder'#9#9'ShowGlyph'#8#20 + +'GlyphBackgroundColor'#7#7'clWhite'#10'ClickColor'#7#6'clBlue'#19'OwnerBackg' + +'roundDraw'#8#22'AutoWidthBorderSpacing'#2#15#23'AutoHeightBorderSpacing'#2 + +#15#0#0#11'TCheckGroup'#11'CheckGroup1'#4'Left'#3#128#0#6'Height'#2'i'#3'Top' + +#3#143#0#5'Width'#2'd'#8'AutoFill'#9#7'Caption'#6#14'Scroll Buttons'#28'Chil' + +'dSizing.LeftRightSpacing'#2#6#28'ChildSizing.TopBottomSpacing'#2#6#29'Child' + +'Sizing.EnlargeHorizontal'#7#24'crsHomogenousChildResize'#27'ChildSizing.Enl' + +'argeVertical'#7#24'crsHomogenousChildResize'#28'ChildSizing.ShrinkHorizonta' + +'l'#7#14'crsScaleChilds'#26'ChildSizing.ShrinkVertical'#7#14'crsScaleChilds' + +#18'ChildSizing.Layout'#7#29'cclLeftToRightThenTopToBottom'#27'ChildSizing.C' + +'ontrolsPerLine'#2#1#13'Items.Strings'#1#6#4'Auto'#6#7'LeftTop'#6#11'RightBo' + +'ttom'#0#7'OnClick'#7#16'CheckGroup1Click'#11'OnItemClick'#7#20'CheckGroup1I' + +'temClick'#8'TabOrder'#2#8#4'Data'#10#7#0#0#0#3#0#0#0#3#2#2#0#0#11'TRadioGro' + +'up'#11'RadioGroup2'#4'Left'#3#130#0#6'Height'#2'i'#3'Top'#3#0#1#5'Width'#2 + +'d'#8'AutoFill'#9#7'Caption'#6#17'Tab Button Layout'#28'ChildSizing.LeftRigh' + +'tSpacing'#2#6#28'ChildSizing.TopBottomSpacing'#2#6#29'ChildSizing.EnlargeHo' + +'rizontal'#7#24'crsHomogenousChildResize'#27'ChildSizing.EnlargeVertical'#7 + +#24'crsHomogenousChildResize'#28'ChildSizing.ShrinkHorizontal'#7#14'crsScale' + +'Childs'#26'ChildSizing.ShrinkVertical'#7#14'crsScaleChilds'#18'ChildSizing.' + +'Layout'#7#29'cclLeftToRightThenTopToBottom'#27'ChildSizing.ControlsPerLine' + +#2#1#12'ClientHeight'#2'W'#11'ClientWidth'#2'`'#9'ItemIndex'#2#0#13'Items.St' + +'rings'#1#6#11'blGlyphLeft'#6#13'blGlyphBottom'#6#12'blGlyphRight'#6#10'blGl' + +'yphTop'#0#7'OnClick'#7#16'RadioGroup2Click'#8'TabOrder'#2#9#0#0#0#10'TPopup' + +'Menu'#10'PopupMenu1'#4'left'#3#222#2#3'top'#3#141#1#0#9'TMenuItem'#9'MenuIt' + +'em1'#3'Tag'#4#152''#18#0#7'Caption'#6#9'New Item1'#0#0#0#10'TImageList'#10 + +'ImageList1'#4'left'#3#144#2#3'top'#3#141#1#6'Bitmap'#10#14#4#0#0'Li'#1#0#0#0 + +#16#0#0#0#16#0#0#0#0#0'#'#0'{SIfg@4'#148#26#0#0#10'q'#161#162'$:'#159#189#158 + +'1'#159#193#188'.'#159#195#211'+'#158#196#234'+'#159#195#236'-'#159#195#214 + +'0'#159#195#191'7'#160#192#164'^'#161#173'1'#0#0'#'#0#0#0'#'#0#0#0#0#9'bB:' + +#188'R2('#164'z'#164#179'U7'#162#195#243#24#159#207#255#24#159#207#255#24#159 + +#207#255#24#159#207#255#24#159#207#255#24#159#207#255#24#159#207#255#24#159 + +#207#255'.'#159#196#247'{'#184#200'i'#0#0'#'#0#0#0#0#6'6"'#27'&M.(t}'#198#223 + +'lk'#204#235#255'I'#175#207#255';'#166#201#255'4'#162#197#255'.'#158#195#255 + +'-'#157#194#255'-'#156#191#255'/'#155#190#255'6'#158#192#255'P'#178#210#255 + +'y'#204#234#130#0#0'#'#0'kRJ|pLE'#137'\9-l'#195#218'Ol'#210#245#254'_'#199 + +#235#255'S'#187#223#255'G'#176#212#255'<'#164#200#255'0'#153#189#255'('#144 + +#180#255')'#145#181#255'4'#156#192#255'O'#182#218#255#130#205#229'o'#0#0'#'#0 + +'dNF'#128'hH?'#142'U5-~'#132#197#217'j['#186#217#252'Y'#190#225#255'Y'#185 + +#219#255'P'#177#211#255'<'#164#200#255'0'#153#189#255'1'#147#181#255'9'#153 + +#187#255'@'#164#199#255'P'#175#207#253'|'#195#215#135#0#0'#'#0#0#0'#'#0'dF=' + +#150'G,$]{'#196#221'lj'#210#246#255'`'#189#217#255'O'#176#205#255'J'#170#200 + +#255'L'#168#196#255'I'#164#193#255'='#154#184#255'6'#151#182#255'@'#157#187 + +#255'N'#182#218#255'z'#204#233#130#0#0'#'#0#0#0#0#5'bD;'#177'P0('#159't'#157 + ,#168'Sl'#205#238#251'_'#199#235#255'S'#187#223#255'G'#176#212#255'<'#164#200 + +#255'0'#153#189#255'('#144#180#255')'#144#181#255'4'#156#192#255'U'#182#216 + +#253#130#192#205'l'#0#0'#'#0#0#0#0#4'pND'#150'lB7'#154'z'#187#206'q]'#184#210 + +#255'P'#178#212#255'I'#179#216#255'D'#176#212#255'A'#168#205#255'9'#160#196 + +#255'4'#157#194#255'5'#160#198#255'@'#165#198#255'O'#172#200#255'~'#202#228 + +#134#0#0'#'#0#0#0'#'#0',#'#26#29'Q2)'#138'p'#177#198'qj'#210#246#255'`'#199 + +#234#255'\'#183#211#255'O'#171#199#255'B'#161#192#255';'#155#185#255'9'#149 + +#176#255'8'#146#175#255'6'#156#191#255'N'#182#218#255'{'#206#233#129#0#0'#'#0 + +#0#0#0#4'^A7'#138'e>3w'#133#184#196'Qi'#196#229#252'`'#199#235#255'S'#187#223 + +#255'G'#176#212#255'<'#164#200#255'0'#153#189#255'('#144#180#255')'#144#181 + +#255'4'#156#192#255'W'#181#213#253#135#187#204'w'#0#0'#'#0#0#0#0#7'^?8m_8.it' + +#183#205'rh'#197#226#255'U'#176#205#255'N'#175#206#255'J'#171#205#255'C'#169 + +#204#255'='#163#199#255'='#160#193#255'@'#161#193#255'I'#164#195#255'Q'#175 + +#205#255'z'#204#233#130#0#0'#'#0#0#0'#'#0'iH>'#131'_90'#142#133#204#230'Zk' + +#210#246#255'_'#199#235#255'S'#187#223#255'G'#176#212#255'D'#164#195#255':' + +#154#183#255'('#144#180#255')'#144#181#255'4'#156#192#255'N'#182#218#255'}' + +#204#230'x'#0#0'#'#0#0#0#0#6'X>5|`:0'#181'{'#175#193'm^'#187#219#252'^'#193 + +#227#255'Z'#187#220#255'G'#176#212#255'<'#164#200#255'0'#153#189#255'('#144 + +#180#255'3'#149#182#255'B'#162#196#255'T'#177#209#253'~'#192#210#136#0#0'#'#0 + +'Q<6&nKB'#142'L-&kv'#187#210'ok'#210#245#255']'#186#213#255'Q'#175#205#255'R' + +#172#200#255'J'#168#199#255'E'#163#195#255'F'#159#188#255'='#153#184#255'@' + +#158#187#255'O'#181#217#255'z'#205#235#130#0#0'#'#0'fNI'#130'Y=7pmB7pa'#134 + +#150'Dp'#208#242#246'_'#199#235#255'S'#187#223#255'G'#176#212#255'<'#164#200 + +#255'0'#153#189#255'('#144#180#255')'#144#181#255'4'#156#192#255'U'#183#217 + +#250#133#201#225'O'#0#0'#'#0'nUN'#141'pND'#166'h?5'#165#28#14#14#18#134#198 + +#220'-k'#194#225#153'_'#188#221#184'U'#180#212#210'L'#169#202#232'C'#160#192 + +#234'>'#156#188#213'B'#158#191#188'P'#168#199#159'y'#185#208';'#0#0'#'#0#0#0 + +'#'#0#0#0#0 ]); diff --git a/components/gradcontrols/examples/Forms/unit1.pas b/components/gradcontrols/examples/Forms/unit1.pas index d03329a89..8bb5f4e98 100644 --- a/components/gradcontrols/examples/Forms/unit1.pas +++ b/components/gradcontrols/examples/Forms/unit1.pas @@ -84,10 +84,14 @@ var implementation +uses + gradtabstyle; + { TForm1 } procedure TForm1.FormCreate(Sender: TObject); begin + GradTabControl1.Style :=TGradTabVistaStyle.Create; GradTabControl1.Align:=alClient; GradTabControl1.TabPosition:=tpTop; SpinEdit2.Value:=GradTabControl1.TabHeight; diff --git a/components/gradcontrols/examples/gradcontroltest.lpi b/components/gradcontrols/examples/gradcontroltest.lpi index 84084a0b5..bdf979658 100644 --- a/components/gradcontrols/examples/gradcontroltest.lpi +++ b/components/gradcontrols/examples/gradcontroltest.lpi @@ -16,7 +16,7 @@ - + diff --git a/components/gradcontrols/packages/gradtabcontrol.lpk b/components/gradcontrols/packages/gradtabcontrol.lpk index 06c6c7ddd..12ad77990 100644 --- a/components/gradcontrols/packages/gradtabcontrol.lpk +++ b/components/gradcontrols/packages/gradtabcontrol.lpk @@ -25,7 +25,7 @@ - + @@ -35,6 +35,10 @@ + + + + diff --git a/components/gradcontrols/packages/gradtabcontrol.pas b/components/gradcontrols/packages/gradtabcontrol.pas index c407aa495..bfa6a05f9 100644 --- a/components/gradcontrols/packages/gradtabcontrol.pas +++ b/components/gradcontrols/packages/gradtabcontrol.pas @@ -8,7 +8,7 @@ unit gradtabcontrol; interface uses -ugradtabcontrol, gradtabcontroleditor, LazarusPackageIntf; + ugradtabcontrol, gradtabcontroleditor, gradtabstyle, LazarusPackageIntf; implementation diff --git a/components/gradcontrols/src/gradtabstyle.pas b/components/gradcontrols/src/gradtabstyle.pas new file mode 100644 index 000000000..5567c088a --- /dev/null +++ b/components/gradcontrols/src/gradtabstyle.pas @@ -0,0 +1,322 @@ +unit gradtabstyle; + +{$mode objfpc}{$H+} + +{------------------------------------- +Style-Class for TGradTabControl +--------------------------------------} + +interface + +uses + Classes, SysUtils, Controls, Graphics, Buttons, ExtCtrls, ugradbtn; + +type + TStylePaintEvent = procedure(Sender: TCustomControl; AIndex: Integer; + Button: TGradButton; TargetCanvas: TCanvas; R: TRect; + BState : TButtonState) of object; + + { TGradTabStyleBase } + + TStyleBaseOptions = set of (sbTabButton, sbLeftRightButton, sbBorderButton, sbCloseButton); + + TGradTabStyleBase = class + private + function GetHasCloseButtonPaint: Boolean; + function GetHasTabButtonPaint: Boolean; + function GetHasLeftRightButtonPaint: Boolean; + function GetHasBorderButtonPaint: Boolean; + protected + FTheTabControl: TCustomControl; + FOptions : TStyleBaseOptions; + public + constructor Create; virtual; + procedure TabControl(Sender: TCustomControl; + TargetCanvas: TCanvas); virtual; abstract; + procedure TabButton(Sender: TCustomControl; AIndex: Integer; + Button: TGradButton; TargetCanvas: TCanvas; R: TRect; BState : TButtonState); virtual; abstract; + procedure TabCloseButton(Sender: TCustomControl; AIndex: Integer; + Button: TGradButton; TargetCanvas: TCanvas; R: TRect; BState : TButtonState); virtual; abstract; + procedure TabButtonBorder(Sender: TCustomControl; AIndex: Integer; + Button: TGradButton; TargetCanvas: TCanvas; R: TRect; BState : TButtonState); virtual; abstract; + procedure TabLeftRightButton(Sender: TGradButton; TargetCanvas: TCanvas; R: TRect; BState : TButtonState); virtual; abstract; + procedure PrepareButton(Button: TGradButton); virtual; + property TheTabControl : TCustomControl read FTheTabControl write FTheTabControl; + property HasTabButtonPaint : Boolean read GetHasTabButtonPaint; + property HasLeftRightButtonPaint : Boolean read GetHasLeftRightButtonPaint; + property HasBorderButtonPaint : Boolean read GetHasBorderButtonPaint; + property HasCloseButtonPaint : Boolean read GetHasCloseButtonPaint; + end; + + { TGradTabStandardStyle } + + TGradTabStandardStyle = class(TGradTabStyleBase) + public + procedure TabControl(Sender: TCustomControl; TargetCanvas: TCanvas); + override; + end; + + { TGradTabVistaStyle } + + TButtonVistaStyle = record + BorderColor : TColor; + InnerBorderColor : TColor; + TopStartColor : TColor; + TopStopColor : TColor; + BottomStartColor : TColor; + BottomStopColor : TColor; + end; + + TGradTabVistaStyle = class(TGradTabStyleBase) + private + Normal : TButtonVistaStyle; + Hover : TButtonVistaStyle; + ActiveButton : TButtonVistaStyle; + public + constructor Create; override; + procedure TabControl(Sender: TCustomControl; TargetCanvas: TCanvas); + override; + procedure TabButton(Sender: TCustomControl; AIndex: Integer; + Button: TGradButton; TargetCanvas: TCanvas; R: TRect; BState : TButtonState); override; + procedure TabCloseButton(Sender: TCustomControl; AIndex: Integer; + Button: TGradButton; TargetCanvas: TCanvas; R: TRect; BState: TButtonState); override; + procedure TabButtonBorder(Sender: TCustomControl; AIndex: Integer; + Button: TGradButton; TargetCanvas: TCanvas; R: TRect; BState : TButtonState); override; + procedure PrepareButton(Button: TGradButton); override; + end; + +implementation + +uses + ugradtabcontrol, LCLProc; + +{ TGradTabStyleBase } + +function TGradTabStyleBase.GetHasCloseButtonPaint: Boolean; +begin + Result := sbCloseButton in FOptions; +end; + +function TGradTabStyleBase.GetHasTabButtonPaint: Boolean; +begin + Result := sbTabButton in FOptions; +end; + +function TGradTabStyleBase.GetHasLeftRightButtonPaint: Boolean; +begin + Result := sbLeftRightButton in FOptions; +end; + +function TGradTabStyleBase.GetHasBorderButtonPaint: Boolean; +begin + Result := sbBorderButton in FOptions; +end; + +constructor TGradTabStyleBase.Create; +begin + FOptions:= []; +end; + +procedure TGradTabStyleBase.PrepareButton(Button: TGradButton); +begin + // nothing +end; + +{ TGradTabStandardStyle } + +procedure TGradTabStandardStyle.TabControl(Sender: TCustomControl; + TargetCanvas: TCanvas); +var + AClientRect : TRect; +begin + TargetCanvas.Brush.Color:=Sender.Color; + TargetCanvas.FillRect(0,0,Sender.Width, Sender.Height); + + TargetCanvas.Pen.Color:=clBlack; + + AClientRect := (Sender as TGradTabControl).GetClientRect; + + TargetCanvas.Rectangle(AClientRect.Left-2, AClientRect.Top-2, + AClientRect.Right+2, AClientRect.Bottom+2); +end; + +{ TGradTabVistaStyle } + +constructor TGradTabVistaStyle.Create; +begin + inherited Create; + + FOptions:=[sbTabButton, sbBorderButton, sbCloseButton]; + + with Normal do + begin + BorderColor:=TColor($8b8c90); + InnerBorderColor:= TColor($fbfcff); + TopStartColor := TColor($f2f2f2); + TopStopColor := TColor($ebebeb); + BottomStartColor := TColor($dddddb); + BottomStopColor := TColor($cfcfcf); + end; + + with Hover do + begin + BorderColor:=RGBToColor(85, 121, 145); + InnerBorderColor:= RGBToColor(224, 255, 255); + TopStartColor := RGBToColor(233, 246, 254); + TopStopColor := RGBToColor(219, 238, 252); + BottomStartColor := RGBToColor(190, 231, 253); + BottomStopColor := RGBToColor(167, 217, 244); + end; + + with ActiveButton do + begin + BorderColor:=TColor($8b8c91); + InnerBorderColor:= TColor($FFFFFF); + TopStartColor := TColor($FFFFFF); + TopStopColor := TColor($FFFFFF); + BottomStartColor := TColor($FFFFFF); + BottomStopColor := TColor($FFFFFF); + end; +end; + +procedure TGradTabVistaStyle.TabControl(Sender: TCustomControl; + TargetCanvas: TCanvas); +var + AClientRect : TRect; +begin + TargetCanvas.Brush.Color:=clWhite; + TargetCanvas.FillRect(0,0,Sender.Width, Sender.Height); + + TargetCanvas.Pen.Color:=Normal.BorderColor; + + AClientRect := (Sender as TGradTabControl).GetClientRect; + + TargetCanvas.Rectangle(AClientRect.Left-2, AClientRect.Top-2, + AClientRect.Right+2, AClientRect.Bottom+2); +end; + +procedure TGradTabVistaStyle.TabButton(Sender: TCustomControl; AIndex: Integer; + Button: TGradButton; TargetCanvas: TCanvas; R: TRect; BState : TButtonState); +var + ColorSet: TButtonVistaStyle; + UpperRect, LowerRect : TRect; + FGradTabControl : TGradTabControl; + FGradientDirection : TGradientDirection; +begin + FGradTabControl := Sender as TGradTabControl; + if AIndex = FGradTabControl.PageIndex then + BState := bsDown; + + case BState of + bsDown: ColorSet := ActiveButton; + bsHot: ColorSet := Hover; + else ColorSet := Normal; + end; + + UpperRect := R; + UpperRect.Bottom:= UpperRect.Bottom div 2; + + LowerRect := R; + LowerRect.Top := UpperRect.Bottom; + + case FGradTabControl.TabPosition of + tpTop, tpBottom: FGradientDirection := gdVertical; + tpLeft, tpRight: + if FGradTabControl.LongTabs then + FGradientDirection := gdVertical + else + FGradientDirection := gdHorizontal; + end; + + with TargetCanvas do + begin + GradientFill(UpperRect, ColorSet.TopStartColor, + ColorSet.TopStopColor, FGradientDirection); + GradientFill(LowerRect, ColorSet.BottomStartColor, + ColorSet.BottomStopColor, FGradientDirection); + end; +end; + +procedure TGradTabVistaStyle.TabCloseButton(Sender: TCustomControl; + AIndex: Integer; Button: TGradButton; TargetCanvas: TCanvas; R: TRect; + BState: TButtonState); +begin + TabButton(Sender, AIndex, Button, TargetCanvas, R, BState); +end; + +procedure TGradTabVistaStyle.TabButtonBorder(Sender: TCustomControl; AIndex: Integer; + Button: TGradButton; TargetCanvas: TCanvas; R: TRect; BState : TButtonState); +var + ColorSet: TButtonVistaStyle; +begin + //DebugLn('Border R: ',DbgS(R)); + + case BState of + bsDown: ColorSet := ActiveButton; + bsHot: ColorSet := Hover; + else ColorSet := Normal; + end; + + with Button do + begin + //Top + if (bsTopLine in BorderSides) then + begin + TargetCanvas.Pen.Color:=ColorSet.BorderColor; + TargetCanvas.Line(R.Left,0,R.Right,0); + TargetCanvas.Pen.Color:=ColorSet.InnerBorderColor; + TargetCanvas.Line(R.Left,1,R.Right,1); + end; + + //Left + if (bsLeftLine in BorderSides) then + begin + TargetCanvas.Pen.Color:=ColorSet.BorderColor; + TargetCanvas.Line(0,R.Top,0,R.Bottom); + TargetCanvas.Pen.Color:=ColorSet.InnerBorderColor; + TargetCanvas.Line(1,R.Top,1,R.Bottom); + end; + + //Right + if (bsRightLine in BorderSides) then + begin + TargetCanvas.Pen.Color:=ColorSet.BorderColor; + TargetCanvas.Line(Width-1,R.Top,Width-1,R.Bottom); + TargetCanvas.Pen.Color:=ColorSet.InnerBorderColor; + TargetCanvas.Line(Width-2,R.Top,Width-2,R.Bottom); + end; + + //Bottom + if (bsBottomLine in BorderSides) then + begin + TargetCanvas.Pen.Color:=ColorSet.BorderColor; + TargetCanvas.Line(R.Left,Height-1,R.Right,Height-1); + TargetCanvas.Pen.Color:=ColorSet.InnerBorderColor; + TargetCanvas.Line(R.Left,Height-2,R.Right,Height-2); + end; + + //TopLeft + if (bsTopLine in BorderSides) AND (bsLeftLine in BorderSides) then + TargetCanvas.Pixels[1,1]:=ColorSet.BorderColor; + + //TopRight + if (bsTopLine in BorderSides) AND (bsRightLine in BorderSides) then + TargetCanvas.Pixels[Width-2,1] := ColorSet.BorderColor; + + //BottomLeft + if (bsBottomLine in BorderSides) AND (bsLeftLine in BorderSides) then + TargetCanvas.Pixels[1, Height-2]:=ColorSet.BorderColor; + + //BottomRight + if (bsBottomLine in BorderSides) AND (bsRightLine in BorderSides) then + TargetCanvas.Pixels[Width-2,Height-2]:=ColorSet.BorderColor; + end; +end; + +procedure TGradTabVistaStyle.PrepareButton(Button: TGradButton); +begin + Button.Font.Color:=clBlack; +end; + +end. + diff --git a/components/gradcontrols/src/ugradtabcontrol.pas b/components/gradcontrols/src/ugradtabcontrol.pas index ad7ec02e2..86c79fbff 100644 --- a/components/gradcontrols/src/ugradtabcontrol.pas +++ b/components/gradcontrols/src/ugradtabcontrol.pas @@ -18,7 +18,7 @@ interface uses Classes,LResources, SysUtils, Menus, LCLType, LCLProc, LCLIntf,ExtCtrls, Graphics, ugradbtn, Controls, uRotateBitmap, - Buttons, Forms, ImgList; + Buttons, Forms, ImgList, gradtabstyle; type TGradTabControl = class; @@ -211,6 +211,8 @@ type function GetViewableTabs(FromIndex : Integer) : TTabs; function GetTabsOfSide(FromIndex : Integer; FromLeftSide : Boolean) : TTabs; procedure ScrollToTab(PIndex : Integer); + procedure UpdateAllButtons; + procedure NewStyle; public constructor Create(AOwner: TComponent; var thePageList: TListWithEvent; TheTabControl : TGradTabControl); @@ -271,18 +273,24 @@ type procedure Move(CurIndex, NewIndex: Integer); override; end; + TGradTabControlPaintEvent = procedure(Sender: TCustomControl; + TargetCanvas: TCanvas) of object; + { TGradTabControl } TGradTabControl = class(TCustomControl) private FAutoShowScrollButton: Boolean; + FCustomDraw: Boolean; FImages: TImageList; FMoveIncrement: Integer; FLeftButton, FRightButton : TGradButton; + FOnCustomDraw: TGradTabControlPaintEvent; FOnTabCloseButtonClick: TGradTabPageButtonClickEvent; FOnPageChanged: TNotifyEvent; FShowLeftTopScrollButton: Boolean; FShowRightBottomScrollButton: Boolean; + FStyle: TGradTabStyleBase; FTabStrings : TStrings; //TGradTabPages FPageList: TList; //Is Managed by TGradTabPages FOnTabButtonClick : TGradTabPageButtonClickEvent; @@ -305,7 +313,9 @@ type function GetTabPopupMenu: TPopupMenu; procedure ImageListChange(Sender: TObject); procedure SetActiveTabColor(const AValue: TColor); + procedure SetCustomDraw(const AValue: Boolean); procedure SetNormalTabColor(const AValue: TColor); + procedure SetStyle(const AValue: TGradTabStyleBase); procedure SetTabPopupMenu(const AValue: TPopupMenu); procedure UpdateTabImages; function GetCurrentPage : TGradTabPage; @@ -350,6 +360,16 @@ type procedure SubDragDrop(Sender, Source: TObject; X,Y: Integer); //End + // Style Event Wrapper + procedure StyleTabButton(Sender: TGradButton; + TargetCanvas: TCanvas; R: TRect; BState : TButtonState); + procedure StyleTabCloseButton(Sender: TGradButton; + TargetCanvas: TCanvas; R: TRect; BState : TButtonState); + procedure StyleTabButtonBorder(Sender: TGradButton; + TargetCanvas: TCanvas; R: TRect; BState : TButtonState); + + // End + procedure PopupTabs(Sender: TObject); procedure MoveLeftTopClick(Sender: TObject); procedure MoveRightBottomClick(Sender: TObject); @@ -416,7 +436,7 @@ type property OnClick; property OnDblClick; property TabPopupMenu : TPopupMenu read GetTabPopupMenu write SetTabPopupMenu; - + property PopupMenu; property PageIndex : Integer read FPageIndex write SetCurrentPageNum; property TabHeight : Integer read FTabHeight write SetTabHeight; property TabPosition : TTabPosition read FTabPosition write SetTabPosition default tpTop; @@ -430,6 +450,9 @@ type property Images : TImageList read FImages write SetImages; property NormalTabColor: TColor read GetNormalTabColor write SetNormalTabColor default clBlue; property ActiveTabColor: TColor read GetActiveTabColor write SetActiveTabColor default clGreen; + property CustomDraw : Boolean read FCustomDraw write SetCustomDraw; + property OnCustomDraw : TGradTabControlPaintEvent read FOnCustomDraw write FOnCustomDraw; + property Style : TGradTabStyleBase read FStyle write SetStyle; end; procedure Register; @@ -503,7 +526,7 @@ begin inherited Create(AOwner); ControlStyle := ControlStyle+[csNoDesignSelectable,csDesignInteractive]-[csCaptureMouse]; - FCloseButton := TGradTabCloseButton.Create(Self); + FCloseButton := TGradTabCloseButton.Create(AOwner); FCloseButton.Width:=14; FCloseButton.Height:=14; TextAlignment:=taCenter; @@ -557,6 +580,8 @@ begin FCloseButton.Top:=NewTop+TheRect.Top; FCloseButton.Left:=NewLeft+TheRect.Left; + + FCloseButton.UpdateButton; end; {------------------------------------------------------------------------------- @@ -687,7 +712,7 @@ procedure TGradTabPageButton.GetContentRect(var TheRect: TRect); begin inherited GetContentRect(TheRect); - if ShowGlyph then + if ShowCloseButton then begin case RotateDirection of rdNormal: begin @@ -1205,16 +1230,43 @@ begin with AButton do begin - Left:=-123; - Parent := Self; - ShowFocusBorder:=false; - TextAlignment:=taCenter; - BorderSides:=[bsTopLine,bsRightLine,bsLeftLine]; - OnMouseDown:=@FTabControl.PageButtonMouseDown; - OnMouseUp:=@FTabControl.PageButtonMouseUp; - OnClick:=@FTabControl.PageButtonMouseClick; - OnMouseMove:=@FTabControl.PageButtonMouseMove; - FCloseButton.OnMouseUp:=@FTabControl.PageCloseButtonMouseUp; + Left := -123; + Parent := Self; + ShowFocusBorder := false; + TextAlignment := taCenter; + BorderSides := [bsTopLine,bsRightLine,bsLeftLine]; + OnMouseDown := @FTabControl.PageButtonMouseDown; + OnMouseUp := @FTabControl.PageButtonMouseUp; + OnClick := @FTabControl.PageButtonMouseClick; + OnMouseMove := @FTabControl.PageButtonMouseMove; + FCloseButton.OnMouseUp := @FTabControl.PageCloseButtonMouseUp; + + FTabControl.Style.PrepareButton(AButton); + + if FTabControl.Style.HasTabButtonPaint then + begin + OnNormalBackgroundPaint := @FTabControl.StyleTabButton; + OnDisabledBackgroundPaint := @FTabControl.StyleTabButton; + OnDownBackgroundPaint := @FTabControl.StyleTabButton; + OnHotBackgroundPaint := @FTabControl.StyleTabButton; + + if FTabControl.Style.HasBorderButtonPaint then + OnBorderBackgroundPaint := @FTabControl.StyleTabButtonBorder; + + OwnerBackgroundDraw := true; + + if FTabControl.Style.HasCloseButtonPaint then + begin + FCloseButton.OnNormalBackgroundPaint := @FTabControl.StyleTabCloseButton; + FCloseButton.OnDisabledBackgroundPaint := @FTabControl.StyleTabCloseButton; + FCloseButton.OnDownBackgroundPaint := @FTabControl.StyleTabCloseButton; + FCloseButton.OnHotBackgroundPaint := @FTabControl.StyleTabCloseButton; + + FCloseButton.OwnerBackgroundDraw := true; + end; + end else begin + OwnerBackgroundDraw := false; + end; end; if Assigned(PopupMenu) then @@ -1379,85 +1431,85 @@ begin case FTabPosition of tpTop: begin - //if B.Width < B.GetAutoWidth then - B.Width := B.GetAutoWidth; + //if B.Width < B.GetAutoWidth then + B.Width := B.GetAutoWidth; - B.Left := LastLeft; - LastLeft := LastLeft + B.Width + 1; + B.Left := LastLeft; + LastLeft := LastLeft + B.Width + 1; - if FActiveIndex = i then begin - B.Top := 0; - B.Height:= BarHeight; - end else begin - B.Top := 3; - B.Height:= BarHeight-3; - end; + if FActiveIndex = i then begin + B.Top := 0; + B.Height:= BarHeight; + end else begin + B.Top := 3; + B.Height:= BarHeight-3; + end; end; tpBottom: begin - //if B.Width < B.GetAutoWidth then - B.Width := B.GetAutoWidth; + //if B.Width < B.GetAutoWidth then + B.Width := B.GetAutoWidth; - B.Left := LastLeft; - LastLeft := LastLeft + B.Width + 1; + B.Left := LastLeft; + LastLeft := LastLeft + B.Width + 1; - B.Top := 0; + B.Top := 0; - if FActiveIndex = i then - B.Height := BarHeight - else - B.Height := BarHeight-3; + if FActiveIndex = i then + B.Height := BarHeight + else + B.Height := BarHeight-3; end; tpLeft: begin - if FTabControl.LongTabs then begin - if (B.GetAutoWidth > FTabControl.LongWidth) then - begin - FTabControl.LongWidth:=B.GetAutoWidth; - Exit; - end; + if FTabControl.LongTabs then begin + if (B.GetAutoWidth > FTabControl.LongWidth) then + begin + FTabControl.LongWidth:=B.GetAutoWidth; + Exit; + end; + end; - end; + B.Height:= B.GetAutoHeight; - B.Height:= B.GetAutoHeight; + B.Top := LastTop; + LastTop := LastTop + B.Height + 1; - B.Top := LastTop; - LastTop := LastTop + B.Height + 1; - - if FActiveIndex = i then begin - B.Left := 0; - B.Width:= FTabControl.GetTabBarSize(tpLeft); - end else begin - B.Left := 3; - B.Width:= FTabControl.GetTabBarSize(tpLeft)-3; - end; + if FActiveIndex = i then begin + B.Left := 0; + B.Width:= FTabControl.GetTabBarSize(tpLeft); + end else begin + B.Left := 3; + B.Width:= FTabControl.GetTabBarSize(tpLeft)-3; + end; end; tpRight: begin - if FTabControl.LongTabs then begin - if (B.GetAutoWidth > FTabControl.LongWidth) then - begin - FTabControl.LongWidth:=B.GetAutoWidth; - Exit; - end; - end; + if FTabControl.LongTabs then begin + if (B.GetAutoWidth > FTabControl.LongWidth) then + begin + FTabControl.LongWidth:=B.GetAutoWidth; + Exit; + end; + end; - B.Height:= B.GetAutoHeight; + B.Height:= B.GetAutoHeight; - B.Top := LastTop; - LastTop := LastTop + B.Height + 1; + B.Top := LastTop; + LastTop := LastTop + B.Height + 1; - B.Left := 0; + B.Left := 0; - if FActiveIndex = i then - B.Width := FTabControl.GetTabBarSize(tpRight) - else begin - B.Width := FTabControl.GetTabBarSize(tpRight)-3; - end; - {$IFDEF DEBUGTAB} + if FActiveIndex = i then + B.Width := FTabControl.GetTabBarSize(tpRight) + else begin + B.Width := FTabControl.GetTabBarSize(tpRight)-3; + end; + + {$IFDEF DEBUGTAB} DebugLn('B.Width=%d TabBarSize(tpRight)=%d FActive=%d',[B.Width, FTabControl.GetTabBarSize(tpRight), FActiveIndex]); - {$ENDIF} + {$ENDIF} end; end; @@ -1468,10 +1520,10 @@ begin end; {$IFDEF DEBUGTAB} - DebugLn('BarWidth=%d LastLeft=%d FMovedTo=%d BarHeight=%d LastTop=%d',[BarWidth, + DebugLn('BarWidth=%d LastLeft=%d FMovedTo=%d BarHeight=%d LastTop=%d',[BarWidth, LastLeft, FMovedTo, BarHeight, LastTop]); - DebugLn('BarWidth < LastLeft-FMovedTo = %s BarHeight < LastTop-FMovedTo=%s',[ + DebugLn('BarWidth < LastLeft-FMovedTo = %s BarHeight < LastTop-FMovedTo=%s',[ BoolStr(BarWidth < (LastLeft-FMovedTo)), BoolStr(BarHeight < (LastTop-FMovedTo))]); {$ENDIF} @@ -1482,17 +1534,17 @@ begin OR (FMovedTo <> 1)) AND ((BarHeight<>0) AND (BarWidth<>0)) then begin - FTabControl.FLeftButton.Visible:=true; - FTabControl.FRightButton.Visible:=true; + FTabControl.FLeftButton.Visible:=true; + FTabControl.FRightButton.Visible:=true; end else begin - FTabControl.FLeftButton.Visible:=false; - FTabControl.FRightButton.Visible:=false; + FTabControl.FLeftButton.Visible:=false; + FTabControl.FRightButton.Visible:=false; end; {$IFDEF DEBUGTAB} - DebugLn('FR=%s FL=%s',[BoolStr(FTabControl.FRightButton.Visible),BoolStr(FTabControl.FLeftButton.Visible)]); + DebugLn('FR=%s FL=%s',[BoolStr(FTabControl.FRightButton.Visible),BoolStr(FTabControl.FLeftButton.Visible)]); - DebugLn('OrderButton End'); + DebugLn('OrderButton End'); {$ENDIF} end; @@ -1542,63 +1594,63 @@ end; ------------------------------------------------------------------------------} procedure TGradTabPagesBar.FocusButton(Index: Integer); var - CurTabs : TTabs; - DoNext : Boolean; - c : Integer; + CurTabs : TTabs; + DoNext : Boolean; + c : Integer; begin - if csDestroying in FTabControl.ComponentState then Exit; - if (Index < 0) or (Index >= FPageList.Count) then Exit; + if csDestroying in FTabControl.ComponentState then Exit; + if (Index < 0) or (Index >= FPageList.Count) then Exit; - {$IFDEF DEBUGTAB} - DebugLn('TGradTabPagesBar.FocusButton Index: %d Assigned %s', [Index,BoolToStr(Assigned(TGradTabPage(FPageList.Items[Index]).TabButton),true)]); - {$ENDIF} + {$IFDEF DEBUGTAB} + DebugLn('TGradTabPagesBar.FocusButton Index: %d Assigned %s', [Index,BoolToStr(Assigned(TGradTabPage(FPageList.Items[Index]).TabButton),true)]); + {$ENDIF} - with TGradTabPage(FPageList.Items[Index]).TabButton do - begin - case FTabPosition of - tpTop, tpBottom : begin - Top:=0; - Height:=Self.Height; + with TGradTabPage(FPageList.Items[Index]).TabButton do + begin + case FTabPosition of + tpTop, tpBottom : begin + Top:=0; + Height:=Self.Height; - DoNext := ((Left+Width)>= Self.Width); - end; - tpRight, tpLeft: begin - Left := 0; - Width:= Self.Width; + DoNext := ((Left+Width)>= Self.Width); + end; + tpRight, tpLeft: begin + Left := 0; + Width:= Self.Width; - if FTabControl.LongTabs then - Height := FTabControl.TabHeight; - - DoNext := ((Top+Height)>= Self.Height); - end; - end; - - if TGradTabPage(FPageList.Items[Index]).OwnerTabColor then - Color := TGradTabPage(FPageList.Items[Index]).ActiveTabColor - else - Color := ActiveTabColor; + if FTabControl.LongTabs then + Height := FTabControl.TabHeight; + DoNext := ((Top+Height)>= Self.Height); + end; end; - {$IFDEF DEBUGTAB} - DebugLn('FR=%s FL=%s',[BoolStr(FTabControl.FRightButton.Visible),BoolStr(FTabControl.FLeftButton.Visible)]); - {$ENDIF} + if TGradTabPage(FPageList.Items[Index]).OwnerTabColor then + Color := TGradTabPage(FPageList.Items[Index]).ActiveTabColor + else + Color := ActiveTabColor; - if not (FTabControl.FRightButton.Visible AND FTabControl.FLeftButton.Visible) then Exit; + end; + + {$IFDEF DEBUGTAB} + DebugLn('FR=%s FL=%s',[BoolStr(FTabControl.FRightButton.Visible),BoolStr(FTabControl.FLeftButton.Visible)]); + {$ENDIF} + + if not (FTabControl.FRightButton.Visible AND FTabControl.FLeftButton.Visible) then Exit; C := 0; - {$IFDEF DEBUGTAB} - DebugLn('Left=%d Width=%d Width=%d',[TGradTabPage(FPageList.Items[Index]).TabButton.Left, - TGradTabPage(FPageList.Items[Index]).TabButton.Width, Width]); + {$IFDEF DEBUGTAB} + DebugLn('Left=%d Width=%d Width=%d',[TGradTabPage(FPageList.Items[Index]).TabButton.Left, + TGradTabPage(FPageList.Items[Index]).TabButton.Width, Width]); - DebugLn('FocusButton Before ScrollToTab'); - {$ENDIF} + DebugLn('FocusButton Before ScrollToTab'); + {$ENDIF} - ScrollToTab(Index); + ScrollToTab(Index); - {$IFDEF DEBUGTAB} - DebugLn('FocusButton After ScrollToTab'); - {$ENDIF} + {$IFDEF DEBUGTAB} + DebugLn('FocusButton After ScrollToTab'); + {$ENDIF} end; {------------------------------------------------------------------------------- @@ -1606,26 +1658,26 @@ end; ------------------------------------------------------------------------------} procedure TGradTabPagesBar.SetTabPosition(Value: TTabPosition); - function DbgsTabPosition(V : TTabPosition) : String; - begin - case V of - tpTop : Result := 'tpTop'; - tpBottom: Result := 'tpBottom'; - tpRight: Result := 'tpRight'; - tpLeft: Result := 'tpLeft'; - end; - end; + function DbgsTabPosition(V : TTabPosition) : String; + begin + case V of + tpTop : Result := 'tpTop'; + tpBottom: Result := 'tpBottom'; + tpRight: Result := 'tpRight'; + tpLeft: Result := 'tpLeft'; + end; + end; begin - if FTabPosition = Value then Exit; + if FTabPosition = Value then Exit; - {$IFDEF DEBUGTAB} + {$IFDEF DEBUGTAB} DebugLn('Change TabPosition from %s to %s',[DbgsTabPosition(FTabPosition),DbgsTabPosition(Value)]); - {$ENDIF} + {$ENDIF} - FTabPosition:=Value; + FTabPosition:=Value; - OrderButtons; + OrderButtons; end; function TGradTabPagesBar.IsVisible(Index: Integer): Boolean; @@ -1779,6 +1831,53 @@ begin {$IFDEF DEBUGTAB} DebugLn('ScrollToTab End'); {$ENDIF} end; +procedure TGradTabPagesBar.UpdateAllButtons; +var + i : Integer; +begin + for i:= 0 to FPageList.Count-1 do + begin + TGradTabPage(FPageList[i]).TabButton.UpdateButton; + end; +end; + +procedure TGradTabPagesBar.NewStyle; +var + i : Integer; +begin + for i:= 0 to FPageList.Count-1 do + begin + with TGradTabPage(FPageList[i]).TabButton do + begin + FTabControl.Style.PrepareButton(TGradTabPage(FPageList[i]).TabButton); + if FTabControl.Style.HasTabButtonPaint then + begin + OnNormalBackgroundPaint:=@FTabControl.StyleTabButton; + OnDisabledBackgroundPaint:=@FTabControl.StyleTabButton; + OnDownBackgroundPaint:=@FTabControl.StyleTabButton; + OnHotBackgroundPaint:=@FTabControl.StyleTabButton; + + if FTabControl.Style.HasBorderButtonPaint then + OnBorderBackgroundPaint := @FTabControl.StyleTabButtonBorder; + + OwnerBackgroundDraw:=true; + + if FTabControl.Style.HasCloseButtonPaint then + begin + FCloseButton.OnNormalBackgroundPaint := @FTabControl.StyleTabCloseButton; + FCloseButton.OnDisabledBackgroundPaint := @FTabControl.StyleTabCloseButton; + FCloseButton.OnDownBackgroundPaint := @FTabControl.StyleTabCloseButton; + FCloseButton.OnHotBackgroundPaint := @FTabControl.StyleTabCloseButton; + + FCloseButton.OwnerBackgroundDraw := true; + end; + end else begin + OwnerBackgroundDraw:=false; + end; + end; + end; +end; + {------------------------------------------------------------------------------- TGradTabPagesBar Create(AOwner: TComponent) ------------------------------------------------------------------------------} @@ -2000,80 +2099,82 @@ end; ------------------------------------------------------------------------------} constructor TGradTabControl.Create(AOwner: TComponent); begin - inherited; + inherited; - FImageChangeLink := TChangeLink.Create; - FImageChangeLink.OnChange:=@ImageListChange; + FImageChangeLink := TChangeLink.Create; + FImageChangeLink.OnChange:=@ImageListChange; - FTabPosition:=tpTop; - FAutoShowScrollButton:=true; - fCompStyle := csNoteBook; + FTabPosition:=tpTop; + FAutoShowScrollButton:=true; + fCompStyle := csNoteBook; - ControlStyle := [{csAcceptsControls, }csDesignInteractive]; - TabStop:=true; + ControlStyle := [{csAcceptsControls, }csDesignInteractive]; + TabStop:=true; - FPageList := TListWithEvent.Create; - FTabStrings := TGradTabPages.Create(TListWithEvent(FPageList), Self); - FPageIndex:=-1; + FPageList := TListWithEvent.Create; + FTabStrings := TGradTabPages.Create(TListWithEvent(FPageList), Self); + FPageIndex:=-1; - FTabHeight:=20; + FTabHeight:=20; - FPagesPopup := TPopupMenu.Create(Self); - FPagesPopup.OnPopup:=@PopupTabs; + FPagesPopup := TPopupMenu.Create(Self); + FPagesPopup.OnPopup:=@PopupTabs; - FBar := TGradTabBar.Create(Self); - FBar.Height:=FTabHeight; - FBar.Top:=0; - FBar.Left:=0; - FBar.Width:=Width; - FBar.Parent := Self; - //FBar.Align:=alTop; + FBar := TGradTabBar.Create(Self); + FBar.Height:=FTabHeight; + FBar.Top:=0; + FBar.Left:=0; + FBar.Width:=Width; + FBar.Parent := Self; + //FBar.Align:=alTop; - FMoveIncrement:=1; + FMoveIncrement:=1; - FLeftButton := TGradButton.Create(Self); - FLeftButton.Parent := FBar; - FLeftButton.Align:= alLeft; - FLeftButton.Caption:='<'; - FLeftButton.AutoWidth:=true; - FLeftButton.Visible := false; - FLeftButton.SetSubComponent(true); + FLeftButton := TGradButton.Create(Self); + FLeftButton.Parent := FBar; + FLeftButton.Align:= alLeft; + FLeftButton.Caption:='<'; + FLeftButton.AutoWidth:=true; + FLeftButton.Visible := false; + FLeftButton.SetSubComponent(true); - FRightButton := TGradButton.Create(Self); - FRightButton.Parent := FBar; - FRightButton.Align:= alRight; - FRightButton.Caption:='>'; - FRightButton.AutoWidth:=true; - FRightButton.Visible:= false; - FRightButton.SetSubComponent(true); + FRightButton := TGradButton.Create(Self); + FRightButton.Parent := FBar; + FRightButton.Align:= alRight; + FRightButton.Caption:='>'; + FRightButton.AutoWidth:=true; + FRightButton.Visible:= false; + FRightButton.SetSubComponent(true); - FPagesBar := TGradTabPagesBar.Create(Self,TListWithEvent(FPageList), Self); - FPagesBar.Parent:=FBar; - FPagesBar.Align:=alClient; - FPagesBar.Left:=0; - FPagesBar.Top:=0; - FPagesBar.Width:=FBar.Width; - FPagesBar.Height:=FBar.Height; + FPagesBar := TGradTabPagesBar.Create(Self,TListWithEvent(FPageList), Self); + FPagesBar.Parent:=FBar; + FPagesBar.Align:=alClient; + FPagesBar.Left:=0; + FPagesBar.Top:=0; + FPagesBar.Width:=FBar.Width; + FPagesBar.Height:=FBar.Height; - AssignEvents(FBar); - AssignEvents(FPagesBar); - //AssignEvents(FRightButton); - //AssignEvents(FLeftButton); + AssignEvents(FBar); + AssignEvents(FPagesBar); + //AssignEvents(FRightButton); + //AssignEvents(FLeftButton); - FLeftButton.OnClick:=@MoveLeftTopClick; - FRightButton.OnClick:=@MoveRightBottomClick; + FLeftButton.OnClick:=@MoveLeftTopClick; + FRightButton.OnClick:=@MoveRightBottomClick; - with FRightButton, FLeftButton do - begin - OnMouseUp:=nil; - OnMouseDown:=nil; - PopupMenu:=FPagesPopup; - end; + with FRightButton, FLeftButton do + begin + OnMouseUp:=nil; + OnMouseDown:=nil; + PopupMenu:=FPagesPopup; + end; - FRightButton.PopupMenu:=FPagesPopup; + FRightButton.PopupMenu:=FPagesPopup; - Height:=200; - Width:=200; + Height:=200; + Width:=200; + + FStyle := TGradTabStandardStyle.Create; end; {------------------------------------------------------------------------------ @@ -2190,11 +2291,41 @@ begin FPagesBar.ActiveTabColor:= AValue; end; +procedure TGradTabControl.SetCustomDraw(const AValue: Boolean); +begin + if FCustomDraw=AValue then exit; + FCustomDraw:=AValue; + + Invalidate; +end; + procedure TGradTabControl.SetNormalTabColor(const AValue: TColor); begin FPagesBar.NormalTabColor:=AValue; end; +procedure TGradTabControl.SetStyle(const AValue: TGradTabStyleBase); +begin + if FStyle = AValue then Exit; + if FStyle <> nil then + begin + FStyle.Free; + FStyle := nil; + end; + + FStyle := AValue; + + if FStyle = nil then + begin + FStyle := TGradTabStandardStyle.Create; + end; + + // Update all Tab Paintings + InvPaint; + PagesBar.NewStyle; + PagesBar.UpdateAllButtons; +end; + procedure TGradTabControl.SetTabPopupMenu(const AValue: TPopupMenu); var i : Integer; @@ -2439,13 +2570,13 @@ end; procedure TGradTabControl.SubMouseClick(Sender: TObject); begin if Assigned(OnClick) then - OnClick(Sender); + OnClick(Sender); end; procedure TGradTabControl.SubMouseDblClick(Sender: TObject); begin - if Assigned(OnDblClick) then - OnDblClick(Sender); + if Assigned(OnDblClick) then + OnDblClick(Sender); end; procedure TGradTabControl.SubMouseMove(Sender: TObject; Shift: TShiftState; X, @@ -2468,6 +2599,30 @@ begin OnDragDrop(Sender, Source, X, Y); end; +procedure TGradTabControl.StyleTabButton(Sender: TGradButton; + TargetCanvas: TCanvas; R: TRect; BState: TButtonState); +begin + if FStyle.HasTabButtonPaint then + FStyle.TabButton(Self, FPageList.IndexOf(Sender.Owner), Sender, + TargetCanvas, R, BState); +end; + +procedure TGradTabControl.StyleTabCloseButton(Sender: TGradButton; + TargetCanvas: TCanvas; R: TRect; BState: TButtonState); +begin + if FStyle.HasCloseButtonPaint then + FStyle.TabCloseButton(Self, FPageList.IndexOf(Sender.Owner), Sender, + TargetCanvas, R, BState); +end; + +procedure TGradTabControl.StyleTabButtonBorder(Sender: TGradButton; + TargetCanvas: TCanvas; R: TRect; BState: TButtonState); +begin + if FStyle.HasBorderButtonPaint then + FStyle.TabButtonBorder(Self, FPageList.IndexOf(Sender.Owner), Sender, + TargetCanvas, R, BState); +end; + procedure TGradTabControl.PopupTabs(Sender: TObject); var tempMenu : TMenuItem; @@ -2492,12 +2647,12 @@ end; procedure TGradTabControl.MoveLeftTopClick(Sender: TObject); begin - PagesBar.MoveToPrior; + PagesBar.MoveToPrior; end; procedure TGradTabControl.MoveRightBottomClick(Sender: TObject); begin - PagesBar.MoveToNext; + PagesBar.MoveToNext; end; {------------------------------------------------------------------------------ @@ -2738,10 +2893,10 @@ end; ------------------------------------------------------------------------------} procedure TGradTabControl.InvPaint; begin - if csDesigning in ComponentState then - Invalidate - else - Paint; + if csDesigning in ComponentState then + Invalidate + else + Paint; end; {------------------------------------------------------------------------------ @@ -2769,114 +2924,115 @@ end; ------------------------------------------------------------------------------} procedure TGradTabControl.SetTabPosition(Value : TTabPosition); var - tempSize : Integer; + tempSize : Integer; begin - FTabPosition:=Value; + FTabPosition:=Value; - tempSize:=FTabHeight; + tempSize:=FTabHeight; - {$IFDEF DEBUGTAB} - DebugLn('TGradTabControl.SetTabPosition Before'); - DebugLn('FBar Left %d Top %d Height %d Width %d',[ FBar.Left, Fbar.Top, FBar.Height, FBar.Width]); - DebugLn('FPagesBar Left %d Top %d Height %d Width %d',[ FPagesBar.Left, FPagesbar.Top, FPagesBar.Height, FPagesBar.Width]); - DebugLn('Control Left %d Top %d Height %d Width %d',[ Left, Top, Height, Width]); - {$ENDIF} + {$IFDEF DEBUGTAB} + DebugLn('TGradTabControl.SetTabPosition Before'); + DebugLn('FBar Left %d Top %d Height %d Width %d',[ FBar.Left, Fbar.Top, FBar.Height, FBar.Width]); + DebugLn('FPagesBar Left %d Top %d Height %d Width %d',[ FPagesBar.Left, FPagesbar.Top, FPagesBar.Height, FPagesBar.Width]); + DebugLn('Control Left %d Top %d Height %d Width %d',[ Left, Top, Height, Width]); + {$ENDIF} - FPagesBar.TabPosition:=Value; + FPagesBar.TabPosition:=Value; - case Value of - tpTop: begin - FBar.Height:=FTabHeight; - FBar.Top:=0; - FBar.Left:=0; - FBar.Width:=Width; - //FBar.Align:=alTop; - end; - tpLeft:begin - FBar.Height:=Height; - FBar.Top:=0; - FBar.Left:=0; - FBar.Width:=GetTabBarSize(tpLeft); - //FBar.Align:=alLeft; - end; - tpBottom:begin - FBar.Height:=tempSize; - FBar.Top:=Height-tempSize; - FBar.Left:=0; - FBar.Width:=Width; - //FBar.Align := alBottom; - end; - tpRight:begin - FBar.Left:=Width-GetTabBarSize(tpRight); - FBar.Top:=0; - FBar.Height:=Height; - FBar.Width:=GetTabBarSize(tpRight); - //FBar.Align:=alRight; - end; + case Value of + tpTop: begin + FBar.Height:=FTabHeight; + FBar.Top:=0; + FBar.Left:=0; + FBar.Width:=Width; + //FBar.Align:=alTop; end; - - //FPagesBar.Align:=alClient; - - case Value of - tpTop: begin - FLeftButton.Align:=alLeft; - FLeftButton.RotateDirection:=rdNormal; - FLeftButton.AutoWidth:=true; - FLeftButton.AutoHeight:=false; - FRightButton.Align:=alRight; - FRightButton.RotateDirection:=rdNormal; - FRightButton.AutoWidth:=true; - FRightButton.AutoHeight:=false; - //FBar.Align:=alTop; - end; - tpLeft:begin - FLeftButton.Align:=alTop; - FLeftButton.RotateDirection:=rdRight; - FLeftButton.AutoWidth:=false; - FLeftButton.AutoHeight:=true; - FRightButton.Align:=alBottom; - FRightButton.RotateDirection:=rdRight; - FRightButton.AutoWidth:=false; - FRightButton.AutoHeight:=true; - //FBar.Align:=alLeft; - end; - tpBottom:begin - FLeftButton.Align:=alLeft; - FLeftButton.RotateDirection:=rdNormal; - FLeftButton.AutoWidth:=true; - FLeftButton.AutoHeight:=false; - FRightButton.Align:=alRight; - FRightButton.RotateDirection:=rdNormal; - FRightButton.AutoWidth:=true; - FRightButton.AutoHeight:=false; - //FBar.Align := alBottom; - end; - tpRight:begin - FLeftButton.Align:=alTop; - FLeftButton.RotateDirection:=rdRight; - FLeftButton.AutoWidth:=false; - FLeftButton.AutoHeight:=true; - FRightButton.Align:=alBottom; - FRightButton.RotateDirection:=rdRight; - FRightButton.AutoWidth:=false; - FRightButton.AutoHeight:=true; - //FBar.Align:=alRight; - end; + tpLeft:begin + FBar.Height:=Height; + FBar.Top:=0; + FBar.Left:=0; + FBar.Width:=GetTabBarSize(tpLeft); + //FBar.Align:=alLeft; end; + tpBottom:begin + FBar.Height:=tempSize; + FBar.Top:=Height-tempSize; + FBar.Left:=0; + FBar.Width:=Width; + //FBar.Align := alBottom; + end; + tpRight:begin + FBar.Left:=Width-GetTabBarSize(tpRight); + FBar.Top:=0; + FBar.Height:=Height; + FBar.Width:=GetTabBarSize(tpRight); + //FBar.Align:=alRight; + end; + end; - if not FPagesBar.IsVisible(FPageIndex) then - FPagesBar.FocusButton(FPageIndex); + //FPagesBar.Align:=alClient; - {$IFDEF DEBUGTAB} - DebugLn('TGradTabControl.SetTabPosition After'); - DebugLn('FBar Left %d Top %d Height %d Width %d',[ FBar.Left, Fbar.Top, FBar.Height, FBar.Width]); - DebugLn('FPagesBar Left %d Top %d Height %d Width %d',[ FPagesBar.Left, FPagesbar.Top, FPagesBar.Height, FPagesBar.Width]); - DebugLn('Control Left %d Top %d Height %d Width %d',[ Left, Top, Height, Width]); - {$ENDIF} + case Value of + tpTop: begin + FLeftButton.Align:=alLeft; + FLeftButton.RotateDirection:=rdNormal; + FLeftButton.AutoWidth:=true; + FLeftButton.AutoHeight:=false; + FRightButton.Align:=alRight; + FRightButton.RotateDirection:=rdNormal; + FRightButton.AutoWidth:=true; + FRightButton.AutoHeight:=false; + //FBar.Align:=alTop; + end; + tpLeft:begin + FLeftButton.Align:=alTop; + FLeftButton.RotateDirection:=rdRight; + FLeftButton.AutoWidth:=false; + FLeftButton.AutoHeight:=true; + FRightButton.Align:=alBottom; + FRightButton.RotateDirection:=rdRight; + FRightButton.AutoWidth:=false; + FRightButton.AutoHeight:=true; + //FBar.Align:=alLeft; + end; + tpBottom:begin + FLeftButton.Align:=alLeft; + FLeftButton.RotateDirection:=rdNormal; + FLeftButton.AutoWidth:=true; + FLeftButton.AutoHeight:=false; + FRightButton.Align:=alRight; + FRightButton.RotateDirection:=rdNormal; + FRightButton.AutoWidth:=true; + FRightButton.AutoHeight:=false; + //FBar.Align := alBottom; + end; + tpRight:begin + FLeftButton.Align:=alTop; + FLeftButton.RotateDirection:=rdRight; + FLeftButton.AutoWidth:=false; + FLeftButton.AutoHeight:=true; + FRightButton.Align:=alBottom; + FRightButton.RotateDirection:=rdRight; + FRightButton.AutoWidth:=false; + FRightButton.AutoHeight:=true; + //FBar.Align:=alRight; + end; + end; - AlignPages; + if not FPagesBar.IsVisible(FPageIndex) then + FPagesBar.FocusButton(FPageIndex); - InvPaint; + {$IFDEF DEBUGTAB} + DebugLn('TGradTabControl.SetTabPosition After'); + DebugLn('FBar Left %d Top %d Height %d Width %d',[ FBar.Left, Fbar.Top, FBar.Height, FBar.Width]); + DebugLn('FPagesBar Left %d Top %d Height %d Width %d',[ FPagesBar.Left, FPagesbar.Top, FPagesBar.Height, FPagesBar.Width]); + DebugLn('Control Left %d Top %d Height %d Width %d',[ Left, Top, Height, Width]); + {$ENDIF} + + AlignPages; + + FPagesBar.UpdateAllButtons; + InvPaint; end; {------------------------------------------------------------------------------ @@ -2884,10 +3040,10 @@ end; ------------------------------------------------------------------------------} procedure TGradTabControl.SetLongTabs(Value : Boolean); begin - if FLongTabs=Value then Exit; - FLongTabs:=Value; + if FLongTabs=Value then Exit; + FLongTabs:=Value; - SetTabPosition(TabPosition); + SetTabPosition(TabPosition); end; {------------------------------------------------------------------------------ @@ -2978,46 +3134,8 @@ end; TGradTabControl Paint ------------------------------------------------------------------------------} procedure TGradTabControl.Paint; -var - AClientRect : TRect; begin - Canvas.Brush.Color:=Color; - Canvas.FillRect(0,0,Width,Height); - - Canvas.Pen.Color:=clBlack; - - {case FTabPosition of - tpTop: begin - Canvas.Line(0,FTabHeight,0,Height); - Canvas.Line(0,FTabHeight,Width,FTabHeight); - Canvas.Line(Width-1,FTabHeight,Width-1,Height); - Canvas.Line(0,Height-1,Width,Height-1); - end; - tpBottom: begin - Canvas.Line(0,0,0,Height-FTabHeight); - Canvas.Line(0,0,Width,0); //Top - Canvas.Line(Width-1,0,Width-1,Height-FTabHeight); - Canvas.Line(0,Height-FTabHeight-1,Width,Height-FTabHeight-1); - end; - tpRight: begin - Canvas.Line(0,0,0,Height); //Left - Canvas.Line(0,0,Width-GetTabBarSize(tpRight),0); //Top - Canvas.Line(Width-1-GetTabBarSize(tpRight),0,Width-1-GetTabBarSize(tpRight),Height); //Right - Canvas.Line(0,Height-1,Width-GetTabBarSize(tpRight),Height-1);//Bottom - end; - tpLeft: begin - Canvas.Line(GetTabBarSize(tpLeft),0,GetTabBarSize(tpLeft),Height); //Left - Canvas.Line(GetTabBarSize(tpLeft),0,Width,0); //Top - Canvas.Line(Width-1,0,Width-1,Height); //Right - Canvas.Line(GetTabBarSize(tpLeft),Height-1,Width,Height-1);//Bottom - end; - end;} - - AClientRect := GetClientRect; - - Canvas.Rectangle(AClientRect.Left-2, AClientRect.Top-2, - AClientRect.Right+2, AClientRect.Bottom+2); - + FStyle.TabControl(Self, Self.Canvas); end; {------------------------------------------------------------------------------ @@ -3025,17 +3143,17 @@ end; ------------------------------------------------------------------------------} procedure TGradTabControl.Resize; begin - inherited; + inherited; - {$IFDEF DEBUGTAB} - DebugLn('TGradTabControl.Resize HasParent %s FPageList.Count %d',[BoolToStr(HasParent,true), FPageList.Count]); - {$ENDIF} + {$IFDEF DEBUGTAB} + DebugLn('TGradTabControl.Resize HasParent %s FPageList.Count %d',[BoolToStr(HasParent,true), FPageList.Count]); + {$ENDIF} - if HasParent and (FPageList.Count<>0) then - AlignPage(GetCurrentPage, GetClientRect); + if HasParent and (FPageList.Count<>0) then + AlignPage(GetCurrentPage, GetClientRect); - case FTabPosition of + case FTabPosition of tpTop: begin FBar.Width:=Width; FBar.Top:=0;