diff --git a/components/gradcontrols/Readme.txt b/components/gradcontrols/Readme.txt index 71ac8f8b5..d712bc8dc 100644 --- a/components/gradcontrols/Readme.txt +++ b/components/gradcontrols/Readme.txt @@ -1,7 +1,11 @@ Package GradButton: -- Still some errors during loading / showing Glyphs +- Glyphs should be working now -The Package gradtabcontrol is atm to buggy to use it. +Package GradTabControl: +- Is now useable, or more or less, it should be =) +- with 2 CloseButton-Modes + - ShowCloseButton := true; // The CloseButton is always visible + - ShowCloseButtonOnMouseOver := true; // The CloseBUtton is only visible if the Mouse if is over it Some Glyphs are from http://www.famfamfam.com/lab/icons/silk/ diff --git a/components/gradcontrols/examples/Forms/unit1.lfm b/components/gradcontrols/examples/Forms/unit1.lfm index a2869ff72..83ae52fde 100644 --- a/components/gradcontrols/examples/Forms/unit1.lfm +++ b/components/gradcontrols/examples/Forms/unit1.lfm @@ -1,17 +1,18 @@ object Form1: TForm1 - Left = 292 + Left = 243 Height = 492 - Top = 130 + Top = 105 Width = 884 - Caption = 'Form1' + Caption = 'TGradTabControl-Testsuite' ClientHeight = 492 ClientWidth = 884 OnCreate = FormCreate OnDestroy = FormDestroy - ParentFont = False LCLVersion = '0.9.27' object Panel1: TPanel + Left = 0 Height = 492 + Top = 0 Width = 646 Align = alClient Caption = 'Panel1' @@ -24,181 +25,33 @@ object Form1: TForm1 Top = 1 Width = 644 Align = alClient - ControlStyle = [csAcceptsControls, csOwnedChildsSelectable] - ActivePage = GradTabPage2 + ActivePage = GradTabPage1 OnTabButtonMouseDown = GradTabControl1TabButtonMouseDown OnTabButtonMouseUp = GradTabControl1TabButtonMouseUp OnTabButtonMouseMove = GradTabControl1TabButtonMouseMove + OnTabCloseButtonClick = GradTabControl1TabCloseButtonClick OnDragDrop = GradTabControl1DragDrop OnDragOver = GradTabControl1DragOver OnMouseDown = GradTabControl1MouseDown OnMouseWheelUp = GradTabControl1MouseWheelUp OnMouseWheelDown = GradTabControl1MouseWheelDown - PageIndex = 1 + PageIndex = 0 TabHeight = 20 - MoveIncrement = 1 + LongTabs = False + LongWidth = 101 OnPageChanged = GradTabControl1PageChanged + ShowLeftTopScrollButton = False + ShowRightBottomScrollButton = False Images = ImageList1 - object GradTabPage1: TGradTabPage - Left = 2 - Height = 464 - Top = 22 - Width = 640 - Caption = 'abc' - Color = clGrayText - TabColor = clBlue - TabGlyph.Data = { - 36040000424D3604000000000000360000002800000010000000100000000100 - 20000000000000040000640000006400000000000000000000006E554E8D704E - 44A6683F35A51C0E0E1286C6DC2D6BC2E1995FBCDDB855B4D4D24CA9CAE843A0 - C0EA3E9CBCD5429EBFBC50A8C79F79B9D03B0000230000002300664E4982593D - 37706D4237706186964470D0F2F65FC7EBFF53BBDFFF47B0D4FF3CA4C8FF3099 - BDFF2890B4FF2990B5FF349CC0FF55B7D9FA85C9E14F00002300513C36266E4B - 428E4C2D266B76BBD26F6BD2F5FF5DBAD5FF51AFCDFF52ACC8FF4AA8C7FF45A3 - C3FF469FBCFF3D99B8FF409EBBFF4FB5D9FF7ACDEB820000230000000006583E - 357C603A30B57BAFC16D5EBBDBFC5EC1E3FF5ABBDCFF47B0D4FF3CA4C8FF3099 - BDFF2890B4FF3395B6FF42A2C4FF54B1D1FD7EC0D28800002300000023006948 - 3E835F39308E85CCE65A6BD2F6FF5FC7EBFF53BBDFFF47B0D4FF44A4C3FF3A9A - B7FF2890B4FF2990B5FF349CC0FF4EB6DAFF7DCCE67800002300000000075E3F - 386D5F382E6974B7CD7268C5E2FF55B0CDFF4EAFCEFF4AABCDFF43A9CCFF3DA3 - C7FF3DA0C1FF40A1C1FF49A4C3FF51AFCDFF7ACCE98200002300000000045E41 - 378A653E337785B8C45169C4E5FC60C7EBFF53BBDFFF47B0D4FF3CA4C8FF3099 - BDFF2890B4FF2990B5FF349CC0FF57B5D5FD87BBCC7700002300000023002C23 - 1A1D5132298A70B1C6716AD2F6FF60C7EAFF5CB7D3FF4FABC7FF42A1C0FF3B9B - B9FF3995B0FF3892AFFF369CBFFF4EB6DAFF7BCEE9810000230000000004704E - 44966C42379A7ABBCE715DB8D2FF50B2D4FF49B3D8FF44B0D4FF41A8CDFF39A0 - C4FF349DC2FF35A0C6FF40A5C6FF4FACC8FF7ECAE48600002300000000056244 - 3BB15030289F749DA8536CCDEEFB5FC7EBFF53BBDFFF47B0D4FF3CA4C8FF3099 - BDFF2890B4FF2990B5FF349CC0FF55B6D8FD82C0CD6C00002300000023006446 - 3D96472C245D7BC4DD6C6AD2F6FF60BDD9FF4FB0CDFF4AAAC8FF4CA8C4FF49A4 - C1FF3D9AB8FF3697B6FF409DBBFF4EB6DAFF7ACCE98200002300644E46806848 - 3F8E55352D7E84C5D96A5BBAD9FC59BEE1FF59B9DBFF50B1D3FF3CA4C8FF3099 - BDFF3193B5FF3999BBFF40A4C7FF50AFCFFD7CC3D787000023006B524A7C704C - 45895C392D6C7FC3DA4F6CD2F5FE5FC7EBFF53BBDFFF47B0D4FF3CA4C8FF3099 - BDFF2890B4FF2991B5FF349CC0FF4FB6DAFF82CDE56F00002300000000063622 - 1B264D2E28747DC6DF6C6BCCEBFF49AFCFFF3BA6C9FF34A2C5FF2E9EC3FF2D9D - C2FF2D9CBFFF2F9BBEFF369EC0FF50B2D2FF79CCEA8200002300000000096242 - 3ABC523228A47AA4B35537A2C3F3189FCFFF189FCFFF189FCFFF189FCFFF189F - CFFF189FCFFF189FCFFF189FCFFF2E9FC4F77BB8C86900002300000023007B53 - 4966674034941A00000A71A1A2243A9FBD9E319FC1BC2E9FC3D32B9EC4EA2B9F - C3EC2D9FC3D6309FC3BF37A0C0A45EA1AD310000230000002300 - } - object ToggleBox2: TToggleBox - Left = 357 - Height = 23 - Top = 155 - Width = 90 - Caption = 'ToggleBox2' - TabOrder = 0 - end - end - object GradTabPage4: TGradTabPage - Left = 2 - Height = 464 - Top = 22 - Width = 640 - PageIndex = 2 - Caption = 'äöü-test' - TabColor = clBlue - TabGlyph.Data = { - 36040000424D3604000000000000360000002800000010000000100000000100 - 20000000000000040000640000006400000000000000000000006E554E8D704E - 44A6683F35A51C0E0E1286C6DC2D6BC2E1995FBCDDB855B4D4D24CA9CAE843A0 - C0EA3E9CBCD5429EBFBC50A8C79F79B9D03B0000230000002300664E4982593D - 37706D4237706186964470D0F2F65FC7EBFF53BBDFFF47B0D4FF3CA4C8FF3099 - BDFF2890B4FF2990B5FF349CC0FF55B7D9FA85C9E14F00002300513C36266E4B - 428E4C2D266B76BBD26F6BD2F5FF5DBAD5FF51AFCDFF52ACC8FF4AA8C7FF45A3 - C3FF469FBCFF3D99B8FF409EBBFF4FB5D9FF7ACDEB820000230000000006583E - 357C603A30B57BAFC16D5EBBDBFC5EC1E3FF5ABBDCFF47B0D4FF3CA4C8FF3099 - BDFF2890B4FF3395B6FF42A2C4FF54B1D1FD7EC0D28800002300000023006948 - 3E835F39308E85CCE65A6BD2F6FF5FC7EBFF53BBDFFF47B0D4FF44A4C3FF3A9A - B7FF2890B4FF2990B5FF349CC0FF4EB6DAFF7DCCE67800002300000000075E3F - 386D5F382E6974B7CD7268C5E2FF55B0CDFF4EAFCEFF4AABCDFF43A9CCFF3DA3 - C7FF3DA0C1FF40A1C1FF49A4C3FF51AFCDFF7ACCE98200002300000000045E41 - 378A653E337785B8C45169C4E5FC60C7EBFF53BBDFFF47B0D4FF3CA4C8FF3099 - BDFF2890B4FF2990B5FF349CC0FF57B5D5FD87BBCC7700002300000023002C23 - 1A1D5132298A70B1C6716AD2F6FF60C7EAFF5CB7D3FF4FABC7FF42A1C0FF3B9B - B9FF3995B0FF3892AFFF369CBFFF4EB6DAFF7BCEE9810000230000000004704E - 44966C42379A7ABBCE715DB8D2FF50B2D4FF49B3D8FF44B0D4FF41A8CDFF39A0 - C4FF349DC2FF35A0C6FF40A5C6FF4FACC8FF7ECAE48600002300000000056244 - 3BB15030289F749DA8536CCDEEFB5FC7EBFF53BBDFFF47B0D4FF3CA4C8FF3099 - BDFF2890B4FF2990B5FF349CC0FF55B6D8FD82C0CD6C00002300000023006446 - 3D96472C245D7BC4DD6C6AD2F6FF60BDD9FF4FB0CDFF4AAAC8FF4CA8C4FF49A4 - C1FF3D9AB8FF3697B6FF409DBBFF4EB6DAFF7ACCE98200002300644E46806848 - 3F8E55352D7E84C5D96A5BBAD9FC59BEE1FF59B9DBFF50B1D3FF3CA4C8FF3099 - BDFF3193B5FF3999BBFF40A4C7FF50AFCFFD7CC3D787000023006B524A7C704C - 45895C392D6C7FC3DA4F6CD2F5FE5FC7EBFF53BBDFFF47B0D4FF3CA4C8FF3099 - BDFF2890B4FF2991B5FF349CC0FF4FB6DAFF82CDE56F00002300000000063622 - 1B264D2E28747DC6DF6C6BCCEBFF49AFCFFF3BA6C9FF34A2C5FF2E9EC3FF2D9D - C2FF2D9CBFFF2F9BBEFF369EC0FF50B2D2FF79CCEA8200002300000000096242 - 3ABC523228A47AA4B35537A2C3F3189FCFFF189FCFFF189FCFFF189FCFFF189F - CFFF189FCFFF189FCFFF189FCFFF2E9FC4F77BB8C86900002300000023007B53 - 4966674034941A00000A71A1A2243A9FBD9E319FC1BC2E9FC3D32B9EC4EA2B9F - C3EC2D9FC3D6309FC3BF37A0C0A45EA1AD310000230000002300 - } - end object GradTabPage3: TGradTabPage Left = 2 Height = 466 Top = 22 Width = 640 - PageIndex = 3 + PageIndex = 2 Caption = 'GradTabPage3' TabColor = clBlue - TabGlyph.Data = { - 36040000424D3604000000000000360000002800000010000000100000000100 - 20000000000000040000640000006400000000000000000000006E554E8D704E - 44A6683F35A51C0E0E1286C6DC2D6BC2E1995FBCDDB855B4D4D24CA9CAE843A0 - C0EA3E9CBCD5429EBFBC50A8C79F79B9D03B0000230000002300664E4982593D - 37706D4237706186964470D0F2F65FC7EBFF53BBDFFF47B0D4FF3CA4C8FF3099 - BDFF2890B4FF2990B5FF349CC0FF55B7D9FA85C9E14F00002300513C36266E4B - 428E4C2D266B76BBD26F6BD2F5FF5DBAD5FF51AFCDFF52ACC8FF4AA8C7FF45A3 - C3FF469FBCFF3D99B8FF409EBBFF4FB5D9FF7ACDEB820000230000000006583E - 357C603A30B57BAFC16D5EBBDBFC5EC1E3FF5ABBDCFF47B0D4FF3CA4C8FF3099 - BDFF2890B4FF3395B6FF42A2C4FF54B1D1FD7EC0D28800002300000023006948 - 3E835F39308E85CCE65A6BD2F6FF5FC7EBFF53BBDFFF47B0D4FF44A4C3FF3A9A - B7FF2890B4FF2990B5FF349CC0FF4EB6DAFF7DCCE67800002300000000075E3F - 386D5F382E6974B7CD7268C5E2FF55B0CDFF4EAFCEFF4AABCDFF43A9CCFF3DA3 - C7FF3DA0C1FF40A1C1FF49A4C3FF51AFCDFF7ACCE98200002300000000045E41 - 378A653E337785B8C45169C4E5FC60C7EBFF53BBDFFF47B0D4FF3CA4C8FF3099 - BDFF2890B4FF2990B5FF349CC0FF57B5D5FD87BBCC7700002300000023002C23 - 1A1D5132298A70B1C6716AD2F6FF60C7EAFF5CB7D3FF4FABC7FF42A1C0FF3B9B - B9FF3995B0FF3892AFFF369CBFFF4EB6DAFF7BCEE9810000230000000004704E - 44966C42379A7ABBCE715DB8D2FF50B2D4FF49B3D8FF44B0D4FF41A8CDFF39A0 - C4FF349DC2FF35A0C6FF40A5C6FF4FACC8FF7ECAE48600002300000000056244 - 3BB15030289F749DA8536CCDEEFB5FC7EBFF53BBDFFF47B0D4FF3CA4C8FF3099 - BDFF2890B4FF2990B5FF349CC0FF55B6D8FD82C0CD6C00002300000023006446 - 3D96472C245D7BC4DD6C6AD2F6FF60BDD9FF4FB0CDFF4AAAC8FF4CA8C4FF49A4 - C1FF3D9AB8FF3697B6FF409DBBFF4EB6DAFF7ACCE98200002300644E46806848 - 3F8E55352D7E84C5D96A5BBAD9FC59BEE1FF59B9DBFF50B1D3FF3CA4C8FF3099 - BDFF3193B5FF3999BBFF40A4C7FF50AFCFFD7CC3D787000023006B524A7C704C - 45895C392D6C7FC3DA4F6CD2F5FE5FC7EBFF53BBDFFF47B0D4FF3CA4C8FF3099 - BDFF2890B4FF2991B5FF349CC0FF4FB6DAFF82CDE56F00002300000000063622 - 1B264D2E28747DC6DF6C6BCCEBFF49AFCFFF3BA6C9FF34A2C5FF2E9EC3FF2D9D - C2FF2D9CBFFF2F9BBEFF369EC0FF50B2D2FF79CCEA8200002300000000096242 - 3ABC523228A47AA4B35537A2C3F3189FCFFF189FCFFF189FCFFF189FCFFF189F - CFFF189FCFFF189FCFFF189FCFFF2E9FC4F77BB8C86900002300000023007B53 - 4966674034941A00000A71A1A2243A9FBD9E319FC1BC2E9FC3D32B9EC4EA2B9F - C3EC2D9FC3D6309FC3BF37A0C0A45EA1AD310000230000002300 - } - object Button3: TButton - Left = 99 - Height = 25 - Top = 71 - Width = 75 - Caption = 'Button3' - TabOrder = 0 - end - end - object GradTabPage2: TGradTabPage - Left = 2 - Height = 466 - Top = 22 - Width = 640 - PageIndex = 1 - Caption = 'GradTabPage2' - TabPopupMenu = PopupMenu1 - TabColor = clGreen + TabTextAlignment = taLeftJustify TabGlyph.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 20000000000000040000640000006400000000000000000000006E554E8D704E @@ -236,41 +89,117 @@ object Form1: TForm1 C3EC2D9FC3D6309FC3BF37A0C0A45EA1AD310000230000002300 } TabShowGlyph = True - object PageControl1: TPageControl - Left = 173 - Height = 200 - Top = 57 - Width = 200 - ActivePage = TabSheet3 - TabIndex = 2 + TabButtonLayout = blGlyphLeft + end + object GradTabPage2: TGradTabPage + Left = 2 + Height = 466 + Top = 22 + Width = 640 + PageIndex = 1 + Caption = 'GradTabPage2' + ShowCloseButton = True + TabColor = clBlue + TabTextAlignment = taLeftJustify + TabGlyph.Data = { + 36040000424D3604000000000000360000002800000010000000100000000100 + 20000000000000040000640000006400000000000000000000006E554E8D704E + 44A6683F35A51C0E0E1286C6DC2D6BC2E1995FBCDDB855B4D4D24CA9CAE843A0 + C0EA3E9CBCD5429EBFBC50A8C79F79B9D03B0000230000002300664E4982593D + 37706D4237706186964470D0F2F65FC7EBFF53BBDFFF47B0D4FF3CA4C8FF3099 + BDFF2890B4FF2990B5FF349CC0FF55B7D9FA85C9E14F00002300513C36266E4B + 428E4C2D266B76BBD26F6BD2F5FF5DBAD5FF51AFCDFF52ACC8FF4AA8C7FF45A3 + C3FF469FBCFF3D99B8FF409EBBFF4FB5D9FF7ACDEB820000230000000006583E + 357C603A30B57BAFC16D5EBBDBFC5EC1E3FF5ABBDCFF47B0D4FF3CA4C8FF3099 + BDFF2890B4FF3395B6FF42A2C4FF54B1D1FD7EC0D28800002300000023006948 + 3E835F39308E85CCE65A6BD2F6FF5FC7EBFF53BBDFFF47B0D4FF44A4C3FF3A9A + B7FF2890B4FF2990B5FF349CC0FF4EB6DAFF7DCCE67800002300000000075E3F + 386D5F382E6974B7CD7268C5E2FF55B0CDFF4EAFCEFF4AABCDFF43A9CCFF3DA3 + C7FF3DA0C1FF40A1C1FF49A4C3FF51AFCDFF7ACCE98200002300000000045E41 + 378A653E337785B8C45169C4E5FC60C7EBFF53BBDFFF47B0D4FF3CA4C8FF3099 + BDFF2890B4FF2990B5FF349CC0FF57B5D5FD87BBCC7700002300000023002C23 + 1A1D5132298A70B1C6716AD2F6FF60C7EAFF5CB7D3FF4FABC7FF42A1C0FF3B9B + B9FF3995B0FF3892AFFF369CBFFF4EB6DAFF7BCEE9810000230000000004704E + 44966C42379A7ABBCE715DB8D2FF50B2D4FF49B3D8FF44B0D4FF41A8CDFF39A0 + C4FF349DC2FF35A0C6FF40A5C6FF4FACC8FF7ECAE48600002300000000056244 + 3BB15030289F749DA8536CCDEEFB5FC7EBFF53BBDFFF47B0D4FF3CA4C8FF3099 + BDFF2890B4FF2990B5FF349CC0FF55B6D8FD82C0CD6C00002300000023006446 + 3D96472C245D7BC4DD6C6AD2F6FF60BDD9FF4FB0CDFF4AAAC8FF4CA8C4FF49A4 + C1FF3D9AB8FF3697B6FF409DBBFF4EB6DAFF7ACCE98200002300644E46806848 + 3F8E55352D7E84C5D96A5BBAD9FC59BEE1FF59B9DBFF50B1D3FF3CA4C8FF3099 + BDFF3193B5FF3999BBFF40A4C7FF50AFCFFD7CC3D787000023006B524A7C704C + 45895C392D6C7FC3DA4F6CD2F5FE5FC7EBFF53BBDFFF47B0D4FF3CA4C8FF3099 + BDFF2890B4FF2991B5FF349CC0FF4FB6DAFF82CDE56F00002300000000063622 + 1B264D2E28747DC6DF6C6BCCEBFF49AFCFFF3BA6C9FF34A2C5FF2E9EC3FF2D9D + C2FF2D9CBFFF2F9BBEFF369EC0FF50B2D2FF79CCEA8200002300000000096242 + 3ABC523228A47AA4B35537A2C3F3189FCFFF189FCFFF189FCFFF189FCFFF189F + CFFF189FCFFF189FCFFF189FCFFF2E9FC4F77BB8C86900002300000023007B53 + 4966674034941A00000A71A1A2243A9FBD9E319FC1BC2E9FC3D32B9EC4EA2B9F + C3EC2D9FC3D6309FC3BF37A0C0A45EA1AD310000230000002300 + } + TabShowGlyph = True + TabButtonLayout = blGlyphLeft + end + object GradTabPage1: TGradTabPage + Left = 2 + Height = 466 + Top = 22 + Width = 640 + PageIndex = 0 + Caption = 'Some Memo' + ShowCloseButton = True + Color = clGrayText + TabColor = clGreen + TabTextAlignment = taLeftJustify + TabGlyph.Data = { + 36040000424D3604000000000000360000002800000010000000100000000100 + 20000000000000040000640000006400000000000000000000006E554E8D704E + 44A6683F35A51C0E0E1286C6DC2D6BC2E1995FBCDDB855B4D4D24CA9CAE843A0 + C0EA3E9CBCD5429EBFBC50A8C79F79B9D03B0000230000002300664E4982593D + 37706D4237706186964470D0F2F65FC7EBFF53BBDFFF47B0D4FF3CA4C8FF3099 + BDFF2890B4FF2990B5FF349CC0FF55B7D9FA85C9E14F00002300513C36266E4B + 428E4C2D266B76BBD26F6BD2F5FF5DBAD5FF51AFCDFF52ACC8FF4AA8C7FF45A3 + C3FF469FBCFF3D99B8FF409EBBFF4FB5D9FF7ACDEB820000230000000006583E + 357C603A30B57BAFC16D5EBBDBFC5EC1E3FF5ABBDCFF47B0D4FF3CA4C8FF3099 + BDFF2890B4FF3395B6FF42A2C4FF54B1D1FD7EC0D28800002300000023006948 + 3E835F39308E85CCE65A6BD2F6FF5FC7EBFF53BBDFFF47B0D4FF44A4C3FF3A9A + B7FF2890B4FF2990B5FF349CC0FF4EB6DAFF7DCCE67800002300000000075E3F + 386D5F382E6974B7CD7268C5E2FF55B0CDFF4EAFCEFF4AABCDFF43A9CCFF3DA3 + C7FF3DA0C1FF40A1C1FF49A4C3FF51AFCDFF7ACCE98200002300000000045E41 + 378A653E337785B8C45169C4E5FC60C7EBFF53BBDFFF47B0D4FF3CA4C8FF3099 + BDFF2890B4FF2990B5FF349CC0FF57B5D5FD87BBCC7700002300000023002C23 + 1A1D5132298A70B1C6716AD2F6FF60C7EAFF5CB7D3FF4FABC7FF42A1C0FF3B9B + B9FF3995B0FF3892AFFF369CBFFF4EB6DAFF7BCEE9810000230000000004704E + 44966C42379A7ABBCE715DB8D2FF50B2D4FF49B3D8FF44B0D4FF41A8CDFF39A0 + C4FF349DC2FF35A0C6FF40A5C6FF4FACC8FF7ECAE48600002300000000056244 + 3BB15030289F749DA8536CCDEEFB5FC7EBFF53BBDFFF47B0D4FF3CA4C8FF3099 + BDFF2890B4FF2990B5FF349CC0FF55B6D8FD82C0CD6C00002300000023006446 + 3D96472C245D7BC4DD6C6AD2F6FF60BDD9FF4FB0CDFF4AAAC8FF4CA8C4FF49A4 + C1FF3D9AB8FF3697B6FF409DBBFF4EB6DAFF7ACCE98200002300644E46806848 + 3F8E55352D7E84C5D96A5BBAD9FC59BEE1FF59B9DBFF50B1D3FF3CA4C8FF3099 + BDFF3193B5FF3999BBFF40A4C7FF50AFCFFD7CC3D787000023006B524A7C704C + 45895C392D6C7FC3DA4F6CD2F5FE5FC7EBFF53BBDFFF47B0D4FF3CA4C8FF3099 + BDFF2890B4FF2991B5FF349CC0FF4FB6DAFF82CDE56F00002300000000063622 + 1B264D2E28747DC6DF6C6BCCEBFF49AFCFFF3BA6C9FF34A2C5FF2E9EC3FF2D9D + C2FF2D9CBFFF2F9BBEFF369EC0FF50B2D2FF79CCEA8200002300000000096242 + 3ABC523228A47AA4B35537A2C3F3189FCFFF189FCFFF189FCFFF189FCFFF189F + CFFF189FCFFF189FCFFF189FCFFF2E9FC4F77BB8C86900002300000023007B53 + 4966674034941A00000A71A1A2243A9FBD9E319FC1BC2E9FC3D32B9EC4EA2B9F + C3EC2D9FC3D6309FC3BF37A0C0A45EA1AD310000230000002300 + } + TabShowGlyph = True + TabButtonLayout = blGlyphLeft + object Memo1: TMemo + Left = 312 + Height = 466 + Top = 0 + Width = 328 + Align = alRight + Lines.Strings = ( + 'Some Memo' + 'alRight' + ) TabOrder = 0 - OnDragDrop = PageControl1DragDrop - OnDragOver = PageControl1DragOver - object TabSheet1: TTabSheet - Caption = 'TabSheet1' - end - object TabSheet2: TTabSheet - Caption = 'TabSheet2' - end - object TabSheet3: TTabSheet - Caption = 'TabSheet3' - end - end - object Button2: TButton - Left = 47 - Height = 25 - Top = 28 - Width = 75 - Caption = 'Button2' - TabOrder = 1 - end - object Panel3: TPanel - Left = 429 - Height = 50 - Top = 89 - Width = 170 - Caption = 'Panel3' - TabOrder = 2 end end end @@ -278,6 +207,7 @@ object Form1: TForm1 object Panel2: TPanel Left = 646 Height = 492 + Top = 0 Width = 238 Align = alRight ClientHeight = 492 @@ -285,18 +215,18 @@ object Form1: TForm1 TabOrder = 1 object Label1: TLabel Left = 16 - Height = 14 + Height = 16 Top = 160 - Width = 50 + Width = 57 Caption = 'TabHeight' ParentColor = False end object ComboBox1: TComboBox Left = 16 - Height = 21 + Height = 23 Top = 16 Width = 100 - ItemHeight = 13 + ItemHeight = 15 OnChange = ComboBox1Change Style = csDropDownList TabOrder = 0 @@ -356,8 +286,10 @@ object Form1: TForm1 OverBlendColor = clSilver BackgroundColor = clBtnFace ShowFocusBorder = True + ShowGlyph = False GlyphBackgroundColor = clWhite ClickColor = clBlue + OwnerBackgroundDraw = False AutoWidthBorderSpacing = 15 AutoHeightBorderSpacing = 15 end @@ -379,14 +311,16 @@ object Form1: TForm1 OverBlendColor = clSilver BackgroundColor = clBtnFace ShowFocusBorder = True + ShowGlyph = False GlyphBackgroundColor = clWhite ClickColor = clBlue + OwnerBackgroundDraw = False AutoWidthBorderSpacing = 15 AutoHeightBorderSpacing = 15 end object SpinEdit2: TSpinEdit Left = 16 - Height = 19 + Height = 25 Top = 176 Width = 100 OnEditingDone = SpinEdit2EditingDone @@ -394,7 +328,7 @@ object Form1: TForm1 end object Edit1: TEdit Left = 16 - Height = 19 + Height = 25 Top = 136 Width = 72 TabOrder = 6 @@ -418,8 +352,10 @@ object Form1: TForm1 OverBlendColor = clSilver BackgroundColor = clBtnFace ShowFocusBorder = True + ShowGlyph = False GlyphBackgroundColor = clWhite ClickColor = clBlue + OwnerBackgroundDraw = False AutoWidthBorderSpacing = 15 AutoHeightBorderSpacing = 15 end @@ -450,6 +386,33 @@ object Form1: TForm1 03000000030202 } end + object RadioGroup2: TRadioGroup + Left = 130 + Height = 105 + Top = 256 + Width = 100 + AutoFill = True + Caption = 'Tab Button Layout' + ChildSizing.LeftRightSpacing = 6 + ChildSizing.TopBottomSpacing = 6 + ChildSizing.EnlargeHorizontal = crsHomogenousChildResize + ChildSizing.EnlargeVertical = crsHomogenousChildResize + ChildSizing.ShrinkHorizontal = crsScaleChilds + ChildSizing.ShrinkVertical = crsScaleChilds + ChildSizing.Layout = cclLeftToRightThenTopToBottom + ChildSizing.ControlsPerLine = 1 + ClientHeight = 87 + ClientWidth = 96 + ItemIndex = 0 + Items.Strings = ( + 'blGlyphLeft' + 'blGlyphBottom' + 'blGlyphRight' + 'blGlyphTop' + ) + OnClick = RadioGroup2Click + TabOrder = 9 + end end object PopupMenu1: TPopupMenu left = 734 @@ -460,7 +423,6 @@ object Form1: TForm1 end end object ImageList1: TImageList - OnChange = nil left = 656 top = 397 Bitmap = { diff --git a/components/gradcontrols/examples/Forms/unit1.lrs b/components/gradcontrols/examples/Forms/unit1.lrs index 489988cee..15709adee 100644 --- a/components/gradcontrols/examples/Forms/unit1.lrs +++ b/components/gradcontrols/examples/Forms/unit1.lrs @@ -1,292 +1,251 @@ -{ Das ist eine automatisch erzeugte Lazarus-Ressourcendatei } +{ This is an automatically generated lazarus resource file } LazarusResources.Add('TForm1','FORMDATA',[ - 'TPF0'#6'TForm1'#5'Form1'#4'Left'#3'$'#1#6'Height'#3#236#1#3'Top'#3#130#0#5'W' - +'idth'#3't'#3#7'Caption'#6#5'Form1'#12'ClientHeight'#3#236#1#11'ClientWidth' - +#3't'#3#8'OnCreate'#7#10'FormCreate'#9'OnDestroy'#7#11'FormDestroy'#10'Paren' - +'tFont'#8#10'LCLVersion'#6#6'0.9.27'#0#6'TPanel'#6'Panel1'#6'Height'#3#236#1 - +#5'Width'#3#134#2#5'Align'#7#8'alClient'#7'Caption'#6#6'Panel1'#12'ClientHei' - +'ght'#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'#12'ControlStyle'#11#17'csAcceptsControls'#23'csOwn' - +'edChildsSelectable'#0#10'ActivePage'#7#12'GradTabPage2'#20'OnTabButtonMouse' - +'Down'#7'!GradTabControl1TabButtonMouseDown'#18'OnTabButtonMouseUp'#7#31'Gra' - +'dTabControl1TabButtonMouseUp'#20'OnTabButtonMouseMove'#7'!GradTabControl1Ta' - +'bButtonMouseMove'#10'OnDragDrop'#7#23'GradTabControl1DragDrop'#10'OnDragOve' - +'r'#7#23'GradTabControl1DragOver'#11'OnMouseDown'#7#24'GradTabControl1MouseD' - +'own'#14'OnMouseWheelUp'#7#27'GradTabControl1MouseWheelUp'#16'OnMouseWheelDo' - +'wn'#7#29'GradTabControl1MouseWheelDown'#9'PageIndex'#2#1#9'TabHeight'#2#20 - +#13'MoveIncrement'#2#1#13'OnPageChanged'#7#26'GradTabControl1PageChanged'#6 - +'Images'#7#10'ImageList1'#0#12'TGradTabPage'#12'GradTabPage1'#4'Left'#2#2#6 - +'Height'#3#208#1#3'Top'#2#22#5'Width'#3#128#2#7'Caption'#6#3'abc'#5'Color'#7 - +#10'clGrayText'#8'TabColor'#7#6'clBlue'#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&nK' - +'B'#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#0#10'TToggleBox'#10'ToggleBox2'#4'Left' - +#3'e'#1#6'Height'#2#23#3'Top'#3#155#0#5'Width'#2'Z'#7'Caption'#6#10'ToggleBo' - +'x2'#8'TabOrder'#2#0#0#0#0#12'TGradTabPage'#12'GradTabPage4'#4'Left'#2#2#6'H' - +'eight'#3#208#1#3'Top'#2#22#5'Width'#3#128#2#9'PageIndex'#2#2#7'Caption'#6#11 - +#195#164#195#182#195#188'-test'#8'TabColor'#7#6'clBlue'#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#0#0#12'TGradTabPage'#12'GradTabPage' - +'3'#4'Left'#2#2#6'Height'#3#210#1#3'Top'#2#22#5'Width'#3#128#2#9'PageIndex'#2 - +#3#7'Caption'#6#12'GradTabPage3'#8'TabColor'#7#6'clBlue'#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#0#7'TButton'#7'Button3'#4'Left'#2'c' - +#6'Height'#2#25#3'Top'#2'G'#5'Width'#2'K'#7'Caption'#6#7'Button3'#8'TabOrder' - +#2#0#0#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'#12 - +'TabPopupMenu'#7#10'PopupMenu1'#8'TabColor'#7#7'clGreen'#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#0#12'TPageContro' - +'l'#12'PageControl1'#4'Left'#3#173#0#6'Height'#3#200#0#3'Top'#2'9'#5'Width'#3 - +#200#0#10'ActivePage'#7#9'TabSheet3'#8'TabIndex'#2#2#8'TabOrder'#2#0#10'OnDr' - +'agDrop'#7#20'PageControl1DragDrop'#10'OnDragOver'#7#20'PageControl1DragOver' - +#0#9'TTabSheet'#9'TabSheet1'#7'Caption'#6#9'TabSheet1'#0#0#9'TTabSheet'#9'Ta' - +'bSheet2'#7'Caption'#6#9'TabSheet2'#0#0#9'TTabSheet'#9'TabSheet3'#7'Caption' - +#6#9'TabSheet3'#0#0#0#7'TButton'#7'Button2'#4'Left'#2'/'#6'Height'#2#25#3'To' - +'p'#2#28#5'Width'#2'K'#7'Caption'#6#7'Button2'#8'TabOrder'#2#1#0#0#6'TPanel' - +#6'Panel3'#4'Left'#3#173#1#6'Height'#2'2'#3'Top'#2'Y'#5'Width'#3#170#0#7'Cap' - +'tion'#6#6'Panel3'#8'TabOrder'#2#2#0#0#0#0#0#6'TPanel'#6'Panel2'#4'Left'#3 - +#134#2#6'Height'#3#236#1#5'Width'#3#238#0#5'Align'#7#7'alRight'#12'ClientHei' - +'ght'#3#236#1#11'ClientWidth'#3#238#0#8'TabOrder'#2#1#0#6'TLabel'#6'Label1'#4 - +'Left'#2#16#6'Height'#2#14#3'Top'#3#160#0#5'Width'#2'2'#7'Caption'#6#9'TabHe' - +'ight'#11'ParentColor'#8#0#0#9'TComboBox'#9'ComboBox1'#4'Left'#2#16#6'Height' - +#2#21#3'Top'#2#16#5'Width'#2'd'#10'ItemHeight'#2#13#8'OnChange'#7#15'ComboBo' - +'x1Change'#5'Style'#7#14'csDropDownList'#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.TopBottomSpacing'#2#6#29'ChildSizing.EnlargeHorizontal'#7 + '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 + +#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#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#12'Clien' - +'tHeight'#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'RadioGroup1' - +'Click'#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'On' - +'Click'#7#14'CheckBox1Click'#8'TabOrder'#2#2#0#0#11'TGradButton'#10'NewPageB' - +'tn'#4'Left'#2#16#6'Height'#2#25#3'Top'#2'0'#5'Width'#2'd'#7'Caption'#6#8'Ne' - +'w Page'#10'Font.Color'#7#7'clWhite'#7'OnClick'#7#15'NewPageBtnClick'#8'TabO' - +'rder'#2#3#7'TabStop'#9#11'NormalBlend'#5#0#0#0#0#0#0#0#128#254'?'#9'OverBle' - +'nd'#5'5^'#186'I'#12#2'+'#167#254'?'#9'BaseColor'#7#6'clBlue'#5'Color'#7#6'c' - +'lBlue'#16'NormalBlendColor'#7#7'clWhite'#14'OverBlendColor'#7#8'clSilver'#15 - +'BackgroundColor'#7#9'clBtnFace'#15'ShowFocusBorder'#9#20'GlyphBackgroundCol' - +'or'#7#7'clWhite'#10'ClickColor'#7#6'clBlue'#22'AutoWidthBorderSpacing'#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'TabSt' - +'op'#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'NormalB' - +'lendColor'#7#7'clWhite'#14'OverBlendColor'#7#8'clSilver'#15'BackgroundColor' - +#7#9'clBtnFace'#15'ShowFocusBorder'#9#20'GlyphBackgroundColor'#7#7'clWhite' - +#10'ClickColor'#7#6'clBlue'#22'AutoWidthBorderSpacing'#2#15#23'AutoHeightBor' - +'derSpacing'#2#15#0#0#9'TSpinEdit'#9'SpinEdit2'#4'Left'#2#16#6'Height'#2#19#3 - ,'Top'#3#176#0#5'Width'#2'd'#13'OnEditingDone'#7#20'SpinEdit2EditingDone'#8'T' - +'abOrder'#2#5#0#0#5'TEdit'#5'Edit1'#4'Left'#2#16#6'Height'#2#19#3'Top'#3#136 - +#0#5'Width'#2'H'#8'TabOrder'#2#6#4'Text'#6#5'Edit1'#0#0#11'TGradButton'#11'G' - +'radButton1'#4'Left'#2'Z'#6'Height'#2#19#3'Top'#3#136#0#5'Width'#2#26#7'Capt' - +'ion'#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'O' - +'verBlend'#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'clSilv' - +'er'#15'BackgroundColor'#7#9'clBtnFace'#15'ShowFocusBorder'#9#20'GlyphBackgr' - +'oundColor'#7#7'clWhite'#10'ClickColor'#7#6'clBlue'#22'AutoWidthBorderSpacin' - +'g'#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'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#13'Items.Strings' - +#1#6#4'Auto'#6#7'LeftTop'#6#11'RightBottom'#0#7'OnClick'#7#16'CheckGroup1Cli' - +'ck'#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#0#10'TPopupMenu'#10'PopupMenu1'#4'left'#3#222#2#3't' - +'op'#3#141#1#0#9'TMenuItem'#9'MenuItem1'#3'Tag'#4#152''#18#0#7'Caption'#6#9 - +'New Item1'#0#0#0#10'TImageList'#10'ImageList1'#8'OnChange'#13#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 + +'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' @@ -298,7 +257,7 @@ LazarusResources.Add('TForm1','FORMDATA',[ +#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 + ,#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 @@ -321,7 +280,7 @@ LazarusResources.Add('TForm1','FORMDATA',[ +#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 + +#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 13effc5a2..d03329a89 100644 --- a/components/gradcontrols/examples/Forms/unit1.pas +++ b/components/gradcontrols/examples/Forms/unit1.pas @@ -7,7 +7,7 @@ interface uses Classes, SysUtils, LResources, Forms, Controls, Graphics, Dialogs, ExtCtrls, ugradbtn, StdCtrls, ComCtrls, LCLType, LCLProc, LCLIntf, Buttons, ugradtabcontrol, - Menus, Spin, EditBtn; + Menus, Spin, EditBtn, types; type @@ -18,8 +18,6 @@ type { TForm1 } TForm1 = class(TForm) - Button2: TButton; - Button3: TButton; CheckBox1: TCheckBox; CheckGroup1: TCheckGroup; ComboBox1: TComboBox; @@ -28,25 +26,20 @@ type GradTabPage1: TGradTabPage; GradTabPage2: TGradTabPage; GradTabPage3: TGradTabPage; - GradTabPage4: TGradTabPage; ImageList1: TImageList; Label1: TLabel; + Memo1: TMemo; NewPageBtn: TGradButton; DeleteBtn: TGradButton; GradTabControl1: TGradTabControl; Memo2: TMemo; MenuItem1: TMenuItem; - PageControl1: TPageControl; Panel1: TPanel; Panel2: TPanel; - Panel3: TPanel; PopupMenu1: TPopupMenu; RadioGroup1: TRadioGroup; + RadioGroup2: TRadioGroup; SpinEdit2: TSpinEdit; - TabSheet1: TTabSheet; - TabSheet2: TTabSheet; - TabSheet3: TTabSheet; - ToggleBox2: TToggleBox; procedure CheckBox1Click(Sender: TObject); procedure CheckGroup1Click(Sender: TObject); procedure CheckGroup1ItemClick(Sender: TObject; Index: integer); @@ -73,12 +66,11 @@ type ); procedure GradTabControl1TabButtonMouseUp(GradTabControl: TGradTabControl; Button: TMouseButton; Shift: TShiftState; X, Y, AIndex: Integer); - procedure ImageList1Change(Sender: TObject); + procedure GradTabControl1TabCloseButtonClick( + GradTabControl: TGradTabControl; AIndex: Integer); procedure NewPageBtnClick(Sender: TObject); - procedure PageControl1DragDrop(Sender, Source: TObject; X, Y: Integer); - procedure PageControl1DragOver(Sender, Source: TObject; X, Y: Integer; - State: TDragState; var Accept: Boolean); procedure RadioGroup1Click(Sender: TObject); + procedure RadioGroup2Click(Sender: TObject); procedure SpinEdit2EditingDone(Sender: TObject); private { private declarations } @@ -216,12 +208,19 @@ begin B := Random(255)+1; //WriteLn(R, ' ', G, ' ', B, ColorToString(RGBToColor(R,G,B))); - GradTabControl1.ActivePage.Caption:='tab_'+IntToStr(C); - //GradTabControl1.CurrentPage.Color:=RGBToColor(R, G, B); - GradTabControl1.ActivePage.TabPopupMenu := PopupMenu1; - GradTabControl1.ActivePage.PopupMenu:= PopupMenu1; + with GradTabControl1.ActivePage do + begin + Caption:='tab_'+IntToStr(C); + TabPopupMenu := PopupMenu1; + PopupMenu:= PopupMenu1; + ImageIndex:=0; + TabShowGlyph:=true; + ShowCloseButton:=true; + ShowCloseButtonOnMouseOver:=true; + end; ComboBox1.ItemIndex:=ComboBox1.Items.Add('tab_'+IntToStr(C)); + RadioGroup2Click(nil); end; procedure TForm1.GradTabControl1DragOver(Sender, Source: TObject; X, @@ -232,13 +231,13 @@ var begin //DebugLn('Name=%s',[Sender.ClassName]); Accept := false; - if (Sender is TGradTabPageButton) then Accept := True; + if (Sender is TGradTabPageButton) OR (Sender is TGradTabPagesBar) then Accept := True; end; procedure TForm1.GradTabControl1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin - DebugLn('MouseDown on %s',[Sender.ClassName]); + //DebugLn('MouseDown on %s',[Sender.ClassName]); end; procedure TForm1.GradTabControl1MouseWheelDown(Sender: TObject; @@ -293,51 +292,39 @@ begin if Button=mbMiddle then begin //GradTabControl.Tabs.Delete(AIndex); + ComboBox1.Items.Delete(ComboBox1.Items.IndexOf(GradTabControl.Page[AIndex].Caption)); GradTabControl.Page[AIndex].Free; end; end; -procedure TForm1.ImageList1Change(Sender: TObject); +procedure TForm1.GradTabControl1TabCloseButtonClick( + GradTabControl: TGradTabControl; AIndex: Integer); begin - -end; - -procedure TForm1.PageControl1DragDrop(Sender, Source: TObject; X, Y: Integer); -const - TCM_GETITEMRECT = $130A; -var - TabRect: TRect; - j: Integer; -begin - if (Sender is TGradTabControl) then - for j := 0 to GradTabControl1.PageCount - 1 do - begin - //GradTabControl1.Perform(TCM_GETITEMRECT, j, LParam(@TabRect)) ; - TabRect := GradTabControl1.GetTabRect(j); - DebugLn('X=%d Y=%d T.L=%d T.T=%d T.R=%d T.B=%d',[X,Y,TabRect.Left, TabRect.Top, TabRect.Right, TabRect.Bottom]); - if PtInRect(TabRect, Point(X, Y)) then - begin - if GradTabControl1.ActivePage.PageIndex <> j then - GradTabControl1.ActivePage.PageIndex := j; - Exit; - end; - end; -end; - -procedure TForm1.PageControl1DragOver(Sender, Source: TObject; X, Y: Integer; - State: TDragState; var Accept: Boolean); -begin - DebugLn('Name=%s',[Sender.ClassName]); - if (Sender is TGradTabControl) then Accept := True; + ComboBox1.Items.Delete(ComboBox1.Items.IndexOf(GradTabControl.Page[AIndex].Caption)); + GradTabControl.Page[AIndex].Free; end; procedure TForm1.RadioGroup1Click(Sender: TObject); begin case RadioGroup1.ItemIndex of - 0: GradTabControl1.TabPosition := tpTop; - 1: GradTabControl1.TabPosition := tpBottom; - 2: GradTabControl1.TabPosition := tpLeft; - 3: GradTabControl1.TabPosition := tpRight; + 0: GradTabControl1.TabPosition := tpTop; + 1: GradTabControl1.TabPosition := tpBottom; + 2: GradTabControl1.TabPosition := tpLeft; + 3: GradTabControl1.TabPosition := tpRight; + end; +end; + +procedure TForm1.RadioGroup2Click(Sender: TObject); +var + i : Integer; +begin + for i := 0 to GradTabControl1.PageCount - 1 do + with GradTabControl1.Page[i] do + case RadioGroup2.ItemIndex of + 0: TabButtonLayout := blGlyphLeft; + 1: TabButtonLayout := blGlyphBottom; + 2: TabButtonLayout := blGlyphRight; + 3: TabButtonLayout := blGlyphTop; end; end; diff --git a/components/gradcontrols/examples/gradbuttontest.lpi b/components/gradcontrols/examples/gradbuttontest.lpi index 03e32cd8d..54b379c22 100644 --- a/components/gradcontrols/examples/gradbuttontest.lpi +++ b/components/gradcontrols/examples/gradbuttontest.lpi @@ -2,10 +2,11 @@ - + + @@ -50,7 +51,6 @@ - diff --git a/components/gradcontrols/examples/gradcontroltest.lpi b/components/gradcontrols/examples/gradcontroltest.lpi index 4eefcae58..84084a0b5 100644 --- a/components/gradcontrols/examples/gradcontroltest.lpi +++ b/components/gradcontrols/examples/gradcontroltest.lpi @@ -2,8 +2,11 @@ - + + + + @@ -13,7 +16,7 @@ - + @@ -56,7 +59,6 @@ - @@ -76,10 +78,15 @@ + + + - - - + + + + + diff --git a/components/gradcontrols/packages/gradbutton.lpk b/components/gradcontrols/packages/gradbutton.lpk index bb759a963..8a48d785f 100644 --- a/components/gradcontrols/packages/gradbutton.lpk +++ b/components/gradcontrols/packages/gradbutton.lpk @@ -4,15 +4,14 @@ - + + + - - - diff --git a/components/gradcontrols/src/ugradbtn.pas b/components/gradcontrols/src/ugradbtn.pas index c06ad5694..024753faf 100644 --- a/components/gradcontrols/src/ugradbtn.pas +++ b/components/gradcontrols/src/ugradbtn.pas @@ -19,168 +19,165 @@ uses LCLIntf ,Buttons, urotatebitmap, types; type - TGradButton = class; + TGradButton = class; - TTextAlignment = (taLeftJustify, taRightJustify, taCenter); - TBorderSide = (bsTopLine, bsBottomLine, bsLeftLine, bsRightLine); - TBorderSides = set of TBorderSide; - TGradientType = (gtHorizontal,gtVertical); + TTextAlignment = (taLeftJustify, taRightJustify, taCenter); + TBorderSide = (bsTopLine, bsBottomLine, bsLeftLine, bsRightLine); + TBorderSides = set of TBorderSide; + TGradientType = (gtHorizontal,gtVertical); - TGBBackgroundPaintEvent = procedure(Sender: TGradButton; - TargetCanvas: TCanvas; R: TRect; BState : TButtonState) of object; + TGBBackgroundPaintEvent = procedure(Sender: TGradButton; + TargetCanvas: TCanvas; R: TRect; BState : TButtonState) of object; - { TGradButton } + { TGradButton } - TGradButton = class(TCustomControl) - private - FAutoHeight: Boolean; - FAutoHeightBorderSpacing: Integer; - FAutoWidthBorderSpacing: Integer; - FRotateDirection : TRotateDirection; - FTextAlignment : TTextAlignment; - FButtonLayout: TButtonLayout; - FTextPoint, FGlyphPoint : TPoint; - FTextSize, FGlyphSize : TSize; - FBackground, bm, - FNormalBackgroundCache, FHotBackgroundCache, - FDownBackgroundCache, FDisabledBackgroundCache : TBitmap; - FRotatedGlyph : TRotatedGlyph; - FRotatedText : TRotatedText; - FTextGlyphSpacing: Integer; - FGradientType : TGradientType; - FShowFocusBorder, FOnlyBackground, FOwnerBackgroundDraw, - FAutoWidth, FShowGlyph, FEnabled, FFocused : Boolean; - FBackgroundRect: TRect; - FBorderSides: TBorderSides; - FOnNormalBackgroundPaint, FOnHotBackgroundPaint, - FOnDownBackgroundPaint, FOnDisabledBackgroundPaint : TGBBackgroundPaintEvent; - procedure PaintGradient(TrgCanvas: TCanvas; pr : TRect); - procedure UpdateText; - procedure UpdateBackground; - procedure PaintBackground(AState: TButtonState; TrgBitmap: TBitmap); - protected - FState, FOldState: TButtonState; - FNormalBlend,FOverBlend : Extended; - FBaseColor, FNormalBlendColor, FOverBlendColor, FDisabledColor, - FBackgroundColor, FGlyphBackgroundColor, FClickColor: TColor; - procedure SetAutoHeight(const AValue: Boolean); virtual; - procedure SetAutoHeightBorderSpacing(const AValue: Integer); virtual; - procedure SetAutoWidthBorderSpacing(const AValue: Integer); virtual; - procedure InvPaint(StateCheck:Boolean=false); - procedure FontChanged(Sender: TObject); override; - procedure GlyphChanged(Sender: TObject); virtual; - procedure GetBackgroundRect(var TheRect : TRect); virtual; - function GetGlyph : TBitmap; - procedure SetEnabled(Value: Boolean); override; - procedure SetAutoWidth(const Value : Boolean); virtual; - procedure SetNormalBlend(const Value: Extended); virtual; - procedure SetOverBlend(const Value: Extended); virtual; - procedure SetBaseColor(const Value: TColor); virtual; - procedure SetNormalBlendColor(const Value: TColor); virtual; - procedure SetOverBlendColor(const Value: TColor); virtual; - procedure SetBackgroundColor(const Value: TColor); virtual; - procedure SetBorderSides(const Value: TBorderSides); virtual; - procedure SetOwnerBackgroundDraw(const Value: Boolean); virtual; - procedure SetGradientType(const Value: TGradientType); virtual; - procedure SetRotateDirection(const Value: TRotateDirection); virtual; - procedure SetShowGlyph(const Value: Boolean); virtual; - procedure SetGlyphBackgroundColor(const Value: TColor); virtual; - procedure SetTextAlignment(const Value: TTextAlignment); virtual; - procedure SetTextGlyphSpacing(const Value: Integer); virtual; - procedure SetButtonLayout(const Value: TButtonLayout); virtual; - procedure SetClickColor(const Value: TColor); virtual; - procedure SetDisabledColor(const Value: TColor); virtual; - procedure SetName(const Value: TComponentName); override; - procedure SetShowFocusBorder(const Value: Boolean); virtual; - procedure SetGlyph(const Value: TBitmap); virtual; - procedure TextChanged; override; - public - constructor Create(AOwner: TComponent); override; - destructor Destroy; override; - //procedure CreateParams(var Params: TCreateParams); override; - procedure Paint; override; - procedure MouseEnter; override; - procedure MouseLeave; override; - procedure MouseDown(Button: TMouseButton; - Shift: TShiftState; X, Y: Integer); override; - procedure MouseUp(Button: TMouseButton; - Shift: TShiftState; X, Y: Integer); override; - procedure MouseMove(Shift: TShiftState; - X, Y: Integer); override; - procedure DoEnter; override; - procedure DoExit; override; - procedure KeyUp(var Key: Word; Shift: TShiftState); override; - function GetBackground : TCanvas; - procedure Click; override; - procedure Resize; override; - function Focused: Boolean; override; - procedure UpdateButton; - procedure UpdatePositions; - function GetAutoWidth : Integer; - function GetAutoHeight : Integer; - published - property Action; - property Anchors; - property Align; - property Caption; - property Enabled; - property PopupMenu; - property Font; - property Visible; - property OnClick; - property OnMouseDown; - property OnMouseEnter; - property OnMouseLeave; - property OnMouseMove; - property OnMouseUp; - property OnPaint; - property OnResize; - property OnStartDrag; - property DragMode; - property DragKind; - property DragCursor; - property TabOrder; - property TabStop; - property NormalBlend : Extended read FNormalBlend write SetNormalBlend; - property OverBlend : Extended read FOverBlend write SetOverBlend; - property BaseColor: TColor read FBaseColor write SetBaseColor; - property Color: TColor read FBaseColor write SetBaseColor; - property NormalBlendColor: TColor read FNormalBlendColor write SetNormalBlendColor; - property OverBlendColor: TColor read FOverBlendColor write SetOverBlendColor; - property BackgroundColor: TColor read FBackgroundColor write SetBackgroundColor; - property AutoWidth : Boolean read FAutoWidth write SetAutoWidth default false; - property AutoHeight: Boolean read FAutoHeight write SetAutoHeight default false; - property BorderSides : TBorderSides read FBorderSides write SetBorderSides default [bsTopLine,bsBottomLine,bsLeftLine,bsRightLine]; - property GradientType : TGradientType read FGradientType write SetGradientType default gtHorizontal; - property ShowFocusBorder : Boolean read FShowFocusBorder write SetShowFocusBorder; - property RotateDirection : TRotateDirection read FRotateDirection write SetRotateDirection default rdNormal; - property ButtonLayout : TButtonLayout read FButtonLayout write SetButtonLayout default blGlyphLeft; - property Glyph : TBitmap read GetGlyph write SetGlyph; - property ShowGlyph : Boolean read FShowGlyph write SetShowGlyph; - property GlyphBackgroundColor : TColor read FGlyphBackgroundColor write SetGlyphBackgroundColor; - property TextAlignment : TTextAlignment read FTextAlignment write SetTextAlignment default taCenter; - property TextGlyphSpacing : Integer read FTextGlyphSpacing write SetTextGlyphSpacing default 2; - property ClickColor : TColor read FClickColor write SetClickColor; - property DisabledColor : TColor read FDisabledColor write SetDisabledColor default clGray; - property OwnerBackgroundDraw : Boolean read FOwnerBackgroundDraw write SetOwnerBackgroundDraw; - property AutoWidthBorderSpacing : Integer read FAutoWidthBorderSpacing write SetAutoWidthBorderSpacing; - property AutoHeightBorderSpacing : Integer read FAutoHeightBorderSpacing write SetAutoHeightBorderSpacing; + TGradButton = class(TCustomControl) + private + FAutoHeight: Boolean; + FAutoHeightBorderSpacing: Integer; + FAutoWidthBorderSpacing: Integer; + FRotateDirection : TRotateDirection; + FTextAlignment : TTextAlignment; + FButtonLayout: TButtonLayout; + FTextPoint, FGlyphPoint : TPoint; + FTextSize, FGlyphSize : TSize; + FBackground, bm, + FNormalBackgroundCache, FHotBackgroundCache, + FDownBackgroundCache, FDisabledBackgroundCache : TBitmap; + FRotatedGlyph : TRotatedGlyph; + FRotatedText : TRotatedText; + FTextGlyphSpacing: Integer; + FGradientType : TGradientType; + FShowFocusBorder, FOnlyBackground, + FAutoWidth, FShowGlyph, FEnabled, FFocused : Boolean; + FBackgroundRect: TRect; + FBorderSides: TBorderSides; + FOnNormalBackgroundPaint, FOnHotBackgroundPaint, + FOnDownBackgroundPaint, FOnDisabledBackgroundPaint : TGBBackgroundPaintEvent; + procedure PaintGradient(TrgCanvas: TCanvas; pr : TRect); + procedure UpdateBackground; + procedure PaintBackground(AState: TButtonState; TrgBitmap: TBitmap); + protected + FState, FOldState: TButtonState; + FNormalBlend,FOverBlend : Extended; + FBaseColor, FNormalBlendColor, FOverBlendColor, FDisabledColor, + FBackgroundColor, FGlyphBackgroundColor, FClickColor: TColor; + FOwnerBackgroundDraw : Boolean; + procedure SetAutoHeight(const AValue: Boolean); virtual; + procedure SetAutoHeightBorderSpacing(const AValue: Integer); virtual; + procedure SetAutoWidthBorderSpacing(const AValue: Integer); virtual; + procedure InvPaint(StateCheck:Boolean=false); + procedure FontChanged(Sender: TObject); override; + procedure GlyphChanged(Sender: TObject); virtual; + procedure GetBackgroundRect(var TheRect : TRect); virtual; + procedure GetContentRect(var TheRect: TRect); virtual; + function GetGlyph : TBitmap; + procedure SetEnabled(Value: Boolean); override; + procedure SetAutoWidth(const Value : Boolean); virtual; + procedure SetNormalBlend(const Value: Extended); virtual; + procedure SetOverBlend(const Value: Extended); virtual; + procedure SetBaseColor(const Value: TColor); virtual; + procedure SetNormalBlendColor(const Value: TColor); virtual; + procedure SetOverBlendColor(const Value: TColor); virtual; + procedure SetBackgroundColor(const Value: TColor); virtual; + procedure SetBorderSides(const Value: TBorderSides); virtual; + procedure SetOwnerBackgroundDraw(const Value: Boolean); virtual; + procedure SetGradientType(const Value: TGradientType); virtual; + procedure SetRotateDirection(const Value: TRotateDirection); virtual; + procedure SetShowGlyph(const Value: Boolean); virtual; + procedure SetGlyphBackgroundColor(const Value: TColor); virtual; + procedure SetTextAlignment(const Value: TTextAlignment); virtual; + procedure SetTextGlyphSpacing(const Value: Integer); virtual; + procedure SetButtonLayout(const Value: TButtonLayout); virtual; + procedure SetClickColor(const Value: TColor); virtual; + procedure SetDisabledColor(const Value: TColor); virtual; + procedure SetName(const Value: TComponentName); override; + procedure SetShowFocusBorder(const Value: Boolean); virtual; + procedure SetGlyph(const Value: TBitmap); virtual; + procedure TextChanged; override; + public + constructor Create(AOwner: TComponent); override; + destructor Destroy; override; + //procedure CreateParams(var Params: TCreateParams); override; + procedure Paint; override; + procedure MouseEnter; override; + procedure MouseLeave; override; + procedure MouseDown(Button: TMouseButton; + Shift: TShiftState; X, Y: Integer); override; + procedure MouseUp(Button: TMouseButton; + Shift: TShiftState; X, Y: Integer); override; + procedure MouseMove(Shift: TShiftState; + X, Y: Integer); override; + procedure DoEnter; override; + procedure DoExit; override; + procedure KeyUp(var Key: Word; Shift: TShiftState); override; + function GetBackground : TCanvas; + procedure Click; override; + procedure Resize; override; + function Focused: Boolean; override; + procedure UpdateButton; + procedure UpdatePositions; + function GetAutoWidth : Integer; + function GetAutoHeight : Integer; + published + property Action; + property Anchors; + property Align; + property Caption; + property Enabled; + property PopupMenu; + property Font; + property Visible; + property OnClick; + property OnMouseDown; + property OnMouseEnter; + property OnMouseLeave; + property OnMouseMove; + property OnMouseUp; + property OnPaint; + property OnResize; + property OnStartDrag; + property DragMode; + property DragKind; + property DragCursor; + property TabOrder; + property TabStop; + property NormalBlend : Extended read FNormalBlend write SetNormalBlend; + property OverBlend : Extended read FOverBlend write SetOverBlend; + property BaseColor: TColor read FBaseColor write SetBaseColor; + property Color: TColor read FBaseColor write SetBaseColor; + property NormalBlendColor: TColor read FNormalBlendColor write SetNormalBlendColor; + property OverBlendColor: TColor read FOverBlendColor write SetOverBlendColor; + property BackgroundColor: TColor read FBackgroundColor write SetBackgroundColor; + property AutoWidth : Boolean read FAutoWidth write SetAutoWidth default false; + property AutoHeight: Boolean read FAutoHeight write SetAutoHeight default false; + property BorderSides : TBorderSides read FBorderSides write SetBorderSides default [bsTopLine,bsBottomLine,bsLeftLine,bsRightLine]; + property GradientType : TGradientType read FGradientType write SetGradientType default gtHorizontal; + property ShowFocusBorder : Boolean read FShowFocusBorder write SetShowFocusBorder; + property RotateDirection : TRotateDirection read FRotateDirection write SetRotateDirection default rdNormal; + property ButtonLayout : TButtonLayout read FButtonLayout write SetButtonLayout default blGlyphLeft; + property Glyph : TBitmap read GetGlyph write SetGlyph; + property ShowGlyph : Boolean read FShowGlyph write SetShowGlyph; + property GlyphBackgroundColor : TColor read FGlyphBackgroundColor write SetGlyphBackgroundColor; + property TextAlignment : TTextAlignment read FTextAlignment write SetTextAlignment default taCenter; + property TextGlyphSpacing : Integer read FTextGlyphSpacing write SetTextGlyphSpacing default 2; + property ClickColor : TColor read FClickColor write SetClickColor; + property DisabledColor : TColor read FDisabledColor write SetDisabledColor default clGray; + property OwnerBackgroundDraw : Boolean read FOwnerBackgroundDraw write SetOwnerBackgroundDraw; + property AutoWidthBorderSpacing : Integer read FAutoWidthBorderSpacing write SetAutoWidthBorderSpacing; + property AutoHeightBorderSpacing : Integer read FAutoHeightBorderSpacing write SetAutoHeightBorderSpacing; - //property OnGetBackgroundRect { TODO } + property OnNormalBackgroundPaint : TGBBackgroundPaintEvent read FOnNormalBackgroundPaint write FOnNormalBackgroundPaint; + property OnHotBackgroundPaint : TGBBackgroundPaintEvent read FOnHotBackgroundPaint write FOnHotBackgroundPaint; + property OnDownBackgroundPaint : TGBBackgroundPaintEvent read FOnDownBackgroundPaint write FOnDownBackgroundPaint; + property OnDisabledBackgroundPaint : TGBBackgroundPaintEvent read FOnDisabledBackgroundPaint write FOnDisabledBackgroundPaint; + end; - //BackgroundPaintEvents - property OnNormalBackgroundPaint : TGBBackgroundPaintEvent read FOnNormalBackgroundPaint write FOnNormalBackgroundPaint; - property OnHotBackgroundPaint : TGBBackgroundPaintEvent read FOnHotBackgroundPaint write FOnHotBackgroundPaint; - property OnDownBackgroundPaint : TGBBackgroundPaintEvent read FOnDownBackgroundPaint write FOnDownBackgroundPaint; - property OnDisabledBackgroundPaint : TGBBackgroundPaintEvent read FOnDisabledBackgroundPaint write FOnDisabledBackgroundPaint; - end; + function ColorBetween(C1, C2 : TColor; blend:Extended):TColor; + function ColorsBetween(colors:array of TColor; blend:Extended):TColor; + function AlignItem(ItemLength, AreaLength,Spacing: Integer; ATextAlignment: TTextAlignment):Integer; - function ColorBetween(C1, C2 : TColor; blend:Extended):TColor; - function ColorsBetween(colors:array of TColor; blend:Extended):TColor; - function AlignItem(ItemLength, AreaLength,Spacing: Integer; ATextAlignment: TTextAlignment):Integer; - procedure DbgsGradButton(AButton : TGradButton); - - procedure Register; + procedure Register; implementation @@ -189,21 +186,15 @@ uses function AlignItem(ItemLength, AreaLength,Spacing: Integer; ATextAlignment: TTextAlignment):Integer; begin - case ATextAlignment of - taLeftJustify : Result := Spacing; - taRightJustify: begin - Result := AreaLength-ItemLength-Spacing; - end; - taCenter : begin - Result := (AreaLength div 2)-(ItemLength div 2); - end; - end; -end; - -procedure DbgsGradButton(AButton: TGradButton); -begin - DebugLn('######GradButton#####'); - + case ATextAlignment of + taLeftJustify : Result := Spacing; + taRightJustify: begin + Result := AreaLength-ItemLength-Spacing; + end; + taCenter : begin + Result := (AreaLength div 2)-(ItemLength div 2); + end; + end; end; procedure TGradButton.SetShowFocusBorder(const Value: Boolean); @@ -224,37 +215,28 @@ begin inherited TextChanged; FRotatedText.Text := Caption; - if FAutoWidth then - UpdateButton - else - UpdatePositions; + if FAutoWidth then + UpdateButton + else + UpdatePositions; - InvPaint; + InvPaint; end; procedure TGradButton.SetName(const Value: TComponentName); begin - if (Caption='') OR (Caption=Name) then - begin - Caption:=Value; - end; + if (Caption='') OR (Caption=Name) then + begin + Caption:=Value; + end; - inherited; + inherited; end; function TGradButton.Focused: Boolean; begin - FFocused:=FFocused OR (Inherited Focused); - Result := FFocused; -end; - -procedure TGradButton.UpdateText; -begin - //UpdatePositions; - - //FRotatedText.Canvas.Font.Color := Canvas.Font.Color; - //FRotatedText.Canvas.Font := Canvas.Font; - //FRotatedText.Update; + FFocused:=FFocused OR (Inherited Focused); + Result := FFocused; end; procedure TGradButton.SetAutoWidth(const Value : Boolean); @@ -283,91 +265,72 @@ end; procedure TGradButton.UpdatePositions; var - tempTS,tempGS : TSize; - p,t,midx, midy, textmidx, textmidy, - groupwidth, groupheight, AreaWidth, AreaHeight :Integer; - tempBL : TButtonLayout; + tempTS,tempGS : TSize; + p,t,midx, midy, textmidx, textmidy, + groupwidth, groupheight, AreaWidth, AreaHeight :Integer; + tempBL : TButtonLayout; begin + GetContentRect(FBackgroundRect); - GetBackgroundRect(FBackgroundRect); + AreaWidth := FBackgroundRect.Right-FBackgroundRect.Left; + AreaHeight := FBackgroundRect.Bottom-FBackgroundRect.Top; - AreaWidth := FBackgroundRect.Right-FBackgroundRect.Left; - AreaHeight := FBackgroundRect.Bottom-FBackgroundRect.Top; + tempGS.cx:=0; + tempGS.cy:=0; - tempGS.cx:=0; - tempGS.cy:=0; + if FShowGlyph and not FRotatedGlyph.Empty then + begin + tempGS.cx:=FRotatedGlyph.Width; + tempGS.cy:=FRotatedGlyph.Height; + end; - if FShowGlyph and not FRotatedGlyph.Empty then - begin - tempGS.cx:=FRotatedGlyph.Width; - tempGS.cy:=FRotatedGlyph.Height; + //tempTS := Canvas.TextExtent(Caption); + tempTS.cx:= FRotatedText.Width; + tempTS.cy:= FRotatedText.Height; + + tempBL := FButtonLayout; + + if FShowGlyph and not FRotatedGlyph.Empty then begin + case tempBL of + blGlyphLeft: begin + FGlyphPoint.x := AlignItem(tempGS.cx+FTextGlyphSpacing+tempTS.cx,AreaWidth,4,FTextAlignment); + FGlyphPoint.y := AlignItem(tempGS.cy,AreaHeight,0, taCenter); + + FTextPoint.x := FGlyphPoint.x+tempGS.cx+FTextGlyphSpacing; + FTextPoint.y := AlignItem(tempTS.cy,AreaHeight,0, taCenter); + end; + blGlyphRight: begin + //Glyph Right, Text Left + FTextPoint.x := AlignItem(tempTS.cx+FTextGlyphSpacing+tempGS.cx,AreaWidth,4, FTextAlignment); + FTextPoint.y := AlignItem(tempTS.cy,AreaHeight,0, taCenter); + + FGlyphPoint.x := FTextPoint.x+tempTS.cx+FTextGlyphSpacing; + FGlyphPoint.y := AlignItem(tempGS.cy,AreaHeight,0, taCenter); + end; + blGlyphTop: begin + //Glyph Top, Text Bottom + FGlyphPoint.x := AlignItem(tempGS.cx,AreaWidth, 0, FTextAlignment); + FTextPoint.x := AlignItem(tempTS.cx, AreaWidth, 0, FTextAlignment); + + FGlyphPoint.y := AlignItem(tempGS.cy+FTextGlyphSpacing+tempTS.cy, AreaHeight, 4, taCenter); + FTextPoint.y := FGlyphPoint.y+tempGS.cy+FTextGlyphSpacing; + end; + blGlyphBottom: begin + //Glyph Bottom, Text Top + FGlyphPoint.x := AlignItem(tempGS.cx,AreaWidth, 0, FTextAlignment); + FTextPoint.x := AlignItem(tempTS.cx, AreaWidth, 0, FTextAlignment); + + FTextPoint.y := AlignItem(tempGS.cy+FTextGlyphSpacing+tempTS.cy, AreaHeight, 4, taCenter); + FGlyphPoint.y := FTextPoint.y+tempTS.cy+FTextGlyphSpacing; + end; end; + end else begin + FGlyphPoint.x := 0; + FGlyphPoint.y := 0; - //tempTS := Canvas.TextExtent(Caption); - tempTS.cx:= FRotatedText.Width; - tempTS.cy:= FRotatedText.Height; - - tempBL := FButtonLayout; - - {if FRotateDirection=rdRight then - begin - case FButtonLayout of - blGlyphTop : tempBL := blGlyphBottom; - blGlyphBottom: tempBL := blGlyphTop; - end; - end;} - -{if FRotateDirection in [rdRight,rdLeft] then - begin - p := tempTS.cx; - tempTS.cx := tempTS.cy; - tempTS.cy := p; - p := tempGS.cx; - tempGS.cx:=tempGS.cy; - tempGS.cy := p; - end; } - - if FShowGlyph and not FRotatedGlyph.Empty then begin - case tempBL of - blGlyphLeft: begin - FGlyphPoint.x := AlignItem(tempGS.cx+FTextGlyphSpacing+tempTS.cx,AreaWidth,4,FTextAlignment); - FGlyphPoint.y := AlignItem(tempGS.cy,AreaHeight,0, taCenter); - - FTextPoint.x := FGlyphPoint.x+tempGS.cx+FTextGlyphSpacing; - FTextPoint.y := AlignItem(tempTS.cy,AreaHeight,0, taCenter); - end; - blGlyphRight: begin - //Glyph Right, Text Left - FTextPoint.x := AlignItem(tempTS.cx+FTextGlyphSpacing+tempGS.cx,AreaWidth,4, FTextAlignment); - FTextPoint.y := AlignItem(tempTS.cy,AreaHeight,0, taCenter); - - FGlyphPoint.x := FTextPoint.x+tempTS.cx+FTextGlyphSpacing; - FGlyphPoint.y := AlignItem(tempGS.cy,AreaHeight,0, taCenter); - end; - blGlyphTop: begin - //Glyph Top, Text Bottom - FGlyphPoint.x := AlignItem(tempGS.cx,AreaWidth, 0, FTextAlignment); - FTextPoint.x := AlignItem(tempTS.cx, AreaWidth, 0, FTextAlignment); - - FGlyphPoint.y := AlignItem(tempGS.cy+FTextGlyphSpacing+tempTS.cy, AreaHeight, 4, taCenter); - FTextPoint.y := FGlyphPoint.y+tempGS.cy+FTextGlyphSpacing; - end; - blGlyphBottom: begin - //Glyph Bottom, Text Top - FGlyphPoint.x := AlignItem(tempGS.cx,AreaWidth, 0, FTextAlignment); - FTextPoint.x := AlignItem(tempTS.cx, AreaWidth, 0, FTextAlignment); - - FTextPoint.y := AlignItem(tempGS.cy+FTextGlyphSpacing+tempTS.cy, AreaHeight, 4, taCenter); - FGlyphPoint.y := FTextPoint.y+tempTS.cy+FTextGlyphSpacing; - end; - end; - end else begin - FGlyphPoint.x := 0; - FGlyphPoint.y := 0; - - FTextPoint.x := AlignItem(tempTS.cx,AreaWidth,4, FTextAlignment); - FTextPoint.y := AlignItem(tempTS.cy,AreaHeight,0, taCenter); - end; + FTextPoint.x := AlignItem(tempTS.cx,AreaWidth,4, FTextAlignment); + FTextPoint.y := AlignItem(tempTS.cy,AreaHeight,0, taCenter); + end; //WritePoints([TP^, GP^]); {TP^.x := TP^.x + p; @@ -376,25 +339,24 @@ begin GP^.x := GP^.x + p; GP^.y := GP^.y + p; } - FTextPoint.x := FTextPoint.x+FBackgroundRect.Left; - FTextPoint.y := FTextPoint.y+FBackgroundRect.Top; + FTextPoint.x := FTextPoint.x+FBackgroundRect.Left; + FTextPoint.y := FTextPoint.y+FBackgroundRect.Top; - FGlyphPoint.x := FGlyphPoint.x+FBackgroundRect.Left; - FGlyphPoint.y := FGlyphPoint.y+FBackgroundRect.Top; + FGlyphPoint.x := FGlyphPoint.x+FBackgroundRect.Left; + FGlyphPoint.y := FGlyphPoint.y+FBackgroundRect.Top; - {$IFDEF DEBUGGRADBUTTON} - WriteLn('Text'); - WritePoint(FTextPoint); - WriteLn('Glyph'); - WritePoint(FGlyphPoint); - {$ENDIF} + {$IFDEF DEBUGGRADBUTTON} + WriteLn('Text'); + WritePoint(FTextPoint); + WriteLn('Glyph'); + WritePoint(FGlyphPoint); + {$ENDIF} - //tempTS := Canvas.TextExtent(Caption); - - FTextSize:=tempTS; - FGlyphSize:=tempGS; + //tempTS := Canvas.TextExtent(Caption); + FTextSize:=tempTS; + FGlyphSize:=tempGS; end; function TGradButton.GetAutoWidth: Integer; @@ -579,6 +541,37 @@ begin end; end; +procedure TGradButton.GetContentRect(var TheRect: TRect); +begin + TheRect := Rect(0,0,Width,Height); + + //Top + if (bsTopLine in BorderSides) then + begin + TheRect.Top := 2; + end else + TheRect.Top := 0; + + //Left + if (bsLeftLine in BorderSides) then + begin + TheRect.Left := 2; + end else + TheRect.Left := 0; + + //Right + if (bsRightLine in BorderSides) then + begin + TheRect.Right := TheRect.Right-{$IFDEF windows}2{$ELSE}3{$ENDIF}; + end; + + //Bottom + if (bsBottomLine in BorderSides) then + begin + TheRect.Bottom := TheRect.Bottom - 2; + end; +end; + function TGradButton.GetGlyph : TBitmap; begin Result := FRotatedGlyph.Bitmap; @@ -654,7 +647,6 @@ begin if FAutoHeight then Height := GetAutoHeight; UpdateBackground; - UpdateText; UpdatePositions; end; @@ -915,13 +907,13 @@ end; procedure TGradButton.SetOwnerBackgroundDraw(const Value: Boolean); begin - FOwnerBackgroundDraw:=Value; + FOwnerBackgroundDraw:=Value; - if Value then - begin - UpdateBackground; - InvPaint; - end; + if Value then + begin + UpdateBackground; + InvPaint; + end; end; procedure TGradButton.SetNormalBlend(const Value: Extended); @@ -1047,45 +1039,47 @@ begin with bm do begin + Width := Self.Width; + Height := Self.Height; - Width := Self.Width; - Height := Self.Height; + FBackground.Width:=Width; + FBackground.Height:=Height; - FBackground.Width:=Width; - FBackground.Height:=Height; + Canvas.Brush.Color:=clBlack; + Canvas.FillRect(0,0,Width, Height); - p := 0; + p := 0; - if tempState = bsDown then - p := 1; - - if not FEnabled then tempState := bsDisabled; - - case tempState of - bsUp : Canvas.Draw(0,0,FNormalBackgroundCache); - bsDown: Canvas.Draw(0,0,FDownBackgroundCache); - bsHot : Canvas.Draw(0,0,FHotBackgroundCache); - else Canvas.Draw(0,0,FDisabledBackgroundCache); - end; - - if Caption <> '' then - FRotatedText.Draw(bm.Canvas, FTextPoint.x+p, FTextPoint.y+p); + if tempState = bsDown then + p := 1; - if FShowGlyph AND FRotatedGlyph.IsBitmapStored then - begin - if not FEnabled then - tempState := bsDisabled - else - tempState := FState; - - FRotatedGlyph.State:=tempState; - FRotatedGlyph.Draw(bm.Canvas, FGlyphPoint.x+p, FGlyphPoint.y+p); - end; - - if not (csDesigning in ComponentState) then - if FFocused AND FShowFocusBorder then - Canvas.DrawFocusRect(RECT(FBackgroundRect.Left+2, FBackgroundRect.Top+2, - FBackgroundRect.Right-2, FBackgroundRect.Bottom-2)); + if not FEnabled then tempState := bsDisabled; + + case tempState of + bsUp : Canvas.Draw(0,0,FNormalBackgroundCache); + bsDown: Canvas.Draw(0,0,FDownBackgroundCache); + bsHot : Canvas.Draw(0,0,FHotBackgroundCache); + else Canvas.Draw(0,0,FDisabledBackgroundCache); + end; + + if Caption <> '' then + FRotatedText.Draw(bm.Canvas, FTextPoint.x+p, FTextPoint.y+p); + + if FShowGlyph AND FRotatedGlyph.IsBitmapStored then + begin + if not FEnabled then + tempState := bsDisabled + else + tempState := FState; + + FRotatedGlyph.State:=tempState; + FRotatedGlyph.Draw(bm.Canvas, FGlyphPoint.x+p, FGlyphPoint.y+p); + end; + + if not (csDesigning in ComponentState) then + if FFocused AND FShowFocusBorder then + Canvas.DrawFocusRect(RECT(FBackgroundRect.Left+2, FBackgroundRect.Top+2, + FBackgroundRect.Right-2, FBackgroundRect.Bottom-2)); end; Canvas.Draw(0,0,bm); diff --git a/components/gradcontrols/src/ugradtabcontrol.pas b/components/gradcontrols/src/ugradtabcontrol.pas index 1812baa24..ad7ec02e2 100644 --- a/components/gradcontrols/src/ugradtabcontrol.pas +++ b/components/gradcontrols/src/ugradtabcontrol.pas @@ -7,14 +7,6 @@ unit ugradtabcontrol; @version 0.1 @comments TGradTabControl is based on TNotebook/TPageControl/TTabControl @license http://creativecommons.org/licenses/LGPL/2.1/ - @todo: - - If a Button isnt visible but focused the bar should move to the button - working - - Close Button at Tabs - - Drawer needed or first style wishes - - Button Events accessable from Page-Events - - TabBar Events accessable from TGradTabControl - - Maybe rename TGradTabControl to TCustomPageControl and of these - TGradTabControl and TGradPageControl ------------------------------------------------------------------------------} {$mode objfpc}{$H+} @@ -25,47 +17,65 @@ interface uses Classes,LResources, SysUtils, Menus, LCLType, - LCLProc, ExtCtrls, Graphics, ugradbtn, Controls, uRotateBitmap, + LCLProc, LCLIntf,ExtCtrls, Graphics, ugradbtn, Controls, uRotateBitmap, Buttons, Forms, ImgList; type TGradTabControl = class; + TGradTabPage = class; + + { TGradTabCloseButton } + + TGradTabCloseButton = class(TGradButton) + public + constructor Create(AOwner: TComponent); override; + end; { TGradTabPageButton } TGradTabPageButton = class( TGradButton ) private - FCloseButton : TGradButton; - FShowCloseButton : Boolean; - procedure AlignCloseButton; - procedure SetShowCloseButton(AValue: Boolean); + FCloseButton : TGradTabCloseButton; + FPage: TGradTabPage; + FShowCloseButton : Boolean; + FShowCloseButtonOnMouseOver: Boolean; + procedure AlignCloseButton; + procedure SetShowCloseButton(AValue: Boolean); + procedure SetShowCloseButtonOnMouseOver(const AValue: Boolean); protected - procedure SetRotateDirection(const Value: TRotateDirection); override; - procedure RealSetText(const Value: TCaption); override; - procedure SetAutoHeightBorderSpacing(const AValue: Integer); override; - procedure SetAutoWidthBorderSpacing(const AValue: Integer); override; - procedure SetShowGlyph(const Value: Boolean); override; + procedure SetRotateDirection(const Value: TRotateDirection); override; + procedure RealSetText(const Value: TCaption); override; + procedure SetAutoHeightBorderSpacing(const AValue: Integer); override; + procedure SetAutoWidthBorderSpacing(const AValue: Integer); override; + procedure SetShowGlyph(const Value: Boolean); override; + procedure CloseBtnBackgroundPaint(Sender: TGradButton; + TargetCanvas: TCanvas; R: TRect; BState: TButtonState); + procedure GetContentRect(var TheRect: TRect); override; + procedure SetBaseColor(const Value: TColor); override; + procedure MouseMove(Shift: TShiftState; X, Y: Integer); override; public - constructor Create(AOwner: TComponent); override; - destructor Destroy; override; - procedure Resize; override; - procedure SetBounds(aLeft, aTop, aWidth, aHeight: integer); override; - property ShowCloseButton : Boolean read FShowCloseButton write SetShowCloseButton default false; + constructor Create(AOwner: TComponent); override; + destructor Destroy; override; + procedure Resize; override; + procedure SetBounds(aLeft, aTop, aWidth, aHeight: integer); override; + property ShowCloseButton : Boolean read FShowCloseButton write SetShowCloseButton default false; + property ShowCloseButtonOnMouseOver : Boolean read FShowCloseButtonOnMouseOver write SetShowCloseButtonOnMouseOver default false; + property Page : TGradTabPage read FPage write FPage; published - property OnStartDock; - property OnStartDrag; - property OnDockDrop; - property OnDockOver; - property OnDragDrop; - property OnDragOver; - property OnEndDock; - property OnEndDrag; - property OnMouseDown; - property OnMouseUp; - property OnMouseMove; - property OnMouseWheel; - property OnMouseWheelUp; - property OnMouseWheelDown; + property OnStartDock; + property OnStartDrag; + property OnDockDrop; + property OnDockOver; + property OnDragDrop; + property OnDragOver; + property OnEndDock; + property OnEndDrag; + property OnMouseDown; + property OnMouseUp; + property OnMouseMove; + property OnMouseWheel; + property OnMouseWheelUp; + property OnMouseWheelDown; end; TGradTabPageButtonClickEvent = procedure(GradTabControl : TGradTabControl;AIndex : Integer) of object; @@ -75,97 +85,100 @@ type X, Y, AIndex: Integer) of object; //Properties of the Tab should be accessable from here - TGradTabPage = class(TCustomControl) - private - FActiveTabColor: TColor; - FButton : TGradTabPageButton; - FCaption: TCaption; - FGradTabControl : TGradTabControl; - FFlags: TPageFlags; - FImageIndex: Integer; - FNormalTabColor: TColor; - FOwnerTabColor: Boolean; - FTabVisible,FCurrentlyDestroying,FShowCloseButton : Boolean; - function GetTabButtonLayout: TButtonLayout; - function GetTabColor: TColor; - function GetTabGlyph: TBitmap; - function GetTabShowGlyph: Boolean; - function GetTabTextAlignment: TTextAlignment; - function GetTabPopupMenu : TPopupMenu; - function GetText : TCaption; - procedure SetImageIndex(const AValue: Integer); - procedure SetTabButtonLayout(const AValue: TButtonLayout); - procedure SetTabColor(const AValue: TColor); - procedure SetTabGlyph(const AValue: TBitmap); - procedure SetTabPopupMenu(Value : TPopupMenu); - procedure SetTabShowGlyph(const AValue: Boolean); - procedure SetTabTextAlignment(const AValue: TTextAlignment); - procedure SetText(const Value: TCaption); - procedure SetEnabled(Value: Boolean); override; - protected - function GetPageIndex: integer; - procedure SetPageIndex(AValue: Integer); - procedure SetParent(NewParent: TWinControl); override; - procedure SetShowCloseButton(Value: Boolean); - procedure SetTabVisible(Value: Boolean); - public - constructor Create(AOwner: TComponent); override; - destructor Destroy; override; - procedure DestroyHandle; override; - procedure Paint; override; - property TabButton : TGradTabPageButton read FButton; - function VisibleIndex: integer; - procedure UpdateImage; - published - property TabVisible : Boolean read FTabVisible write SetTabVisible default true; - property PageIndex : Integer read GetPageIndex write SetPageIndex; - property Caption : TCaption read GetText write SetText; - property ShowCloseButton : Boolean read FShowCloseButton write SetShowCloseButton default false; - property TabPopupMenu : TPopupMenu read GetTabPopupMenu write SetTabPopupMenu; - property Color; - property TabColor : TColor read GetTabColor write SetTabColor; - property TabTextAlignment : TTextAlignment read GetTabTextAlignment write SetTabTextAlignment default taCenter; - property TabGlyph : TBitmap read GetTabGlyph write SetTabGlyph; - property TabShowGlyph : Boolean read GetTabShowGlyph write SetTabShowGlyph; - property TabButtonLayout : TButtonLayout read GetTabButtonLayout write SetTabButtonLayout; - property ImageIndex : Integer read FImageIndex write SetImageIndex default 0; - property Enabled; - property PopupMenu; - property OnStartDock; - property OnStartDrag; - property OnDockDrop; - property OnDockOver; - property OnDragDrop; - property OnDragOver; - property OnEndDock; - property OnEndDrag; - property OnMouseDown; - property OnMouseUp; - property OnMouseMove; - property OnMouseWheel; - property OnMouseWheelUp; - property OnMouseWheelDown; - property ActiveTabColor : TColor read FActiveTabColor write FActiveTabColor default clGreen; - property NormalTabColor : TColor read FNormalTabColor write FNormalTabColor default clBlue; - property OwnerTabColor : Boolean read FOwnerTabColor write FOwnerTabColor default false; - end; + TGradTabPage = class(TCustomControl) + private + FActiveTabColor: TColor; + FButton : TGradTabPageButton; + FCaption: TCaption; + FGradTabControl : TGradTabControl; + FFlags: TPageFlags; + FImageIndex: Integer; + FNormalTabColor: TColor; + FOwnerTabColor: Boolean; + FShowCloseButtonOnMouseOver: Boolean; + FTabVisible,FCurrentlyDestroying,FShowCloseButton : Boolean; + function GetTabButtonLayout: TButtonLayout; + function GetTabColor: TColor; + function GetTabGlyph: TBitmap; + function GetTabShowGlyph: Boolean; + function GetTabTextAlignment: TTextAlignment; + function GetTabPopupMenu : TPopupMenu; + function GetText : TCaption; + procedure SetImageIndex(const AValue: Integer); + procedure SetShowCloseButtonOnMouseOver(const AValue: Boolean); + procedure SetTabButtonLayout(const AValue: TButtonLayout); + procedure SetTabColor(const AValue: TColor); + procedure SetTabGlyph(const AValue: TBitmap); + procedure SetTabPopupMenu(Value : TPopupMenu); + procedure SetTabShowGlyph(const AValue: Boolean); + procedure SetTabTextAlignment(const AValue: TTextAlignment); + procedure SetText(const Value: TCaption); + procedure SetEnabled(Value: Boolean); override; + protected + function GetPageIndex: integer; + procedure SetPageIndex(AValue: Integer); + procedure SetParent(NewParent: TWinControl); override; + procedure SetShowCloseButton(Value: Boolean); + procedure SetTabVisible(Value: Boolean); + public + constructor Create(AOwner: TComponent); override; + destructor Destroy; override; + procedure DestroyHandle; override; + procedure Paint; override; + property TabButton : TGradTabPageButton read FButton; + function VisibleIndex: integer; + procedure UpdateImage; + published + property TabVisible : Boolean read FTabVisible write SetTabVisible default true; + property PageIndex : Integer read GetPageIndex write SetPageIndex; + property Caption : TCaption read GetText write SetText; + property ShowCloseButton : Boolean read FShowCloseButton write SetShowCloseButton default false; + property ShowCloseButtonOnMouseOver : Boolean read FShowCloseButtonOnMouseOver write SetShowCloseButtonOnMouseOver default false; + property TabPopupMenu : TPopupMenu read GetTabPopupMenu write SetTabPopupMenu; + property Color; + property TabColor : TColor read GetTabColor write SetTabColor; + property TabTextAlignment : TTextAlignment read GetTabTextAlignment write SetTabTextAlignment default taCenter; + property TabGlyph : TBitmap read GetTabGlyph write SetTabGlyph; + property TabShowGlyph : Boolean read GetTabShowGlyph write SetTabShowGlyph; + property TabButtonLayout : TButtonLayout read GetTabButtonLayout write SetTabButtonLayout; + property ImageIndex : Integer read FImageIndex write SetImageIndex default 0; + property Enabled; + property PopupMenu; + property OnStartDock; + property OnStartDrag; + property OnDockDrop; + property OnDockOver; + property OnDragDrop; + property OnDragOver; + property OnEndDock; + property OnEndDrag; + property OnMouseDown; + property OnMouseUp; + property OnMouseMove; + property OnMouseWheel; + property OnMouseWheelUp; + property OnMouseWheelDown; + property ActiveTabColor : TColor read FActiveTabColor write FActiveTabColor default clGreen; + property NormalTabColor : TColor read FNormalTabColor write FNormalTabColor default clBlue; + property OwnerTabColor : Boolean read FOwnerTabColor write FOwnerTabColor default false; + end; { TFormPage } TFormPage = class(TGradTabPage) private - FDestroyPageAtDestroy: Boolean; - FOldForm : TCustomForm; - FShowPageAtDestroy: Boolean; + FDestroyPageAtDestroy: Boolean; + FOldForm : TCustomForm; + FShowPageAtDestroy: Boolean; public - constructor Create(AOwner: TComponent); override; - destructor Destroy; override; - procedure FormToPage(TheForm : TCustomForm); - procedure PageToForm(AShow : Boolean); + constructor Create(AOwner: TComponent); override; + destructor Destroy; override; + procedure FormToPage(TheForm : TCustomForm); + procedure PageToForm(AShow : Boolean); published - property TheForm : TCustomForm read FOldForm; - property ShowPageAtDestroy : Boolean read FShowPageAtDestroy write FShowPageAtDestroy default false; - property DestroyPageAtDestroy : Boolean read FDestroyPageAtDestroy write FDestroyPageAtDestroy default false; + property TheForm : TCustomForm read FOldForm; + property ShowPageAtDestroy : Boolean read FShowPageAtDestroy write FShowPageAtDestroy default false; + property DestroyPageAtDestroy : Boolean read FDestroyPageAtDestroy write FDestroyPageAtDestroy default false; end; { TGradTabPagesBar } @@ -178,53 +191,53 @@ type } TGradTabPagesBar = class(TCustomControl) private - FActiveTabColor: TColor; - FNormalTabColor: TColor; - FPageList : TListWithEvent; - FTabControl : TGradTabControl; - FShowFromButton, FMovedTo : Integer; - FTabPosition : TTabPosition; - FTabHeight,FLongWidth : Integer; - FActiveIndex: Integer; + FActiveTabColor: TColor; + FNormalTabColor: TColor; + FPageList : TListWithEvent; + FTabControl : TGradTabControl; + FShowFromButton, FMovedTo : Integer; + FTabPosition : TTabPosition; + FTabHeight,FLongWidth : Integer; + FActiveIndex: Integer; protected - procedure InsertButton(AButton: TGradTabPageButton; Index: Integer); - procedure OrderButtons; - procedure UnFocusButton(Index: Integer); - procedure FocusButton(Index: Integer); - procedure SetTabPosition(Value: TTabPosition); - function IsVisible(Index: Integer) : Boolean; - procedure ChangeLeftTop(LastTabPosition : TTabPosition); - function GetViewedTabs : TTabs; - function GetViewableTabs(FromIndex : Integer) : TTabs; - function GetTabsOfSide(FromIndex : Integer; FromLeftSide : Boolean) : TTabs; - procedure ScrollToTab(PIndex : Integer); + procedure InsertButton(AButton: TGradTabPageButton; Index: Integer); + procedure OrderButtons; + procedure UnFocusButton(Index: Integer); + procedure FocusButton(Index: Integer); + procedure SetTabPosition(Value: TTabPosition); + function IsVisible(Index: Integer) : Boolean; + procedure ChangeLeftTop(LastTabPosition : TTabPosition); + function GetViewedTabs : TTabs; + function GetViewableTabs(FromIndex : Integer) : TTabs; + function GetTabsOfSide(FromIndex : Integer; FromLeftSide : Boolean) : TTabs; + procedure ScrollToTab(PIndex : Integer); public - constructor Create(AOwner: TComponent; var thePageList: TListWithEvent; - TheTabControl : TGradTabControl); - procedure Paint; override; - procedure Resize; override; - procedure MoveToNext; - procedure MoveToPrior; - procedure MoveTo(Num: Integer); - procedure MoveToNorm; - property TabPosition : TTabPosition read FTabPosition write SetTabPosition; + constructor Create(AOwner: TComponent; var thePageList: TListWithEvent; + TheTabControl : TGradTabControl); + procedure Paint; override; + procedure Resize; override; + procedure MoveToNext; + procedure MoveToPrior; + procedure MoveTo(Num: Integer); + procedure MoveToNorm; + property TabPosition : TTabPosition read FTabPosition write SetTabPosition; published - property OnStartDock; - property OnStartDrag; - property OnDockDrop; - property OnDockOver; - property OnDragDrop; - property OnDragOver; - property OnEndDock; - property OnEndDrag; - property OnMouseDown; - property OnMouseUp; - property OnMouseMove; - property OnMouseWheel; - property OnMouseWheelUp; - property OnMouseWheelDown; - property ActiveTabColor : TColor read FActiveTabColor write FActiveTabColor default clGreen; - property NormalTabColor : TColor read FNormalTabColor write FNormalTabColor default clBlue; + property OnStartDock; + property OnStartDrag; + property OnDockDrop; + property OnDockOver; + property OnDragDrop; + property OnDragOver; + property OnEndDock; + property OnEndDrag; + property OnMouseDown; + property OnMouseUp; + property OnMouseMove; + property OnMouseWheel; + property OnMouseWheelUp; + property OnMouseWheelDown; + property ActiveTabColor : TColor read FActiveTabColor write FActiveTabColor default clGreen; + property NormalTabColor : TColor read FNormalTabColor write FNormalTabColor default clBlue; end; // Is parent of the Next/Prev Buttons @@ -234,9 +247,9 @@ type } TGradTabBar = class(TCustomControl) public - constructor Create(AOwner: TComponent); override; - destructor Destroy; override; - procedure Paint; override; + constructor Create(AOwner: TComponent); override; + destructor Destroy; override; + procedure Paint; override; end; TGradTabPages = class(TStrings) @@ -262,157 +275,161 @@ type TGradTabControl = class(TCustomControl) private - FAutoShowScrollButton: Boolean; - FImages: TImageList; - FMoveIncrement: Integer; - FLeftButton, FRightButton : TGradButton; - FOnPageChanged: TNotifyEvent; - FShowLeftTopScrollButton: Boolean; - FShowRightBottomScrollButton: Boolean; - FTabStrings : TStrings; //TGradTabPages - FPageList: TList; //Is Managed by TGradTabPages - FOnTabButtonClick : TGradTabPageButtonClickEvent; - FOnTabButtonMouseDown, - FOnTabButtonMouseUp : TGradTabPageButtonMouseDownUpEvent; - FOnTabButtonMouseMove : TGradTabPageButtonMouseMoveEvent; - FPageIndex, fPageIndexOnLastChange, fPageIndexOnLastShow, - FTabHeight, FLongWidth : Integer; - FBar : TGradTabBar; - FImageChangeLink : TChangeLink; - FPagesBar: TGradTabPagesBar; - FPagesPopup : TPopupMenu; - FTabPosition : TTabPosition; - FLongTabs : Boolean; - procedure AssignEvents(TheControl : TCustomControl); - procedure AlignPage(APage : TGradTabPage; ARect : TRect); - procedure AlignPages; - function GetActiveTabColor: TColor; - function GetNormalTabColor: TColor; - procedure ImageListChange(Sender: TObject); - procedure SetActiveTabColor(const AValue: TColor); - procedure SetNormalTabColor(const AValue: TColor); - procedure UpdateTabImages; - function GetCurrentPage : TGradTabPage; - function GetPage(AIndex: Integer) : TGradTabPage; - function GetCount : Integer; - function GetPagesBarDragOver: TDragOverEvent; - procedure MoveTab(Sender: TObject; NewIndex: Integer); - function FindVisiblePage(Index: Integer): Integer; - procedure PageButtonMouseDown(Sender: TObject; Button: TMouseButton; - Shift: TShiftState; X, Y: Integer); - procedure PageButtonMouseUp(Sender: TObject; Button: TMouseButton; - Shift: TShiftState; X, Y: Integer); - procedure PageButtonMouseClick(Sender: TObject); - procedure PopupMouseClick(Sender: TObject); - procedure PageButtonMouseMove(Sender: TObject; Shift: TShiftState; - X, Y: Integer); - procedure SetAutoShowScrollButtons(const AValue: Boolean); - procedure SetImages(const AValue: TImageList); - procedure SetLongWidth(const AValue: Integer); - procedure SetShowLeftTopScrollButton(const AValue: Boolean); - procedure SetShowRightBottomScrollButton(const AValue: Boolean); + FAutoShowScrollButton: Boolean; + FImages: TImageList; + FMoveIncrement: Integer; + FLeftButton, FRightButton : TGradButton; + FOnTabCloseButtonClick: TGradTabPageButtonClickEvent; + FOnPageChanged: TNotifyEvent; + FShowLeftTopScrollButton: Boolean; + FShowRightBottomScrollButton: Boolean; + FTabStrings : TStrings; //TGradTabPages + FPageList: TList; //Is Managed by TGradTabPages + FOnTabButtonClick : TGradTabPageButtonClickEvent; + FOnTabButtonMouseDown, + FOnTabButtonMouseUp : TGradTabPageButtonMouseDownUpEvent; + FOnTabButtonMouseMove : TGradTabPageButtonMouseMoveEvent; + FPageIndex, fPageIndexOnLastChange, fPageIndexOnLastShow, + FTabHeight, FLongWidth : Integer; + FBar : TGradTabBar; + FImageChangeLink : TChangeLink; + FPagesBar: TGradTabPagesBar; + FPagesPopup : TPopupMenu; + FTabPosition : TTabPosition; + FLongTabs : Boolean; + procedure AssignEvents(TheControl : TCustomControl); + procedure AlignPage(APage : TGradTabPage; ARect : TRect); + procedure AlignPages; + function GetActiveTabColor: TColor; + function GetNormalTabColor: TColor; + function GetTabPopupMenu: TPopupMenu; + procedure ImageListChange(Sender: TObject); + procedure SetActiveTabColor(const AValue: TColor); + procedure SetNormalTabColor(const AValue: TColor); + procedure SetTabPopupMenu(const AValue: TPopupMenu); + procedure UpdateTabImages; + function GetCurrentPage : TGradTabPage; + function GetPage(AIndex: Integer) : TGradTabPage; + function GetCount : Integer; + function GetPagesBarDragOver: TDragOverEvent; + procedure MoveTab(Sender: TObject; NewIndex: Integer); + function FindVisiblePage(Index: Integer): Integer; + procedure PageButtonMouseDown(Sender: TObject; Button: TMouseButton; + Shift: TShiftState; X, Y: Integer); + procedure PageButtonMouseUp(Sender: TObject; Button: TMouseButton; + Shift: TShiftState; X, Y: Integer); + procedure PageButtonMouseClick(Sender: TObject); + procedure PageCloseButtonMouseUp(Sender: TObject; Button: TMouseButton; + Shift: TShiftState; X, Y: Integer); + procedure PopupMouseClick(Sender: TObject); + procedure PageButtonMouseMove(Sender: TObject; Shift: TShiftState; + X, Y: Integer); + procedure SetAutoShowScrollButtons(const AValue: Boolean); + procedure SetImages(const AValue: TImageList); + procedure SetLongWidth(const AValue: Integer); + procedure SetShowLeftTopScrollButton(const AValue: Boolean); + procedure SetShowRightBottomScrollButton(const AValue: Boolean); - //SubControl Events - procedure SubMouseWheel(Sender: TObject; Shift: TShiftState; - WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean); - procedure SubMouseWheelUp(Sender: TObject; - Shift: TShiftState; MousePos: TPoint; var Handled: Boolean); - procedure SubMouseWheelDown(Sender: TObject; - Shift: TShiftState; MousePos: TPoint; var Handled: Boolean); - procedure SubMouseDown(Sender: TObject; Button: TMouseButton; - Shift: TShiftState; X, Y: Integer); - procedure SubMouseUp(Sender: TObject; Button: TMouseButton; - Shift: TShiftState; X, Y: Integer); - procedure SubMouseClick(Sender: TObject); - procedure SubMouseDblClick(Sender: TObject); - procedure SubMouseMove(Sender: TObject; Shift: TShiftState; - X, Y: Integer); - procedure SubDragOver(Sender, Source: TObject; - X,Y: Integer; State: TDragState; var Accept: Boolean); - procedure SubDragDrop(Sender, Source: TObject; X,Y: Integer); - //End + //SubControl Events + procedure SubMouseWheel(Sender: TObject; Shift: TShiftState; + WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean); + procedure SubMouseWheelUp(Sender: TObject; + Shift: TShiftState; MousePos: TPoint; var Handled: Boolean); + procedure SubMouseWheelDown(Sender: TObject; + Shift: TShiftState; MousePos: TPoint; var Handled: Boolean); + procedure SubMouseDown(Sender: TObject; Button: TMouseButton; + Shift: TShiftState; X, Y: Integer); + procedure SubMouseUp(Sender: TObject; Button: TMouseButton; + Shift: TShiftState; X, Y: Integer); + procedure SubMouseClick(Sender: TObject); + procedure SubMouseDblClick(Sender: TObject); + procedure SubMouseMove(Sender: TObject; Shift: TShiftState; + X, Y: Integer); + procedure SubDragOver(Sender, Source: TObject; + X,Y: Integer; State: TDragState; var Accept: Boolean); + procedure SubDragDrop(Sender, Source: TObject; X,Y: Integer); + //End - procedure PopupTabs(Sender: TObject); - procedure MoveLeftTopClick(Sender: TObject); - procedure MoveRightBottomClick(Sender: TObject); - procedure PageRemoved(Index: Integer); - procedure SetCurrentPage(Value : TGradTabPage); - procedure SetCurrentPageNum(Value: Integer); - procedure SetPagesBarDragOver(const AValue: TDragOverEvent); - procedure ShowPage(Index: Integer); - procedure ShowCurrentPage; - procedure UnShowPage(Index: Integer); + procedure PopupTabs(Sender: TObject); + procedure MoveLeftTopClick(Sender: TObject); + procedure MoveRightBottomClick(Sender: TObject); + procedure PageRemoved(Index: Integer); + procedure SetCurrentPage(Value : TGradTabPage); + procedure SetCurrentPageNum(Value: Integer); + procedure SetPagesBarDragOver(const AValue: TDragOverEvent); + procedure ShowPage(Index: Integer); + procedure ShowCurrentPage; + procedure UnShowPage(Index: Integer); protected - function ChildClassAllowed(ChildClass: TClass): boolean; override; - procedure InsertPage(APage: TGradTabPage; Index: Integer); - procedure AddRemovePageHandle(APage: TGradTabPage); - procedure RemovePage(Index: Integer); - procedure InvPaint; - procedure SetTabHeight(Value: Integer); - procedure SetTabs(Value: TStrings); - procedure SetTabPosition(Value : TTabPosition); - procedure SetLongTabs(Value : Boolean); - procedure Change; - procedure UpdateTabProperties; + function ChildClassAllowed(ChildClass: TClass): boolean; override; + procedure InsertPage(APage: TGradTabPage; Index: Integer); + procedure AddRemovePageHandle(APage: TGradTabPage); + procedure RemovePage(Index: Integer); + procedure InvPaint; + procedure SetTabHeight(Value: Integer); + procedure SetTabs(Value: TStrings); + procedure SetTabPosition(Value : TTabPosition); + procedure SetLongTabs(Value : Boolean); + procedure Change; + procedure UpdateTabProperties; public - constructor Create(AOwner: TComponent); override; - destructor Destroy; override; - function GetTabRect(AIndex : Integer) : TRect; - function AddPage(AName: String) : Integer; - function AddPage(APage: TGradTabPage) : Integer; - function GetTabBarSize(TabPos : TTabPosition) : Integer; - function GetClientRect: TRect; override; - procedure Paint; override; - procedure Resize; override; - procedure UpdateAllDesignerFlags; - procedure UpdateDesignerFlags(APageIndex: integer); + constructor Create(AOwner: TComponent); override; + destructor Destroy; override; + function GetTabRect(AIndex : Integer) : TRect; + function AddPage(AName: String) : Integer; + function AddPage(APage: TGradTabPage) : Integer; + function GetTabBarSize(TabPos : TTabPosition) : Integer; + function GetClientRect: TRect; override; + procedure Paint; override; + procedure Resize; override; + procedure UpdateAllDesignerFlags; + procedure UpdateDesignerFlags(APageIndex: integer); - property Page[Index: Integer] : TGradTabPage read GetPage; - property Bar : TGradTabBar read FBar; - property PagesBar : TGradTabPagesBar read FPagesBar; - property PageList: TList read FPageList; - property Tabs : TStrings read FTabStrings write SetTabs; - property PageCount : Integer read GetCount; + property Page[Index: Integer] : TGradTabPage read GetPage; + property Bar : TGradTabBar read FBar; + property PagesBar : TGradTabPagesBar read FPagesBar; + property PageList: TList read FPageList; + property Tabs : TStrings read FTabStrings write SetTabs; + property PageCount : Integer read GetCount; published - property Align; - property ControlState; - property ControlStyle; - property ActivePage : TGradTabPage read GetCurrentPage write SetCurrentPage; - property OnTabButtonClick : TGradTabPageButtonClickEvent read FOnTabButtonClick write FOnTabButtonClick; - property OnTabButtonMouseDown : TGradTabPageButtonMouseDownUpEvent read FOnTabButtonMouseDown write FOnTabButtonMouseDown; - property OnTabButtonMouseUp : TGradTabPageButtonMouseDownUpEvent read FOnTabButtonMouseUp write FOnTabButtonMouseUp; - property OnTabButtonMouseMove : TGradTabPageButtonMouseMoveEvent read FOnTabButtonMouseMove write FOnTabButtonMouseMove; - property OnStartDock; - property OnStartDrag; - property OnDockDrop; - property OnDockOver; - property OnDragDrop; - property OnDragOver; - property OnEndDock; - property OnEndDrag; - property OnMouseDown; - property OnMouseUp; - property OnMouseMove; - property OnMouseWheel; - property OnMouseWheelUp; - property OnMouseWheelDown; - property OnClick; - property OnDblClick; + property Align; + property ActivePage : TGradTabPage read GetCurrentPage write SetCurrentPage; + property OnTabButtonClick : TGradTabPageButtonClickEvent read FOnTabButtonClick write FOnTabButtonClick; + property OnTabButtonMouseDown : TGradTabPageButtonMouseDownUpEvent read FOnTabButtonMouseDown write FOnTabButtonMouseDown; + property OnTabButtonMouseUp : TGradTabPageButtonMouseDownUpEvent read FOnTabButtonMouseUp write FOnTabButtonMouseUp; + property OnTabButtonMouseMove : TGradTabPageButtonMouseMoveEvent read FOnTabButtonMouseMove write FOnTabButtonMouseMove; + property OnTabCloseButtonClick : TGradTabPageButtonClickEvent read FOnTabCloseButtonClick write FOnTabCloseButtonClick; + property OnStartDock; + property OnStartDrag; + property OnDockDrop; + property OnDockOver; + property OnDragDrop; + property OnDragOver; + property OnEndDock; + property OnEndDrag; + property OnMouseDown; + property OnMouseUp; + property OnMouseMove; + property OnMouseWheel; + property OnMouseWheelUp; + property OnMouseWheelDown; + property OnClick; + property OnDblClick; + property TabPopupMenu : TPopupMenu read GetTabPopupMenu write SetTabPopupMenu; - property PageIndex : Integer read FPageIndex write SetCurrentPageNum; - property TabHeight : Integer read FTabHeight write SetTabHeight; - property TabPosition : TTabPosition read FTabPosition write SetTabPosition default tpTop; - property LongTabs : Boolean read FLongTabs write SetLongTabs; - property LongWidth: Integer read FLongWidth write SetLongWidth; - property MoveIncrement : Integer read FMoveIncrement write FMoveIncrement; - property OnPageChanged: TNotifyEvent read FOnPageChanged write FOnPageChanged; - property AutoShowScrollButtons : Boolean read FAutoShowScrollButton write SetAutoShowScrollButtons default true; - property ShowLeftTopScrollButton : Boolean read FShowLeftTopScrollButton write SetShowLeftTopScrollButton; - property ShowRightBottomScrollButton : Boolean read FShowRightBottomScrollButton write SetShowRightBottomScrollButton; - 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 ShowTabs : Boolean; { TODO } + property PageIndex : Integer read FPageIndex write SetCurrentPageNum; + property TabHeight : Integer read FTabHeight write SetTabHeight; + property TabPosition : TTabPosition read FTabPosition write SetTabPosition default tpTop; + property LongTabs : Boolean read FLongTabs write SetLongTabs; + property LongWidth: Integer read FLongWidth write SetLongWidth; + //property MoveIncrement : Integer read FMoveIncrement write FMoveIncrement; + property OnPageChanged: TNotifyEvent read FOnPageChanged write FOnPageChanged; + property AutoShowScrollButtons : Boolean read FAutoShowScrollButton write SetAutoShowScrollButtons default true; + property ShowLeftTopScrollButton : Boolean read FShowLeftTopScrollButton write SetShowLeftTopScrollButton; + property ShowRightBottomScrollButton : Boolean read FShowRightBottomScrollButton write SetShowRightBottomScrollButton; + 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; end; procedure Register; @@ -424,10 +441,7 @@ type implementation uses - gradtabcontroleditor, ComponentEditors, math; - -const - FPageCount : Integer = 0; + gradtabcontroleditor, ComponentEditors; {------------------------------------------------------------------------------- Register @@ -485,38 +499,22 @@ end; TGradTabPageButton Create(AOwner: TComponent ------------------------------------------------------------------------------} constructor TGradTabPageButton.Create(AOwner: TComponent); -var - tempPic : TPicture; begin - inherited Create(AOwner); + inherited Create(AOwner); - ControlStyle := ControlStyle+[csNoDesignSelectable,csDesignInteractive]-[csCaptureMouse]; - FCloseButton := TGradButton.Create(Self); - FCloseButton.Width:=12; - FCloseButton.Height:=12; - TextAlignment:=taCenter; - FCloseButton.Left:=1; - FCloseButton.Top:=1; - FCloseButton.Caption:=''; + ControlStyle := ControlStyle+[csNoDesignSelectable,csDesignInteractive]-[csCaptureMouse]; + FCloseButton := TGradTabCloseButton.Create(Self); + FCloseButton.Width:=14; + FCloseButton.Height:=14; + TextAlignment:=taCenter; + FCloseButton.Left:=1; + FCloseButton.Top:=1; + FCloseButton.Caption:=''; - FCloseButton.ShowGlyph:=true; + FShowCloseButton:=false; + FShowCloseButtonOnMouseOver:=false; - try - tempPic := TPicture.Create; - - tempPic.LoadFromLazarusResource('close_btn'); - - FCloseButton.Glyph.Assign(tempPic.Graphic); - finally - tempPic.Free; - end; - - FCloseButton.BorderSides:=[]; - FCloseButton.Color:=clRed; - - FShowCloseButton:=false; - - SetSubComponent(true); + SetSubComponent(true); end; destructor TGradTabPageButton.Destroy; @@ -531,34 +529,34 @@ end; ------------------------------------------------------------------------------} procedure TGradTabPageButton.AlignCloseButton; var - TheRect : TRect; - DisplayWidth, DisplayHeight: Integer; - NewTop,NewLeft : Integer; + TheRect : TRect; + DisplayWidth, DisplayHeight: Integer; + NewTop,NewLeft : Integer; begin - if not HasParent then Exit; + if not HasParent then Exit; - GetBackgroundRect(TheRect); + GetBackgroundRect(TheRect); - DisplayWidth:= TheRect.Right-TheRect.Left; - DisplayHeight:=TheRect.Bottom-TheRect.Top; + DisplayWidth:= TheRect.Right-TheRect.Left; + DisplayHeight:=TheRect.Bottom-TheRect.Top; - case RotateDirection of - rdNormal: begin - NewTop:=(DisplayHeight div 2)-(FCloseButton.Height div 2)-1; - NewLeft:=DisplayWidth-(FCloseButton.Width)+1; - end; - rdRight: begin - NewTop:=DisplayHeight-(FCloseButton.Height)+1; - NewLeft:=(DisplayWidth div 2)-(FCloseButton.Width div 2); - end; - rdLeft: begin - NewTop:=1; - NewLeft:=(DisplayWidth div 2)-(FCloseButton.Width div 2); - end; - end; + case RotateDirection of + rdNormal: begin + NewTop:=(DisplayHeight div 2)-(FCloseButton.Height div 2); + NewLeft:=DisplayWidth-(FCloseButton.Width); + end; + rdRight: begin + NewTop:=DisplayHeight-(FCloseButton.Height); + NewLeft:=(DisplayWidth div 2)-(FCloseButton.Width div 2); + end; + rdLeft: begin + NewTop:=1; + NewLeft:=(DisplayWidth div 2)-(FCloseButton.Width div 2); + end; + end; - FCloseButton.Top:=NewTop+TheRect.Top; - FCloseButton.Left:=NewLeft+TheRect.Left; + FCloseButton.Top:=NewTop+TheRect.Top; + FCloseButton.Left:=NewLeft+TheRect.Left; end; {------------------------------------------------------------------------------- @@ -566,16 +564,32 @@ end; ------------------------------------------------------------------------------} procedure TGradTabPageButton.SetShowCloseButton(AValue: Boolean); begin - if AValue = FShowCloseButton then Exit; - FShowCloseButton:=AValue; + if AValue = FShowCloseButton then Exit; + FShowCloseButton:=AValue; - if AValue then - begin - AlignCloseButton; - FCloseButton.Parent:=Self; - end else begin - FCloseButton.Parent:=nil; - end; + if AValue then + begin + AlignCloseButton; + FCloseButton.Parent:=Self; + end else begin + FCloseButton.Parent:=nil; + end; +end; + +procedure TGradTabPageButton.SetShowCloseButtonOnMouseOver(const AValue: Boolean + ); +begin + {* + IF ShowCloseButton AND ShowCloseButtonOnMouseOver + then the CloseButton is Invisible until the Mouse is Over the CloseButton + *} + + if FShowCloseButtonOnMouseOver=AValue then exit; + if not FShowCloseButton then Exit; + + FShowCloseButtonOnMouseOver:=AValue; + + FCloseButton.Visible:=false; end; {------------------------------------------------------------------------------- @@ -583,30 +597,18 @@ end; ------------------------------------------------------------------------------} procedure TGradTabPageButton.Resize; begin - inherited Resize; + inherited Resize; - AlignCloseButton; + AlignCloseButton; end; procedure TGradTabPageButton.SetBounds(aLeft, aTop, aWidth, aHeight: integer); var ParentControl : TGradTabControl; begin - {if Parent = nil then Exit; - ParentControl := TGradTabPagesBar(Parent).FTabControl; - - if ParentControl.TabPosition in [tpLeft, tpRight] then - begin - if ParentControl.LongTabs then - begin - if ParentControl.LongWidth <> aWidth then - if ParentControl.LongWidth < aWidth then - begin - ParentControl.LongWidth:=aWidth; - end; - end; - end;} inherited SetBounds(aLeft, aTop, aWidth, aHeight); + + AlignCloseButton; end; {------------------------------------------------------------------------------- @@ -614,11 +616,16 @@ end; ------------------------------------------------------------------------------} procedure TGradTabPageButton.SetRotateDirection(const Value: TRotateDirection); begin - inherited; + inherited; - FCloseButton.RotateDirection:=Value; - if FShowCloseButton then - AlignCloseButton; + case Value of + rdNormal: TextAlignment := taLeftJustify; + rdLeft, rdRight: TextAlignment := taCenter; + end; + + FCloseButton.RotateDirection:=Value; + if FShowCloseButton then + AlignCloseButton; end; {------------------------------------------------------------------------------- @@ -645,14 +652,20 @@ end; procedure TGradTabPageButton.SetAutoHeightBorderSpacing(const AValue: Integer); begin - inherited SetAutoHeightBorderSpacing(AValue); + if ShowGlyph then + inherited SetAutoHeightBorderSpacing(AValue+Glyph.Height) + else + inherited SetAutoHeightBorderSpacing(AValue); if Parent <> nil then (Parent AS TGradTabPagesBar).OrderButtons; end; procedure TGradTabPageButton.SetAutoWidthBorderSpacing(const AValue: Integer); begin - inherited SetAutoWidthBorderSpacing(AValue); + if ShowGlyph then + inherited SetAutoWidthBorderSpacing(AValue+Glyph.Width) + else + inherited SetAutoWidthBorderSpacing(AValue); if Parent <> nil then (Parent AS TGradTabPagesBar).OrderButtons; end; @@ -664,28 +677,79 @@ begin if Parent <> nil then (Parent AS TGradTabPagesBar).OrderButtons; end; +procedure TGradTabPageButton.CloseBtnBackgroundPaint(Sender: TGradButton; + TargetCanvas: TCanvas; R: TRect; BState: TButtonState); +begin + // nothing +end; + +procedure TGradTabPageButton.GetContentRect(var TheRect: TRect); +begin + inherited GetContentRect(TheRect); + + if ShowGlyph then + begin + case RotateDirection of + rdNormal: begin + TheRect.Right:=TheRect.Right-(FCloseButton.Glyph.Width); + end; + rdLeft: begin + TheRect.Top:= TheRect.Top+(FCloseButton.Glyph.Height); + end; + rdRight: begin + TheRect.Bottom:= TheRect.Bottom-(FCloseButton.Glyph.Height); + end; + end; + end; +end; + +procedure TGradTabPageButton.SetBaseColor(const Value: TColor); +begin + inherited SetBaseColor(Value); + + FCloseButton.Color:=Value; +end; + +procedure TGradTabPageButton.MouseMove(Shift: TShiftState; X, Y: Integer); +var + CloseBtnRect : TRect; +begin + inherited MouseMove(Shift, X, Y); + + if not FShowCloseButton then Exit; + if not FShowCloseButtonOnMouseOver then Exit; + + CloseBtnRect.Top:=FCloseButton.Top; + CloseBtnRect.Left:=FCloseButton.Left; + CloseBtnRect.Right:=FCloseButton.Left+FCloseButton.Width; + CloseBtnRect.Bottom:=FCloseButton.Top+FCloseButton.Height; + + FCloseButton.Visible:=PtInRect(CloseBtnRect, Point(X,Y)); +end; + {------------------------------------------------------------------------------- TGradTabPage Create(AOwner: TGradTabPageButton) ------------------------------------------------------------------------------} constructor TGradTabPage.Create(AOwner: TComponent); begin - inherited Create(AOwner); + inherited Create(AOwner); - FCurrentlyDestroying := false; - fCompStyle := csPage; - ControlStyle := ControlStyle + [csAcceptsControls,csDesignFixedBounds,csNoDesignVisible]; + FCurrentlyDestroying := false; + fCompStyle := csPage; + ControlStyle := ControlStyle + [csAcceptsControls,csDesignFixedBounds,csNoDesignVisible]; - Align := alClient; + Align := alClient; - FButton := TGradTabPageButton.Create(Self); + FButton := TGradTabPageButton.Create(Self); + FButton.Page := Self; - FTabVisible:=true; - FShowCloseButton:=false; - FImageIndex:=0; + FTabVisible:=true; + FShowCloseButton:=false; + FImageIndex:=0; - FActiveTabColor:=clGreen; - FNormalTabColor:=clBlue; - FOwnerTabColor:=false; + FActiveTabColor:=clGreen; + FNormalTabColor:=clBlue; + FOwnerTabColor:=false; end; {------------------------------------------------------------------------------- @@ -916,6 +980,14 @@ begin end; end; +procedure TGradTabPage.SetShowCloseButtonOnMouseOver(const AValue: Boolean); +begin + if FShowCloseButtonOnMouseOver=AValue then exit; + FShowCloseButtonOnMouseOver:=AValue; + + FButton.ShowCloseButtonOnMouseOver:=AValue; +end; + procedure TGradTabPage.SetTabButtonLayout(const AValue: TButtonLayout); begin FButton.ButtonLayout:=AValue; @@ -1122,36 +1194,40 @@ end; ------------------------------------------------------------------------------} procedure TGradTabPagesBar.InsertButton(AButton: TGradTabPageButton; Index: Integer); var - LastLeft : Integer; + LastLeft : Integer; begin - LastLeft := 0; + LastLeft := 0; - if (Index >= 1) AND (FPageList.Count>=1) then - LastLeft := TGradTabPage(FPageList.Items[Index-1]).TabButton.Left; + if (Index >= 1) AND (FPageList.Count>=1) then + LastLeft := TGradTabPage(FPageList.Items[Index-1]).TabButton.Left; - FTabControl.AssignEvents(AButton); + FTabControl.AssignEvents(AButton); - 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; - end; + 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; + end; - if (Index >= 1) AND (FPageList.Count>=1) then - UnFocusButton(Index-1); + if Assigned(PopupMenu) then + AButton.PopupMenu := PopupMenu; - FocusButton(Index); + if (Index >= 1) AND (FPageList.Count>=1) then + UnFocusButton(Index-1); - OrderButtons; + FocusButton(Index); - {$IFDEF DEBUGTAB}WriteLn('TGradTabPagesBar.InsertButton');{$ENDIF} + OrderButtons; + + {$IFDEF DEBUGTAB}WriteLn('TGradTabPagesBar.InsertButton');{$ENDIF} end; procedure TGradTabPagesBar.MoveTo(Num: Integer); @@ -1819,8 +1895,6 @@ end; procedure TGradTabPages.Delete(Index: Integer); var APage: TGradTabPage; - AButton : TGradTabPageButton; - CurrentPageNum,i : Integer; begin // Make sure Index is in the range of valid pages to delete {$IFDEF DEBUGTAB} @@ -1854,7 +1928,6 @@ end; procedure TGradTabPages.Insert(Index: Integer; const S: String); var NewPage: TGradTabPage; - NewButton: TGradTabPageButton; NewOwner: TComponent; begin {$IFDEF DEBUGTAB} @@ -2102,6 +2175,11 @@ begin Result := FPagesBar.NormalTabColor; end; +function TGradTabControl.GetTabPopupMenu: TPopupMenu; +begin + Result := FPagesBar.PopupMenu; +end; + procedure TGradTabControl.ImageListChange(Sender: TObject); begin UpdateTabImages; @@ -2117,6 +2195,16 @@ begin FPagesBar.NormalTabColor:=AValue; end; +procedure TGradTabControl.SetTabPopupMenu(const AValue: TPopupMenu); +var + i : Integer; +begin + FPagesBar.PopupMenu := AValue; + + for i := 0 to PageCount -1 do + Page[i].TabButton.PopupMenu := AValue; +end; + procedure TGradTabControl.UpdateTabImages; var i : Integer; @@ -2144,14 +2232,11 @@ end; TGradTabControl GetPage(AIndex: Integer) : TGradTabPage ------------------------------------------------------------------------------} function TGradTabControl.GetPage(AIndex: Integer) : TGradTabPage; -var - LastTabPage : TGradTabPage; - LastTab : Integer; begin - Result := nil; + Result := nil; - if (AIndex >= 0) AND (AIndex < FPageList.Count) then - Result := TGradTabPage(FPageList.Items[AIndex]); + if (AIndex >= 0) AND (AIndex < FPageList.Count) then + Result := TGradTabPage(FPageList.Items[AIndex]); end; {------------------------------------------------------------------------------ @@ -2237,6 +2322,17 @@ begin FOnTabButtonClick(Self, FPageList.IndexOf(AButton.Owner)); end; +procedure TGradTabControl.PageCloseButtonMouseUp(Sender: TObject; + Button: TMouseButton; Shift: TShiftState; X, Y: Integer); +var + AButton : TGradTabPageButton; +begin + AButton := TGradTabPageButton(TControl(Sender).Parent); + + if Assigned(FOnTabCloseButtonClick) then + FOnTabCloseButtonClick(Self, FPageList.IndexOf(AButton.Owner)); +end; + procedure TGradTabControl.PopupMouseClick(Sender: TObject); var AButton : TGradTabPageButton; @@ -2538,8 +2634,6 @@ end; procedure TGradTabControl.InsertPage(APage: TGradTabPage; Index: Integer); var NewZPosition: integer; - cRect : TRect; - tempName : String; begin if FPageList.IndexOf(APage)>=0 then exit; {$IFDEF DEBUGTAB} @@ -2819,7 +2913,7 @@ end; ------------------------------------------------------------------------------} function TGradTabControl.AddPage(AName: String) : Integer; begin - Result := FTabStrings.Add(AName); + Result := FTabStrings.Add(AName); end; {------------------------------------------------------------------------------ @@ -2827,8 +2921,8 @@ end; ------------------------------------------------------------------------------} function TGradTabControl.AddPage(APage: TGradTabPage) : Integer; begin - Result := FPageList.Count; - FPageList.Insert(Result, APage); + Result := FPageList.Count; + FPageList.Insert(Result, APage); end; function TGradTabControl.GetTabBarSize(TabPos: TTabPosition): Integer; @@ -2885,7 +2979,6 @@ end; ------------------------------------------------------------------------------} procedure TGradTabControl.Paint; var - i,j : Integer; AClientRect : TRect; begin Canvas.Brush.Color:=Color; @@ -3080,6 +3173,34 @@ begin FOldForm := nil; end; +{ TGradTabCloseButton } + +constructor TGradTabCloseButton.Create(AOwner: TComponent); +var + tempPic : TPicture; +begin + + //FOwnerBackgroundDraw:=true; + + inherited Create(AOwner); + + try + tempPic := TPicture.Create; + + tempPic.LoadFromLazarusResource('btn_cancel'); + + Glyph.Assign(tempPic.Graphic); + finally + tempPic.Free; + end; + + ShowGlyph:=true; + BorderSides:=[]; + //Color:=clRed; + + SetSubComponent(true); +end; + initialization {$I ugradtabcontrol.lrs} diff --git a/components/gradcontrols/src/urotatebitmap.pas b/components/gradcontrols/src/urotatebitmap.pas index b31bf3738..93876e223 100644 --- a/components/gradcontrols/src/urotatebitmap.pas +++ b/components/gradcontrols/src/urotatebitmap.pas @@ -113,6 +113,7 @@ begin RotateImg := TLazIntfImage.Create(NormalImg.Height, NormalImg.Width); RotateImg.DataDescription := NormalImg.DataDescription; RotateImg.SetSize(NormalImg.Height, NormalImg.Width); + RotateImg.FillPixels(TColorToFPColor(clBlack)); for px := 0 to NormalImg.Width - 1 do for py := 0 to NormalImg.Height - 1 do @@ -277,6 +278,9 @@ begin UpdateActiveBitmap; R := Rect(0, 0, FActiveBitmap.Width, FActiveBitmap.Height); P := Point(X, Y); + //DebugLn(DbgS(R)); + //DebugLn(DbgS(P)); + //DebugLn('Transparent: '+BoolToStr(Transparent, true)); FGlyph.Draw(Canvas, R, P, FButtonState, Transparent, 0); end;