From 328192f4569efae9889e1da673c3229d28eafb3d Mon Sep 17 00:00:00 2001 From: wp_xyz Date: Sun, 9 Feb 2025 15:57:40 +0100 Subject: [PATCH] LCL/TreeView: Add custom drawing demo project. Put existing add_remove demo project into separate folder. --- examples/treeview/TV_Add_Remove.res | Bin 876 -> 0 bytes .../{ => add_remove_nodes}/README.txt | 0 .../{ => add_remove_nodes}/TV_Add_Remove.dpr | 3 + .../add_remove_nodes/TV_Add_Remove.res | Bin 0 -> 1824 bytes .../TV_Add_Remove_U1.dfm | Bin .../{ => add_remove_nodes}/treeview.ex-meta | 0 .../{ => add_remove_nodes}/tv_add_remove.lpi | 21 +- .../tv_add_remove_u1.lfm | 6 +- .../tv_add_remove_u1.pas | 2 +- examples/treeview/customdrawing/main.lfm | 336 +++++++++++ examples/treeview/customdrawing/main.pas | 548 ++++++++++++++++++ examples/treeview/customdrawing/paw-gray.png | Bin 0 -> 5261 bytes .../treeview/customdrawing/treeview.ex-meta | 9 + .../treeview_customdraw_demo.lpi | 80 +++ .../treeview_customdraw_demo.lpr | 28 + examples/treeview/customdrawing/water1.jpg | Bin 0 -> 47631 bytes examples/treeview/customdrawing/water2.jpg | Bin 0 -> 4210 bytes 17 files changed, 1022 insertions(+), 11 deletions(-) delete mode 100644 examples/treeview/TV_Add_Remove.res rename examples/treeview/{ => add_remove_nodes}/README.txt (100%) rename examples/treeview/{ => add_remove_nodes}/TV_Add_Remove.dpr (85%) create mode 100644 examples/treeview/add_remove_nodes/TV_Add_Remove.res rename examples/treeview/{ => add_remove_nodes}/TV_Add_Remove_U1.dfm (100%) rename examples/treeview/{ => add_remove_nodes}/treeview.ex-meta (100%) rename examples/treeview/{ => add_remove_nodes}/tv_add_remove.lpi (79%) rename examples/treeview/{ => add_remove_nodes}/tv_add_remove_u1.lfm (96%) rename examples/treeview/{ => add_remove_nodes}/tv_add_remove_u1.pas (97%) create mode 100644 examples/treeview/customdrawing/main.lfm create mode 100644 examples/treeview/customdrawing/main.pas create mode 100644 examples/treeview/customdrawing/paw-gray.png create mode 100644 examples/treeview/customdrawing/treeview.ex-meta create mode 100644 examples/treeview/customdrawing/treeview_customdraw_demo.lpi create mode 100644 examples/treeview/customdrawing/treeview_customdraw_demo.lpr create mode 100644 examples/treeview/customdrawing/water1.jpg create mode 100644 examples/treeview/customdrawing/water2.jpg diff --git a/examples/treeview/TV_Add_Remove.res b/examples/treeview/TV_Add_Remove.res deleted file mode 100644 index 9f9f89428d75844ae5faa7d01cba049ffea93a4e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 876 zcmah|v1;Q$6dXkc=^#Wdt_;NGmG=j6xC1Ak#J`e4aO$k9Rw0GTu&B825H2h@6)yY{ zDX(;A85{4-+m(eAj?37yZ{M4FZ@16_z=$-)k=r-;b9U5ydOWKQho3HwrZ3!#$T8_* zz?ERnzmWm_Bgq?~p4NR)njEMfzydt`Mdhb-s%2PaNTf z2C);h6bdoK4w8RpSe{IfhWKQ{7#K9x&{)&}XBTOkcSnd$gUT~lgVkwBLm-&MvDKSp zt1^YhBx#%;t2|7Dryr9}Z_>2L(n|OGZQd5oyXvLam1-B2eqlep6O(-QyxUcJ&0Nk+ zR6AcRN}CTvS5J%iTKVuN*tqliJUX^_m94#AFC&uf-^Q4q>&RraZ!&%% diff --git a/examples/treeview/README.txt b/examples/treeview/add_remove_nodes/README.txt similarity index 100% rename from examples/treeview/README.txt rename to examples/treeview/add_remove_nodes/README.txt diff --git a/examples/treeview/TV_Add_Remove.dpr b/examples/treeview/add_remove_nodes/TV_Add_Remove.dpr similarity index 85% rename from examples/treeview/TV_Add_Remove.dpr rename to examples/treeview/add_remove_nodes/TV_Add_Remove.dpr index 68b50c2b78..cafae206af 100644 --- a/examples/treeview/TV_Add_Remove.dpr +++ b/examples/treeview/add_remove_nodes/TV_Add_Remove.dpr @@ -5,7 +5,10 @@ uses Forms, TV_Add_Remove_U1 in 'TV_Add_Remove_U1.pas' {Form1}; +{$R *.res} + begin + Application.Scaled:=True; Application.Title:='TV_Add_Remove'; Application.Initialize; Application.CreateForm(TForm1, Form1); diff --git a/examples/treeview/add_remove_nodes/TV_Add_Remove.res b/examples/treeview/add_remove_nodes/TV_Add_Remove.res new file mode 100644 index 0000000000000000000000000000000000000000..18ed76a9f75066926afa01c1beff825fdaec3b9a GIT binary patch literal 1824 zcmbVNU61256dhi8KtkF_9*rN7obRN`D4kWc0;z(9k!D!LqhsH6A`&OqPG>8`f90Pn zHy`b!tCQW}3ApL6f=&DGV_6~X7zr|H4w+3%k(kMrN)nlHw=H*cPnx2C_||G-j8jO9x5x>c~I2Qc*Q&DUS$+!$zz`alpsnKkXTx;Ekg z8g5uq3Ei5uv`n_uR$1NFhCYQO8G>;+99>_ah#%o_-~IuZ(j?B}B8mJc5~B2FNlDGsuIIZkdSfKW zAn+LhPs5YW-0I%gtt#99nDmfN;V~e3jd`7;qT$aTeE{-SSNp1l9hhl`76oC((82{v zL+O=?^dw)s1nheka8vNg754*HltqYffRtfWViu*Pj6LqhJX^-W{XChudzSUlHdx#C z;q_wWWSybr?Za1#;_-e=C|H|@>wgE - + + - + <Scaled Value="True"/> + <UseXPManifest Value="True"/> + <XPManifest> + <DpiAware Value="True"/> + </XPManifest> </General> <BuildModes Count="1"> <Item1 Name="default" Default="True"/> </BuildModes> <PublishOptions> <Version Value="2"/> - <IncludeFileFilter Value="*.(pas|pp|inc|lfm|lpr|lrs|lpi|lpk|sh|xml)"/> - <ExcludeFileFilter Value="*.(bak|ppu|ppw|o|so);*~;backup"/> </PublishOptions> <RunParams> - <local> - <FormatVersion Value="1"/> - </local> + <FormatVersion Value="2"/> + <Modes Count="1"> + <Mode0 Name="default"/> + </Modes> </RunParams> <RequiredPackages Count="1"> <Item1> @@ -55,6 +59,9 @@ <UnitOutputDirectory Value="lib/$(TargetCPU)-$(TargetOS)"/> </SearchPaths> <Linking> + <Debugging> + <DebugInfoType Value="dsDwarf3"/> + </Debugging> <Options> <Win32> <GraphicApplication Value="True"/> diff --git a/examples/treeview/tv_add_remove_u1.lfm b/examples/treeview/add_remove_nodes/tv_add_remove_u1.lfm similarity index 96% rename from examples/treeview/tv_add_remove_u1.lfm rename to examples/treeview/add_remove_nodes/tv_add_remove_u1.lfm index 7508f09ddf..8774387b70 100644 --- a/examples/treeview/tv_add_remove_u1.lfm +++ b/examples/treeview/add_remove_nodes/tv_add_remove_u1.lfm @@ -7,7 +7,7 @@ object Form1: TForm1 Caption = 'TreeView Example 1' ClientHeight = 427 ClientWidth = 455 - LCLVersion = '1.9.0.0' + LCLVersion = '4.99.0.0' object tv_eg1: TTreeView Left = 0 Height = 427 @@ -26,8 +26,8 @@ object Form1: TForm1 Top = 8 Width = 75 Caption = 'Add' - OnClick = but_AddClick TabOrder = 1 + OnClick = but_AddClick end object but_Remove: TButton Left = 208 @@ -35,7 +35,7 @@ object Form1: TForm1 Top = 40 Width = 75 Caption = 'Remove' - OnClick = but_RemoveClick TabOrder = 2 + OnClick = but_RemoveClick end end diff --git a/examples/treeview/tv_add_remove_u1.pas b/examples/treeview/add_remove_nodes/tv_add_remove_u1.pas similarity index 97% rename from examples/treeview/tv_add_remove_u1.pas rename to examples/treeview/add_remove_nodes/tv_add_remove_u1.pas index c3c5f68510..bf261aeb50 100644 --- a/examples/treeview/tv_add_remove_u1.pas +++ b/examples/treeview/add_remove_nodes/tv_add_remove_u1.pas @@ -61,7 +61,7 @@ begin else begin {Get a name for the new node} sText := 'New node'; - InputQuery( 'New Node', 'Caption ?', sText ); + InputQuery( 'New Child Node', 'Caption', sText ); {Add the node as a child of the selected node} with tv_eg1.Items.AddChild( tv_eg1.Selected, sText ) do diff --git a/examples/treeview/customdrawing/main.lfm b/examples/treeview/customdrawing/main.lfm new file mode 100644 index 0000000000..dba16dd5c3 --- /dev/null +++ b/examples/treeview/customdrawing/main.lfm @@ -0,0 +1,336 @@ +object MainForm: TMainForm + Left = 314 + Height = 548 + Top = 130 + Width = 709 + AutoSize = True + Caption = 'TreeView Custom Drawing' + ClientHeight = 548 + ClientWidth = 709 + LCLVersion = '4.99.0.0' + OnCreate = FormCreate + OnDestroy = FormDestroy + object TreeView: TTreeView + Left = 304 + Height = 548 + Top = 0 + Width = 405 + Align = alClient + Constraints.MinWidth = 400 + Images = ImageList1 + ReadOnly = True + TabOrder = 0 + Options = [tvoAutoItemHeight, tvoHideSelection, tvoKeepCollapsedNodes, tvoReadOnly, tvoShowButtons, tvoShowLines, tvoShowRoot, tvoToolTips, tvoThemedDraw] + end + object Panel1: TPanel + Left = 0 + Height = 548 + Top = 0 + Width = 304 + Align = alLeft + AutoSize = True + BevelOuter = bvNone + ClientHeight = 548 + ClientWidth = 304 + TabOrder = 1 + object btnToggleEnabledDisabled: TButton + AnchorSideLeft.Control = lbTask + AnchorSideTop.Control = cmbExpandSign + AnchorSideTop.Side = asrBottom + Left = 8 + Height = 25 + Top = 442 + Width = 205 + AutoSize = True + BorderSpacing.Top = 8 + BorderSpacing.Bottom = 8 + Caption = 'Toggle 1st node enabled/disabled' + TabOrder = 0 + OnClick = btnToggleEnabledDisabledClick + end + object cbShowLines: TCheckBox + AnchorSideLeft.Control = cbShowButtons + AnchorSideLeft.Side = asrBottom + AnchorSideTop.Control = cbShowButtons + Left = 119 + Height = 19 + Top = 390 + Width = 74 + BorderSpacing.Left = 20 + Caption = 'Show lines' + Checked = True + State = cbChecked + TabOrder = 1 + OnChange = cbShowLinesChange + end + object cbMultiSelect: TCheckBox + AnchorSideLeft.Control = cbShowLines + AnchorSideLeft.Side = asrBottom + AnchorSideTop.Control = cbShowLines + Left = 213 + Height = 19 + Top = 390 + Width = 81 + BorderSpacing.Left = 20 + Caption = 'Multi-select' + TabOrder = 2 + OnChange = cbMultiSelectChange + end + object Label1: TLabel + AnchorSideLeft.Control = Panel1 + AnchorSideTop.Control = Panel1 + AnchorSideRight.Control = lbTask + AnchorSideRight.Side = asrBottom + Left = 8 + Height = 45 + Top = 8 + Width = 280 + Anchors = [akTop, akLeft, akRight] + BorderSpacing.Around = 8 + Caption = 'Select a drawing task and click on a tree node. '#13#10'To see the hot-track effect move the mouse over some nodes' + WordWrap = True + end + object cbShowButtons: TCheckBox + AnchorSideLeft.Control = lbTask + AnchorSideTop.Control = lbTask + AnchorSideTop.Side = asrBottom + Left = 8 + Height = 19 + Top = 390 + Width = 91 + Caption = 'Show buttons' + Checked = True + State = cbChecked + TabOrder = 3 + OnChange = cbShowButtonsChange + end + object lbTask: TListBox + AnchorSideLeft.Control = Panel1 + AnchorSideTop.Control = Label1 + AnchorSideTop.Side = asrBottom + AnchorSideRight.Side = asrBottom + Left = 8 + Height = 321 + Top = 61 + Width = 288 + BorderSpacing.Around = 8 + Items.Strings = ( + 'Default (themed)' + 'Default (not themed)' + 'Default + hot-track (themed)' + 'Default + hot-track (not themed)' + 'Bold top-level nodes' + 'Top-level node gradient' + 'RowSelect + hot-track (full line)' + 'RowSelect + hot-track (at icon)' + 'RowSelect + hot-track (at text)' + 'RowSelect + hot-track + gradient (full line)' + 'RowSelect + hot-track + gradient (icon to end)' + 'RowSelect + hot-track + gradient (text to end)' + 'RowSelect + hot-track + gradient (at text only)' + 'Selection and hot-track as image' + 'Background image (themed)' + 'Background image (not themed)' + 'Background image, no hot-track icons (themed)' + 'Background gradient (themed)' + 'Background gradient (not themed)' + ) + ItemHeight = 15 + TabOrder = 4 + OnClick = lbTaskClick + end + object cmbExpandSign: TComboBox + AnchorSideLeft.Control = lbTask + AnchorSideTop.Control = cbShowButtons + AnchorSideTop.Side = asrBottom + Left = 8 + Height = 23 + Top = 411 + Width = 104 + BorderSpacing.Top = 2 + ItemHeight = 15 + ItemIndex = 0 + Items.Strings = ( + 'themed sign' + '+/- sign' + 'blank arrow' + 'filled arrow' + '> symbol' + ) + Style = csDropDownList + TabOrder = 5 + Text = 'themed sign' + OnChange = cmbExpandSignChange + end + end + object ImageList1: TImageList + Scaled = True + Left = 390 + Top = 147 + Bitmap = { + 4C7A020000001000000010000000E60300000000000078DAAD936B4C5B6518C7 + 0F83E9C8968871730B32CC96E9324D16F5C34089C22E0E1DD179BFDF3E1035F1 + EB58248BD1CC644467A0598C1B443414365C3B06945B1182956B295D4B6929A5 + 85AEA3A5ACD096DECE697B7A7AFE9E7318D320A7CB92F5E497BC79CFF37BFFE7 + 79D21700011108996E1B0F52D4ACC7269961D763DD538DC7D42E47F188CBB19B + 5B13DCDE9DBCACD6F1A7DF6BEA1A6AACFB315A679BC7EF5EA06609B86075A351 + FA13F5EA952E4DA6C290BFD6DBDE3E71647F8F45F5D9F882BFD19B44F3AC1383 + F27350B5D4A0B7BD1E7F5FAE44ADF93A7E70B3784DB7E8CD554E0D655E9D785B + C85418740707EC64478085621968E2907962E856B543535B8ED15FCBD1A994E1 + 672785B30B4005C777F32C9EECB3939B5B8DFA2D1D56D59E7E37FD448F25FCB1 + CE4DFDD9AF84467A1AED5A357E5B6251BDC842AE5163A8EE342EFFA5C41B3A4F + 34B77B9ACAED73D25B3AADAA4CCEDFAF8FA1D044E3F0D01CD37CFE6BE6F88883 + AAF130B7FBAF7227715CE322AFFC529E2C1AB8C1149AE2E01DDE4DB77D39F3E0 + E2577866EA3ADE32F821BF740EAF4F04D97DBDD6D0D16167F808C7DE1E6BE84D + 6388E5DFF135F9060F9E1ABB8047FB2A6C1BEC1F39086E8C69EC7DC8F1BF8BCA + F65328B533289B4BE27D830F87D4F3C2BA749641B5FC0C0E6ACF204FFD02471E + 76F77DE348578E0D3C70E32C36D2D95839270D399112BCB3308C4FCC01146B6F + A274C68217F5DFE25975BEE01D182DC6BED1F3D8D4A11D4C6B9BEEDF3A4A618F + 3E88BD8E4A6C0F6D15CEE19F1D91223C37FAB9E0F01C1D388CE7350D78FC5A18 + BC43702E21339664282C033B067D64C1980FD28B12E4BB9AB12D76403883F70A + B51FA2D8A8405D83047C0D571BCD689BD6102DA65784FF3990B6A165E28B475A + F5965A6915FBB299C607B6040AEC2D28502B8535BF575B2F61772AF4A68CABC6 + 3242264BFFDF7DA9D66EDCD53CF2FDC3DD33D6978C11B6C41040BEDA8D639314 + 9BDD6337E7360D57119DB6FBEF740F08A9617356875992DD65F13FD461F665B5 + 4D4AF8BDBBBD8744A36627D1A0CE4959738F7EC68632A4C274F164DC587FA228 + 950F96059B64C03209241334470C0C1D0513A7109A9FC2E41FA7C849E9894362 + 3EEFE6C9D5EB92888611749A60123983F7930C9F1947928E09994C9C44221611 + 5C9A0A8226030838C661BA7432BEAECFB99FF61A53120FFB8479ACE7AFF69A88 + 914266820ADDCA5D463CE217DC586849DCE7DC8A6BF694C4828BA2FEDA5EE391 + D55CAF90CBBBD1C04D719F739B673D29892E2F88FAFFE6AEF6EA5DC90C7A84DC + E8B21B947F5EDCE7E634E58FA484F2B944FDFFCE78A5D795EFA56EE5923E2748 + EF9CB8BF664E82EBE75DD76D37B2E410F5EF867B756FFF0156FCF26B + } + BitmapAdv = { + 4C69020000004C7A020000001800000018000000BF0600000000000078DAE596 + 7B7054D51DC737D954D2A4B6B1C2542938E3A3DA3AC3A31D09152C22B6686528 + 436BA58016712C749CD60E23B682D571046B5B467938B4260461E411F6991091 + 34906212C0E6B1F7EE26BB9B64C983249BC7EE6637C966F7EEEB3EBEFD9DBB61 + 93B4B4DD55FFB2D97CE6CCB9F79CCFF99DDFF9EDBD0B4083FF0334A71AEECE35 + 5B8FE6183981B5ACFF9978754D4BF3CCD673B9263EF2A3C6FEC4EB3D51AC6A18 + 90A81FCD2FB355B3FB193B5F437641E9C76B7F7F689F679EFE82F0739B573E3C + 2CE3C830504214F980FD1E054FB6F89505C61A6147C9BEC08DBA8BCF683EFA28 + E7BF7ACF76CCD01A2D9BBE68B2BA6F3B6B0F1DA92885F5E0AF71D97000E6B60E + 1CF127FDEF92FF586B072EE80F80A3FB45153ACCA97486728D565FB691DBA679 + BF397F9A57CFCFCA315876DD60E4C61756BB42BBBB82383D0A9808C3B088CAC6 + 4BB094BC8486A3AFE27CE5495C3AF12734156D87B9B60AFB06E3D83304BC493C + 7745C0BD17BA4239465ED09AB8839A527E36F36BF59C7C83895776758EE16F41 + E00C79CB997F04D013A53E11671B2E827B771B6CFBB780A7984FD754E21D72EF + F5027B3CC01FC9BF9B786D00F899630CB486926DE0A464FC16147CD82ECF30F3 + CA82F32EE95AFC65BE28AA2F5681276FFDB1DD28B759D5FC943A5DA8D1ED05F7 + 97E771FA7C19F6F68627E3FF7BA7F805238F2F55B44ACC7BCDBFC01643617314 + 73AABB15CABF5252BC4B693AF01CEACA0FC1D4E9C6FB94FBA3FEC9F33D48711F + 76B951653E84461A5752BC5B9941F36E3EEB92165943984FBEA9FE7BAD312C6A + 8E6385338155AD09D8DFDA843B0C97E4AF94372B4FD9BC4A89579EF413FBBD0A + 3652FD149C6E11E7EAEA6436FE5167140F39E2286C89E35BFC14FFB913B8BDB9 + 1F0B69CD07EC713CDA96F43FDD29E2E1261F6EAA6861F58ED58D0332ABFFC7D4 + FAB7CA796556697E6D9FFC5447723C9BC7E62FA438EFB678905F569EF43BB720 + 4B998182C006CC7735D31EE2EAF88D1D22B6764B78A157C693F611DC7AA655A2 + EF2FF2CA6CE28A8621655B8F842D747F63A7A48E7F98E615365FC5B79BFE8CC2 + FA0731A7EAF5945F93FA64E3ABE3AB70C8B0124F5C11B199F6F07C8F8C9D6E05 + 6F0C2AEA9EDF1850B0C32DABD79FE992F05397883345EBB0C4F22A16D7DF4F2C + 5649F9CD75C8EFDD839CF8DC29EB685010FD0E9678DEC3D6AB716CEF93A9F692 + 7ED6BE48FDADDD09AC75D6E07B9667534EC6A2FA1FE21BF57FA51AAD4B9DEF97 + FF11C1AD9671CCEE3E813CE1BE69EBDC28DE816581B7F1DBFEB0EADFE98E637D + DB0758665937CD5BD8B801F32C067CBD29A8FAA6D64FEEA510663644703B17C3 + 3CAAA562E30F7073F8FBD3D6C99367E1A6CBDBF140D323D3BC4B2DBF82EEF0E3 + 9847F5C1E6CF6A8CAABE94DFC8BDA3317091DC737DE2EC4601F7506DB1F35A4E + B5BAAC9BC39DC167A15572D535E6F06B54E777EB976205BF038F385BF0A02359 + 0FDFA4B8D8FCDCAA3E4963E0A3E43C38F90CB2DC46FDE359265B68E68521B59E + 9750ADAD6C8DE3C7AE041EEFB98A85632FE0166E1DD6B4ECC7862B03EAF595F4 + 5D596A4FFABF56E755B28DB6B0C668FD50A3E7EEBAEE33D4C8DF9765E01BB8B7 + 36E3CECB3E3C447B58DD2E627D87845F502DB23DB3763DD5EEEAF6049653ECF7 + 7C1C00F7F6666419F9E674DF07CBDFD3AFA3676D577E85235C6819C54F28D6A7 + BB927ED6B2FEFD1C9DE399D670B689EF5B7CAC62CB2779CF688DDC135AA3D57B + 4BA52BBCDA21A8FE354E0173CF7785B4267E44A3B3FC52A3D76B3FD53BF2034B + 1EC5F88AD6C887999FB539D467D73FD377FC49CB4C8DAEF1286BD39EF339FBB3 + 1F7F1199E03CF57205A5212B133F1485FE6528B2448890254602B218879C8841 + 4A4421C52310A3E3E8A83C106E3DF5F2DE4CFCD3DD13DE7F714B7101622C8CD8 + B81FEDE57F08DB4FECFC4DDA7E72173B7A93D87BA67015C52D8C6E14116234A4 + EE41F0BBD1AA7B25623FFED2DAB4FC948FC586FAFF09732722412484318CF7B7 + C171F277B174FCB298F88FF950A1B8139149774218453C3CA29E777AFE18CC1D + 83C400CC5718FD3031E8F7C8247D30B5337A6124E2A140DA7E16F3A66A7B46C4 + 43FEF4FDA97C08A97C88FF968F644E58DC3172C7C68733F00BA8757B51DBE799 + C2106A7B1983A861F40C4CA11FB1A02F6D3F8BF94DAE3B23A263DEF4FD69E683 + C51C0B7A557774CC93B69FD59ED31780D3CBF0C3710DCFF0043E38861814F304 + D1D1A10CFC419475793322323298BE9F7232351FF169F9F0A5F2C1628E8C0E92 + 7B80E84FDBCFBC9E60109EB1B10946E119658C60E81A238109FC180AF82104DC + E9FB29E6B691704608FEBE0CFC13F998C8C9F5F34104FAD5B8995B18EE4DDB7F + BDDA9BE6266F44F54EBAC3C33D69FB3F0D9FB7DF0BFF04B89A943A4C7A020000 + 002000000020000000210900000000000078DAED970B5094D715C757418C1D74 + AC4D6C741C75B0D65A9D38265191341AABF5359AD6B4355363AA26D626769CDA + 34AD4D25956974B4248A8226C5F2508396DDE5A5F8442D880A2BBBCBF2DA45DE + C8435C792CAF7D3FFE3DF77EBBB0AB60FC043BD31917FE03DFF7DD7B7EE79E73 + EEF9EE0290E099444B929437432255C60D91A9BBD85F76FD3FE14A558B2432D5 + 39926B885CE59A7C4187213215D835BF4FCF079D1986A112A97A35F114C480BF + 5CED7A2DBB067BEE9811D30CECA9B760514E1D8625E5331F3044AE2E94C895BF + 966466FA0F882BD3068E4A546C3D7A24D4F8BB7F1DC124798EF3CDBC0644DDB5 + E1780B104F62FC68D257F7817D0D76BCA96CC2E4E45C271B1F7DE4535360E2CD + 9D9254CD6851DC538AEF524EC386CAD586E1D25B901DF90B8AF76F4061C4FBB8 + 9E7614C915B502BFD9CD27F697A463B76B91917A948F63E3D93C369FE2D12591 + AB0E499215131E5D539AA96C1CD59495C571CA459D6BBBAE0549AD2E9C2DAFC1 + 8DB4681447BCC76DDF3AB60B6714371077CF0E79BE06D74F86F3FB4507362233 + 3102F10525F8C75D6043493BA65C2E17F22253D92432F50949A272A66F9C95EF + 4AE4EA2B9E9A0AC9AAC4FEDA2EA4B70369062085246F03A4A4A4DAFBF84F860C + 9AA8AD6E9EE04F41E41664A4C723A6A209117AE08B7BC0E7A4BD4D541FE4C7E6 + B22E4CBF5AE95DAB571957E0F37B0848CE4758B90117897B9E944EDCD38CDFF6 + 30BF20EA0381EF8E47C1A1DF22E34C3C622B1A7BF8E1A47D6EFE67A430D2DA22 + 03FC93F2E1617AF81473B86384399915D85BDDE9C33F575A869BC987517C6013 + E7E57EBD1BA9AA3CC4EA1D482C2AC1356904DDDFC8E37F8D727142AD21BE4B58 + 3F6993AE13532F57F470A9267CF8632E55619AA21581674A3C31C2F4B31A1CBD + 980A557CA8507F073723FB4C0C92CAEB7CEAFFA8BBFE8F95D521E3740C0A681C + 1B7F332E1407CF9FC1D473053D6B1B9E52842937F49CE7CD1F7DB10AB30BAD08 + 29B62238BF1363CF9721E1F00E6EE7DAA1ADF832250127EADA70AA154820317E + 5C732F9FD5FF618A7B24E940950151A9A7F83C369FD9093C5D8C579406CC2FB2 + 720EE379F347D1F54C8D0573E8F9C2121B96E96C38F9EF237CFE08791E1FFB5C + B206CB73EB1079D7EABBFFEF7BF6BF0D2B6E3562444A01AFF700691E9F7FFC64 + 149693BD852556CC25FB8C33CA9B5FB01DC36A37606A4935661758F01AC56089 + D68658792C9FFF6EB903AF5C6FC07329421CFD2877ACFF7D5663E2FCDD7542FF + F34F72D7905C850997CAF00B9D91CF6776166B85D8BE4C6BFFA1FA1E82B2C2F1 + E285CF05BE760B6D440986B802F0EDB677F0D2ED42BC41FC1837FF9D0A07DEAF + 72605BAD134B557A8C4C2BECA9A309E7B43DFF53BF72CDCCACC6E60A0B8DB7D3 + 3C3B9FCFECBC416B9F5758839795E198AB5880798A79E4E3DF7DF8BD3F4331A6 + 73253EB9B293CF5F5B6EC3864A073EAC71E20F779CD859EFC4A6D20E7C27BD98 + D7148B47C88D7A7C5C6BC747F4FCC31A073692BF6BCB05FEBEB470CC57FD8D98 + 219CEB51FFFCDE9FD98D6311D2908AF59576FCA69AC5C0811DF52EEC6A706123 + F536B6EE1FE73622ACD1C5EFB3E79B89BD9ED6BE4AABC696F38B11AC08F6E13E + C44FC9869F2E147ED6F1FDFA31DAF2125ED7C7E1831A2BFEE88EC1FA1203E72F + 223EBB16D66EA7BC6761816A539F4CA65715CB3029339CEA25BBA7FEFDCF57E2 + 056507C654C720C03CAD5F3F46DA83B0A0F5003E6E30625DB1C05F90D3883FD3 + 3BF857A56789BBB65FEE1CC51AFC20EF6BBC70CB8061C4F3DE7F7EE72A315A61 + C238A519416A2326552563724B50BF7E7CCB311633F43BE077FA024272A3F1BA + 7255BFDCE5D92B314B7D1A41AA6E8C27FB8CC3783EFD37BD1C81B926F2CD8489 + 2A33A6E59B1199188BE3892BF03CD522ED8E3EFD9890FFD37EB9F3959B9110F7 + 73444A63C89E0593C82EB31F986BE4BC1EBE5455C6F74F5A896B645633F7718A + DA8C438931BC7E17D0DE09A9566162C77ADAA3FE8FE4072BE663A1EA232C292E + E07D8CCD6776983D6697D9671CF79E2D759F7302E8FFDF931F1DBC6FA5DF768D + CB3120C2CD677D83F58F55B76D5859538EE9EDDBE0EF1AE1C30F56FC083FD1EC + C21A5D251FE7E9376C3EB3333EA71DC3CF967B7A85919D6F24B29C11BEE7809C + 3174FED82761E70F3A07EC8E3DC8E7CFE53DD98A15A536AC21DBEBA81FADAB6D + C014FD76BCA87E1B7372F66163A59EEEDBB1A6CCCE7B2DEB5F730B2D7CFE9EF8 + 43A0F3858B6CDAE99D1FCDCE578F3EF7A926B2717F8DFE029AFD9B30F6720DD9 + 32514FB662F56D3BEF2BAC1FADD008F5CF7A33BB66F7D973362EB8D08C7157EB + F87C6687C6C9685DDF13730E5C4DC5B7E4B854C3F74792C61994D580655A0BDE + 2A137AEB52751BE7CFCE6EE0D76F516C9613FBFB37EED1DED638796F3A26D32E + 8D3FF5B3819DF9954B287685CCDEF0D422E7AC1C3DD6920F8BDDFC59D9F5789B + F8AFDE6AC688B462CEA5F1A5A45F0EDA770099CC8FFC788F62D8C8CF0BE93AE7 + 8CAC3ACE9F78897AC759ADFB8C49CFF93899DF53F9FE43354BEBFA84DE3B9D9E + F79EFB9DDBC9EE3F58D34FED7BD829D5F3B45F13F859564E7FE9FAFFF27BECB3 + 8FCFA738E14F18A874D24F33B4B2B08027E5032EFA75D1AF132E2793836487CB + 6187D36183D3CE642559E0B03199E1B03299603777A2FA6AB44997189A5911B9 + 6DF813F17BD80E419CEB615BFB609BDC32C26E31C266EA40F5957F920F3B45FB + C0F80FB36DBE6C0FD79B6D61EC6E41E62ED88CED4FE403E7BBE33D4FAE10250F + 9BE5C066EA84B5BB4DB40F025FC8B568BE179BE5C066EC80B5AB15D597BF3269 + 13432F3F2E5F4CAE7BD7FC20BBDD2D032C9D2D7C5F3C3E5F5CAEB93CDC07D82C + 074CA2F86EF6862BC5039287CD72208E6FE1EB1E143EB1AD5DE2E23F905C5BBB + 0D5E5C812D36FFDF986BF3A373ED615B38BB994B14DFCDDEABAE1E903C6C4BC7 + 7D917C21DE83C227B6A5432F8A3FD05CF77205B6B95D2C7F60B9F6B0CD9C7D8F + 4B14DFCD4EADD20F481EB6D9D024922FC47B50F8C4361BEE8AE28BCE75A76FAE + 85753771B689D8A636B17CF175E69D6B61CD1E76239728BE9B5DDAD63D2079D8 + A6D606917C61CD83C227B6A9B55E14BF27DEDD4F966B61DD0D9C6D24B6B1452C + FF7172ADEF23D777BDD6DCCB36B6D489E33F664FE9ABCE7CD975829AEF88E47B + C7BBB98F78F7EEEBDE78F7E6FA41767773AD28FEA3D94D7DB01F8EB7B1E54E0F + BBFBBE38FED3D2B36FB70F7FFE0BCA56E4B6 + } + end +end diff --git a/examples/treeview/customdrawing/main.pas b/examples/treeview/customdrawing/main.pas new file mode 100644 index 0000000000..6f67865cb7 --- /dev/null +++ b/examples/treeview/customdrawing/main.pas @@ -0,0 +1,548 @@ +unit main; + +{$mode objfpc}{$H+} + +interface + +uses + Classes, ComCtrls, ExtCtrls, SysUtils, Forms, Controls, Graphics, Dialogs, + StdCtrls; + +type + + { TMainForm } + + TMainForm = class(TForm) + btnToggleEnabledDisabled: TButton; + cbShowLines: TCheckBox; + cbMultiSelect: TCheckBox; + cbShowButtons: TCheckBox; + cmbExpandSign: TComboBox; + ImageList1: TImageList; + Label1: TLabel; + lbTask: TListBox; + Panel1: TPanel; + TreeView: TTreeView; + procedure btnToggleEnabledDisabledClick(Sender: TObject); + procedure cbMultiSelectChange(Sender: TObject); + procedure cbShowButtonsChange(Sender: TObject); + procedure cbShowLinesChange(Sender: TObject); + procedure cmbExpandSignChange(Sender: TObject); + procedure FormCreate(Sender: TObject); + procedure FormDestroy(Sender: TObject); + procedure lbTaskClick(Sender: TObject); + + // Here are the event handlers for several custom-drawing tasks + + // An image is drawn as an overall background of the treeview + procedure BackgroundImage_AdvancedCustomDraw(Sender: TCustomTreeView; + const ARect: TRect; Stage: TCustomDrawStage; var DefaultDraw: Boolean); + procedure BackgroundImage_AdvancedCustomDrawItem(Sender: TCustomTreeView; + Node: TTreeNode; State: TCustomDrawState; Stage: TCustomDrawStage; + var PaintImages, DefaultDraw: Boolean); + + // A gradient is drawn as an overall background of the tree + procedure BackgroundGradient_AdvancedCustomDraw(Sender: TCustomTreeView; + const ARect: TRect; Stage: TCustomDrawStage; var DefaultDraw: Boolean); + procedure BackgroundGradient_AdvancedCustomDrawItem(Sender: TCustomTreeView; + Node: TTreeNode; State: TCustomDrawState; Stage: TCustomDrawStage; + var PaintImages, DefaultDraw: Boolean); + + // The top-level nodes are painted with bold font + procedure BoldTopLevel_CustomDrawItem(Sender: TCustomTreeView; + Node: TTreeNode; State: TCustomDrawState; var DefaultDraw: Boolean); + + // Selection and hot-tracked lines + procedure RowSelectHotTrack_AdvancedCustomDrawItem(Sender: TCustomTreeView; + Node: TTreeNode; State: TCustomDrawState; Stage: TCustomDrawStage; + var PaintImages, DefaultDraw: Boolean); + + // Selection and hot-tracked lines are drawn as a gradient + procedure RowSelectHotTrackGradient_AdvancedCustomDrawItem(Sender: TCustomTreeView; + Node: TTreeNode; State: TCustomDrawState; Stage: TCustomDrawStage; + var PaintImages, DefaultDraw: Boolean); + + // Selection and hot-tracked lines drawn with bitmap fill + procedure SelectHotTrackImage_AdvancedCustomDrawItem(Sender: TCustomTreeView; + Node: TTreeNode; State: TCustomDrawState; Stage: TCustomDrawStage; + var PaintImages, DefaultDraw: Boolean); + + // The top-level nodes are drawn with a gradient + procedure TopLevelGradient_AdvancedCustomDrawItem(Sender: TCustomTreeView; + Node: TTreeNode; State: TCustomDrawState; Stage: TCustomDrawStage; + var PaintImages, DefaultDraw: Boolean); + + private + FBackImg, FSelectionImg, FHotTrackImg: TPicture; + procedure PopulateTree; + + public + + end; + +var + MainForm: TMainForm; + +implementation + +{$R *.lfm} + +const + tDefault_Themed = 0; + tDefault_NotThemed = 1; + tDefault_HotTrack_Themed = 2; + tDefault_HotTrack_NotThemed = 3; + tTopLevelBold = 4; + tTopLevelGradient = 5; + tRowSelect_HotTrack_Full = 6; + tRowSelect_HotTrack_Icon = 7; + tRowSelect_HotTrack_Text = 8; + tRowSelect_HotTrack_Gradient_Full = 9; + tRowSelect_HotTrack_Gradient_Icon = 10; + tRowSelect_HotTrack_Gradient_Text = 11; + tRowSelect_HotTrack_Gradient_TextOnly = 12; + tSelectHotTrack_Image = 13; + tBackgroundImage_Themed = 14; + tBackgroundImage_NotThemed = 15; + tBackgroundImage_Themed_NoHotTrackIcons = 16; + tBackgroundGradient_Themed = 17; + tBackgroundGradient_NotThemed = 18; + +procedure TMainForm.FormCreate(Sender: TObject); +begin + PopulateTree; + TreeView.Selected := TreeView.Items.GetFirstNode; + + FBackImg := TPicture.Create; + FBackImg.LoadFromFile(Application.Location + 'paw-gray.png'); + + FSelectionImg := TPicture.Create; + FSelectionImg.LoadFromFile(Application.Location + 'water1.jpg'); + + FHotTrackImg := TPicture.Create; + FHotTrackImg.LoadFromFile(Application.Location + 'water2.jpg'); + + lbTask.ItemIndex := 0; +end; + +procedure TMainForm.FormDestroy(Sender: TObject); +begin + FBackImg.Free; + FSelectionImg.Free; + FHotTrackImg.Free; +end; + +procedure TMainForm.btnToggleEnabledDisabledClick(Sender: TObject); +var + node: TTreeNode; +begin + node := TreeView.Items.GetFirstNode; + node.Enabled := not node.Enabled; +end; + +procedure TMainForm.cbMultiSelectChange(Sender: TObject); +begin + if cbMultiSelect.Checked then + TreeView.Options := TreeView.Options + [tvoAllowMultiSelect] + else + TreeView.Options := TreeView.Options - [tvoAllowMultiSelect]; +end; + +procedure TMainForm.cbShowButtonsChange(Sender: TObject); +begin + if cbShowButtons.Checked then + TreeView.Options := TreeView.Options + [tvoShowButtons] + else + TreeView.Options := TreeView.Options - [tvoShowButtons]; +end; + +procedure TMainForm.cbShowLinesChange(Sender: TObject); +begin + if cbShowLines.Checked then + TreeView.Options := TreeView.Options + [tvoShowLines] + else + TreeView.Options := TreeView.Options - [tvoShowLines]; +end; + +procedure TMainForm.cmbExpandSignChange(Sender: TObject); +begin + TreeView.ExpandSignType := TTreeViewExpandSignType(cmbExpandSign.ItemIndex); +end; + +procedure TMainForm.PopulateTree; + + function AddChild(AParent: TTreeNode; ACaption: String; AImgIndex: Integer): TTreeNode; + begin + Result := TreeView.Items.AddChild(AParent, ACaption); + Result.ImageIndex := AImgIndex; + Result.SelectedIndex := AImgIndex; + end; + + function AddSibling(ANode: TTreeNode; ACaption: String; AImgIndex: Integer): TTreeNode; + begin + Result := TreeView.Items.Add(ANode, ACaption); + Result.ImageIndex := AImgIndex; + Result.SelectedIndex := AImgIndex; + end; + +var + node: TTreeNode; +begin + node := AddChild(nil, 'DateTimeCtrls', 0); + AddChild(node, 'datetimectrls.pas', 1); + AddChild(node, 'lclcalwrapper.pas', 1); + + node := AddChild(nil, 'DockedFormEditor', 0); + AddChild(node, 'dockedformeditor.pas', 1); + AddChild(node, 'dockedstrconsts.pas', 1); + + node := AddChild(nil, 'VirtualTreeView', 0); + AddChild(node, 'laz.virtualtrees.pas', 1); + AddChild(node, 'laz.lclconstants.inc', 1); + AddChild(node, 'lazlclfunctions.inc', 1); + AddChild(node, 'laz.registervirtualtreeview.pas', 1); + + TreeView.FullExpand; +end; + +procedure TMainForm.lbTaskClick(Sender: TObject); +begin + TreeView.OnCustomDraw := nil; + TreeView.OnCustomDrawitem := nil; + TreeView.OnAdvancedCustomDraw := nil; + TreeView.OnAdvancedCustomDrawItem := nil; + TreeView.Options := TreeView.Options + [tvoThemedDraw] - [tvoHotTrack, tvoRowSelect]; + + // Select the event handler and options for the drawing task + case lbTask.ItemIndex of + tDefault_Themed: + ; + tDefault_NotThemed: + TreeView.Options := TreeView.Options - [tvoThemedDraw]; + + tDefault_HotTrack_Themed: + TreeView.Options := TreeView.Options + [tvoHotTrack]; + tDefault_HotTrack_NotThemed: + TreeView.Options := TreeView.Options - [tvoThemedDraw] + [tvoHotTrack]; + + tTopLevelBold: + TreeView.OnCustomDrawItem := @BoldTopLevel_CustomDrawItem; + + tTopLevelGradient: + begin + TreeView.Options := TreeView.Options - [tvoThemedDraw]; + TreeView.OnAdvancedCustomDrawItem := @TopLevelGradient_AdvancedCustomDrawItem; + end; + + tRowSelect_HotTrack_Full, + tRowSelect_HotTrack_Icon, + tRowSelect_HotTrack_Text: + begin + // tvoRowSelect is not needed for this visual effect, but allows to + // change the selection by clicking anywhere, not just on the node text. + TreeView.Options := TreeView.Options + [tvoRowSelect, tvoHotTrack] - [tvoThemedDraw]; + TreeView.OnAdvancedCustomDrawItem := @RowSelectHotTrack_AdvancedCustomDrawItem; + end; + + tRowSelect_HotTrack_Gradient_Full, + tRowSelect_HotTrack_Gradient_Icon, + tRowSelect_HotTrack_Gradient_Text, + tRowSelect_HotTrack_Gradient_TextOnly: + begin + // tvoRowSelect is not needed for this visual effect, but allows to + // change the selection by clicking anywhere, not just on the node text. + TreeView.Options := TreeView.Options + [tvoRowSelect, tvoHotTrack] - [tvoThemedDraw]; + TreeView.OnAdvancedCustomDrawItem := @RowSelectHotTrackGradient_AdvancedCustomDrawItem; + end; + + tSelectHotTrack_Image: + begin + TreeView.Options := TreeView.Options + [tvoHotTrack] - [tvoThemedDraw]; + TreeView.OnAdvancedCustomDrawItem := @SelectHotTrackImage_AdvancedCustomDrawItem; + end; + + tBackgroundImage_Themed, + tBackgroundImage_Themed_NoHotTrackIcons: + begin + TreeView.Options := TreeView.Options + [tvoHotTrack]; + TreeView.OnAdvancedCustomDraw := @BackgroundImage_AdvancedCustomDraw; + TreeView.OnAdvancedCustomDrawItem := @BackgroundImage_AdvancedCustomDrawItem; + end; + tBackgroundImage_NotThemed: + begin + TreeView.Options := TreeView.Options + [tvoHotTrack] - [tvoThemedDraw]; + TreeView.OnAdvancedCustomDraw := @BackgroundImage_AdvancedCustomDraw; + TreeView.OnAdvancedCustomDrawItem := @BackgroundImage_AdvancedCustomDrawItem; + end; + + tBackgroundGradient_Themed: + begin + TreeView.Options := TreeView.Options + [tvoHotTrack]; + TreeView.OnAdvancedCustomDraw := @BackgroundGradient_AdvancedCustomDraw; + TreeView.OnAdvancedCustomDrawItem := @BackgroundGradient_AdvancedCustomDrawItem; + end; + tBackgroundGradient_NotThemed: + begin + TreeView.Options := TreeView.Options + [tvoHotTrack] - [tvoThemedDraw]; + TreeView.OnAdvancedCustomDraw := @BackgroundGradient_AdvancedCustomDraw; + TreeView.OnAdvancedCustomDrawItem := @BackgroundGradient_AdvancedCustomDrawItem; + end; + end; + TreeView.Invalidate; +end; + +procedure TMainForm.BackgroundGradient_AdvancedCustomDraw(Sender: TCustomTreeView; + const ARect: TRect; Stage: TCustomDrawStage; var DefaultDraw: Boolean); +begin + if Stage = cdPrePaint then + begin + // Draw the gradient + Sender.Canvas.GradientFill(ARect, clSkyBlue, clWhite, gdVertical); + // Avoid painting the normal background below the last node + Sender.Canvas.Brush.Color := clNone; + end; + // We must not set DefaultDraw to false here because the CustomDraw + // PrePaint stage would force us to paint everything by ourselves. +end; + +procedure TMainForm.BackgroundGradient_AdvancedCustomDrawItem(Sender: TCustomTreeView; + Node: TTreeNode; State: TCustomDrawState; Stage: TCustomDrawStage; + var PaintImages, DefaultDraw: Boolean); +begin + case Stage of + cdPreErase: + // Avoid overwriting the gradient with the node background color + Sender.Canvas.Brush.Color := clNone; + cdPostErase: + // Set selected and hot-track color as usual + if ([cdsFocused, cdsSelected] * State <> []) then + begin + Sender.Canvas.Brush.Color := clNavy; + Sender.Canvas.Font.Color := clYellow; + Sender.Canvas.Font.Style := [fsBold]; + end else + if (cdsHot in State) then + begin + Sender.Canvas.Brush.Color := clGray; + Sender.Canvas.Font.Color := clHighlightText; + Sender.Canvas.Font.Style := []; + end; + end; +end; + +procedure TMainForm.BackgroundImage_AdvancedCustomDraw(Sender: TCustomTreeView; + const ARect: TRect; Stage: TCustomDrawStage; var DefaultDraw: Boolean); +var + x, y: Integer; +begin + if Stage = cdPrePaint then + begin + // Draw the image + y := 0; + while (y < TreeView.ClientHeight) do + begin + x := 0; + while (x < TreeView.ClientWidth) do + begin + TreeView.Canvas.Draw(x, y, FBackImg.Graphic); + inc(x, FBackImg.Width); + end; + inc(y, FBackImg.Height); + end; + // Avoid painting the normal background below the last node + Sender.Canvas.Brush.Color := clNone; + // We must not set DefaultDraw to false here because the CustomDraw + // PrePaint stage would force us to paint everything by ourselves. + end; +end; + +procedure TMainForm.BackgroundImage_AdvancedCustomDrawItem(Sender: TCustomTreeView; + Node: TTreeNode; State: TCustomDrawState; Stage: TCustomDrawStage; + var PaintImages, DefaultDraw: Boolean); +begin + case Stage of + cdPreErase: + // Avoid overwriting the image with the node background color + Sender.Canvas.Brush.Color := clNone; + cdPostErase: + // Avoid drawing the default hottrack node text background over the image + if (cdsSelected in State) then + Sender.Canvas.Brush.Color := clHighlight + else + if (cdsHot in State) then + begin + Sender.Canvas.Brush.Color := clNone; + if lbTask.ItemIndex = tBackgroundImage_Themed_NoHotTrackIcons then + PaintImages := false; + end; + end; +end; + +// This OnCustomDrawItem handler uses a bold font to draw the top-level tree nodes +procedure TMainForm.BoldTopLevel_CustomDrawItem(Sender: TCustomTreeView; + Node: TTreeNode; State: TCustomDrawState; var DefaultDraw: Boolean); +begin + if Node.Level = 0 then + Sender.Canvas.Font.Style := [fsBold] + else + Sender.Canvas.Font.Style := []; +end; + +{ Full row highlighting. Depending on the selection in the Task radiogroup, + there are three possibilities: + - highlighting across the entire row + - highlighting starting at the icon + - highlighting starting at the node text. } +procedure TMainForm.RowSelectHotTrack_AdvancedCustomDrawItem(Sender: TCustomTreeView; + Node: TTreeNode; State: TCustomDrawState; Stage: TCustomDrawStage; + var PaintImages, DefaultDraw: Boolean); +var + R: TRect; + idx: Integer; +begin + if Stage = cdPostErase then + begin + if [cdsFocused, cdsSelected] * State <> [] then // Selected node + Sender.Canvas.Brush.Color := clRed + else + if cdsHot in State then // Hot-tracked node + Sender.Canvas.Brush.Color := $ccccff + else + Sender.Canvas.Brush.Color := clWindow; // Normal nodes + idx := lbTask.ItemIndex; + case lbTask.ItemIndex of + tRowSelect_HotTrack_Full: // full with of displayed node + DefaultDraw := true; + tRowSelect_HotTrack_Icon: // beginning at icon + begin + R := Node.DisplayRect(false); + R.Left := Node.DisplayIconLeft; + Sender.Canvas.FillRect(R); + // do not draw the default full width highlight: + DefaultDraw := false; + end; + tRowSelect_HotTrack_Text: // beginning at node text + begin + R := Node.DisplayRect(false); + R.Left := Node.DisplayTextLeft; + Sender.Canvas.FillRect(R); + // do not draw the default full width highlight: + DefaultDraw := false; + end; + end; + end; + + // Turn off hot-track underlining + Sender.Canvas.Font.Style := []; +end; + +{ Full row highlighting by a gradient. + Depending on the selection in the Task radiogroup, there are three possibilities: + - highlighting across the entire row + - highlighting starting at the icon + - highlighting starting at the node text. } +procedure TMainForm.RowSelectHotTrackGradient_AdvancedCustomDrawItem(Sender: TCustomTreeView; + Node: TTreeNode; State: TCustomDrawState; Stage: TCustomDrawStage; + var PaintImages, DefaultDraw: Boolean); +var + R: TRect; + startColor, endColor: TColor; +begin + if Stage = cdPostErase then + begin + if [cdsFocused, cdsSelected] * State <> [] then // Selected node + begin + startColor := clRed; + endColor := $ccccff; + end else + if cdsHot in State then // Hot-tracked node + begin + startColor := $ccccff; + endColor := clWhite; + end else + begin + Sender.Canvas.Brush.Color := clWindow; // Normal nodes + DefaultDraw := true; + exit; + end; + + R := Node.DisplayRect(false); + case lbTask.ItemIndex of + tRowSelect_HotTrack_Gradient_Full: // Full with of displayed node + ; + tRowSelect_HotTrack_Gradient_Icon: // Beginning at icon + R.Left := Node.DisplayIconLeft; + tRowSelect_HotTrack_Gradient_Text: // Beginning at node text + R.Left := Node.DisplayTextLeft; + tRowSelect_HotTrack_Gradient_TextOnly: // Node text only + R := Node.DisplayRect(true); + end; + Sender.Canvas.GradientFill(R, startColor, endColor, gdHorizontal); + + // Avoid drawing the standard node text highlight background + Sender.Canvas.Brush.Style := bsClear; + //or: Sender.Canvas.Brush.Color := clNone; + + // Turn off the default full-row highlighting (just for completeness, + // is turned off by the clear brush style anyway). + DefaultDraw := false; + end; + + // Turn off hot-track underlining + Sender.Canvas.Font.Style := []; +end; + +procedure TMainForm.SelectHotTrackImage_AdvancedCustomDrawItem(Sender: TCustomTreeView; + Node: TTreeNode; State: TCustomDrawState; Stage: TCustomDrawStage; + var PaintImages, DefaultDraw: Boolean); +var + R: TRect; +begin + if Stage = cdPostErase then + begin + if [cdsFocused, cdsSelected] * State <> [] then // Selected node + begin + Sender.Canvas.Brush.Style := bsImage; + Sender.Canvas.Brush.Bitmap := FSelectionImg.Bitmap; + end else + if cdsHot in State then // Hot-tracked node + begin + Sender.Canvas.Brush.Style := bsImage; + Sender.Canvas.Brush.Bitmap := FHotTrackImg.Bitmap; + end else + Sender.Canvas.Brush.Color := clWindow; // Normal nodes + R := Node.DisplayRect(true); + Sender.Canvas.FillRect(R); + + // Avoid drawing the standard node text highlight background + Sender.Canvas.Brush.Style := bsClear; + + // Turn off the default full-row highlighting (just for completeness, + // is turned off by the clear brush style anyway). + DefaultDraw := false; + end; + + // Turn off hot-track underlining + Sender.Canvas.Font.Style := []; +end; + +procedure TMainForm.TopLevelGradient_AdvancedCustomDrawItem(Sender: TCustomTreeView; + Node: TTreeNode; State: TCustomDrawState; Stage: TCustomDrawStage; + var PaintImages, DefaultDraw: Boolean); +var + R: TRect; +begin + if Stage = cdPostErase then + begin + R := Node.DisplayRect(false); + if Node.Level = 0 then + begin + Sender.Canvas.Brush.Color := clNone; + Sender.Canvas.GradientFill(R, clSkyBlue, clWhite, gdHorizontal); + DefaultDraw := false; + end; + end; +end; + +end. + diff --git a/examples/treeview/customdrawing/paw-gray.png b/examples/treeview/customdrawing/paw-gray.png new file mode 100644 index 0000000000000000000000000000000000000000..e8e016c050ba5580752725fdc650f92871cbc782 GIT binary patch literal 5261 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 bWG=tB!8T09EB-#nFG9?Wtq`SG-5&lIUD8rL literal 0 HcmV?d00001 diff --git a/examples/treeview/customdrawing/treeview.ex-meta b/examples/treeview/customdrawing/treeview.ex-meta new file mode 100644 index 0000000000..ca2c8679e2 --- /dev/null +++ b/examples/treeview/customdrawing/treeview.ex-meta @@ -0,0 +1,9 @@ +{ + "customdrawing" : { + "Category" : "General", + "Keywords" : [ + "TTreeView" + ], + "Description" : "Demonstrates how to apply the OnCustomDraw/OnCustomDrawItem and OnAdvancedCustomDraw/OnAdvancedCustomDrawItem events for tuning the visual appearance of the treeview." + } +} diff --git a/examples/treeview/customdrawing/treeview_customdraw_demo.lpi b/examples/treeview/customdrawing/treeview_customdraw_demo.lpi new file mode 100644 index 0000000000..d8139992d4 --- /dev/null +++ b/examples/treeview/customdrawing/treeview_customdraw_demo.lpi @@ -0,0 +1,80 @@ +<?xml version="1.0" encoding="UTF-8"?> +<CONFIG> + <ProjectOptions> + <Version Value="12"/> + <PathDelim Value="\"/> + <General> + <SessionStorage Value="InProjectDir"/> + <Title Value="treeview_customdraw_demo"/> + <Scaled Value="True"/> + <ResourceType Value="res"/> + <UseXPManifest Value="True"/> + <XPManifest> + <DpiAware Value="True"/> + </XPManifest> + <Icon Value="0"/> + </General> + <BuildModes> + <Item Name="Default" Default="True"/> + </BuildModes> + <PublishOptions> + <Version Value="2"/> + <UseFileFilters Value="True"/> + </PublishOptions> + <RunParams> + <FormatVersion Value="2"/> + </RunParams> + <RequiredPackages> + <Item> + <PackageName Value="LCL"/> + </Item> + </RequiredPackages> + <Units> + <Unit> + <Filename Value="treeview_customdraw_demo.lpr"/> + <IsPartOfProject Value="True"/> + </Unit> + <Unit> + <Filename Value="main.pas"/> + <IsPartOfProject Value="True"/> + <ComponentName Value="MainForm"/> + <HasResources Value="True"/> + <ResourceBaseClass Value="Form"/> + </Unit> + </Units> + </ProjectOptions> + <CompilerOptions> + <Version Value="11"/> + <PathDelim Value="\"/> + <Target> + <Filename Value="treeview_customdraw_demo"/> + </Target> + <SearchPaths> + <IncludeFiles Value="$(ProjOutDir)"/> + <UnitOutputDirectory Value="lib\$(TargetCPU)-$(TargetOS)"/> + </SearchPaths> + <Linking> + <Debugging> + <DebugInfoType Value="dsDwarf3"/> + </Debugging> + <Options> + <Win32> + <GraphicApplication Value="True"/> + </Win32> + </Options> + </Linking> + </CompilerOptions> + <Debugging> + <Exceptions> + <Item> + <Name Value="EAbort"/> + </Item> + <Item> + <Name Value="ECodetoolError"/> + </Item> + <Item> + <Name Value="EFOpenError"/> + </Item> + </Exceptions> + </Debugging> +</CONFIG> diff --git a/examples/treeview/customdrawing/treeview_customdraw_demo.lpr b/examples/treeview/customdrawing/treeview_customdraw_demo.lpr new file mode 100644 index 0000000000..8fd7439b39 --- /dev/null +++ b/examples/treeview/customdrawing/treeview_customdraw_demo.lpr @@ -0,0 +1,28 @@ +program treeview_customdraw_demo; + +{$mode objfpc}{$H+} + +uses + {$IFDEF UNIX} + cthreads, + {$ENDIF} + {$IFDEF HASAMIGA} + athreads, + {$ENDIF} + Interfaces, // this includes the LCL widgetset + Forms, main + { you can add units after this }; + +{$R *.res} + +begin + RequireDerivedFormResource := True; + Application.Scaled := True; + {$PUSH}{$WARN 5044 OFF} + Application.MainFormOnTaskbar := True; + {$POP} + Application.Initialize; + Application.CreateForm(TMainForm, MainForm); + Application.Run; +end. + diff --git a/examples/treeview/customdrawing/water1.jpg b/examples/treeview/customdrawing/water1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..648d0161652b3ba77ebbdbe66a15603f7da5efa7 GIT binary patch literal 47631 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 Slip!)7j-9l*w!}PAOG3+hm9xz literal 0 HcmV?d00001 diff --git a/examples/treeview/customdrawing/water2.jpg b/examples/treeview/customdrawing/water2.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b4ca4dd7fb239696d76ed06a40489182602a87f7 GIT binary patch literal 4210 zcmb7=_dnZx_s2g;5F_>|Vvj09E2y;gtW`>DRrRtf_ExK?+C=S9jS_p+h@fcgO=GLQ zT~>=)y-Iyu-^YFb0r&Hq-_AMD_v`V#nz>pA=(IJoGyo6?1Xx}da5V?00uV6x-@b<A zx=G1NNl8dZDWOm@au_8HMny?QMNPv%M@>UdLq$c$LPyWY#LUbLqrJh(!o<qJ#LV=s z1O&OhAt9w8C8c1ZrlMy0pSfxS=*fXlAQS@P1Hkkk2tDYk3*Z0%$aUC%^ZtkHfMj40 z042YkqUZoH2m%3<Ttf!=cLfB703`IJ47?J`WQ+z@OnfR~{76F&X6vLpsDPxZXAR2@ zsrKtjIOsp#|7rp7wHQPOK(B}5^Z*zP0)r_?u5JGh2n;~z8F)z~82OY9tUQwPYDke` z?V~G9DhF4y0POl{Fg=7GPz3(W5-@k&Gdx;g3b?WIXXeUwwn8<gKZ>E3$QAvQykYs) zSrBa7OB6=Ro$=2^RNW_hqo@?GS0B9YdFKz=oR|6oTFfv|&gofD^j`KRo}W*iUC`~Z zJM}~C70^Ac3$CopPt+hQ|F$5B?7Aa49d9Ih1yJbA>D;n=bZO+z6EIC0W7c`=OtESF z;dJS(J&$>%a|W(lyN`W-&v)Hb-g~e|4m-GhT-9XeciAJO!k)ZyL7C5!t2RDCq2ck9 zgVf?vCbO={;+?z(txj&M=ta0G>5W`}>sPj-bESTCIOy~gPFDa;)E#C>N$$*^-2JJO zKhPo1zGl$CDH!@%e-?+v^3+TTr1Rqz%=_7XrE36}VP#G>#fDW&G4H$hj^8tWhBt;^ zsBOf4J5UfT;5sfiU9khRAR2!>HRG$(Qh6`_N9xjv)#I|fMBw1~C;sN8OTlx>d5y<^ z{*EYc1u0wsbnr-+yP5LO-l4B^bFQFwAL~&`a+a1HuTDw`M8tRNB^Mvkj#nic9Mfax zjz%N`>QR+Eha!5g%2&D8@nN~b?{B1t0(U~zB`u1oPWNPbIYI*_3l3UFAOsccvE6}E zBMJ%2eah$~UlaajHE~A3qe9i^s7$Pxw!$lxv^%|QPvG^AY<0*S4_LTW_2Iab)-1d{ zJ>usi4)vRT75-j?qwiCWc<~35b{q*P74ENITXSFBlKi`+{FhQ%t#JhkqvtC(tonS` zgS(v(dG%OD<c@77ciG)e+Ims+-K^3(reYQpm(~%Li|1}ip4kZ(EOj(B@#)--aJEWk z%dIw*eEdrJbgB1QO4tw4=P&JL`+|1OH*7iHq=t4B-rouEE_o%W@sdO<B~knR74ZI? zS_x`me?pm{k5)h&q*r=Ye=FP{$42l7B|crQTIaMCcv)ff<xPEP)g&x1SAlrOo^zIj z_ezr3dt#Hjm>xN6UA$pSby_*x6Jv*VOxExmLNZ5^bDgkkPFOT#u+8>{2HF?tOkhgd zG8Q^ai|=w|#^1*in(s>ZjR2h6ar?@fi5D9=qz`ydpf8mwPBG4IMp^Eo4XzVCO=Z17 zN%N`$7&h8R=mi#2%U8DH(R>8bCSN_v$-TYI`U=<Nly;29@}CKLeIv|af8(6g8_Sr` zdj(w%giXyJj*|tgsu<}}WL*R$(p*|oZ6x15(89xlQgZp8?w^|Fkc7q??7`n^QhYUG zMv|vR6-yV�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 bsYdUo^&J<nR5rbs5-<sVQSqSQ>f8ST_x!Zt literal 0 HcmV?d00001