├── .gitattributes ├── .gitignore ├── .hgignore ├── CHANGES.txt ├── Contributions └── GenericWrapper │ └── VirtualTreeWrapper.pas ├── Design ├── VirtualTrees.dcr └── VirtualTreesReg.pas ├── Help ├── Source │ ├── Images │ │ ├── Background.bmp │ │ ├── Background.jpg │ │ ├── Big folder.bmp │ │ ├── Big folder.jpg │ │ ├── Blue star.bmp │ │ ├── Blue star.jpg │ │ ├── ButtonFillModes.bmp │ │ ├── ButtonFillModes.jpg │ │ ├── Check images overview.bmp │ │ ├── Check images overview.jpg │ │ ├── CheckDark.bmp │ │ ├── CheckDark.jpg │ │ ├── CheckLight.bmp │ │ ├── CheckLight.jpg │ │ ├── Checker150.bmp │ │ ├── Checker150.jpg │ │ ├── Class 2.bmp │ │ ├── Class 2.jpg │ │ ├── Clock.bmp │ │ ├── Clock.jpg │ │ ├── Constant 2.bmp │ │ ├── Constant 2.jpg │ │ ├── Document.bmp │ │ ├── Document.jpg │ │ ├── Event 2.bmp │ │ ├── Event 2.jpg │ │ ├── Field 2.bmp │ │ ├── Field 2.jpg │ │ ├── Folder.bmp │ │ ├── Folder.jpg │ │ ├── GenericXP.bmp │ │ ├── GenericXP.jpg │ │ ├── Help+Support.bmp │ │ ├── Help+Support.jpg │ │ ├── Hierarchy.bmp │ │ ├── Hierarchy.jpg │ │ ├── Hot.bmp │ │ ├── Hot.jpg │ │ ├── Info.bmp │ │ ├── Info.jpg │ │ ├── Library.bmp │ │ ├── Library.jpg │ │ ├── License.bmp │ │ ├── License.jpg │ │ ├── LineModes.bmp │ │ ├── LineModes.jpg │ │ ├── Link new.bmp │ │ ├── Link new.jpg │ │ ├── Mail.bmp │ │ ├── Mail.jpg │ │ ├── Method 2.bmp │ │ ├── Method 2.jpg │ │ ├── Overview.bmp │ │ ├── Overview.jpg │ │ ├── Property 2.bmp │ │ ├── Property 2.jpg │ │ ├── Read only 3.bmp │ │ ├── Read only 3.jpg │ │ ├── Selection mode.bmp │ │ ├── Selection mode.jpg │ │ ├── Snow earth.bmp │ │ ├── Snow earth.jpg │ │ ├── Source code.bmp │ │ ├── Source code.jpg │ │ ├── Space100.bmp │ │ ├── Space100.jpg │ │ ├── StripeDark.bmp │ │ ├── StripeDark.jpg │ │ ├── StripeLight.bmp │ │ ├── StripeLight.jpg │ │ ├── Struct 2.bmp │ │ ├── Struct 2.jpg │ │ ├── TickDark.bmp │ │ ├── TickDark.jpg │ │ ├── TickLight.bmp │ │ ├── TickLight.jpg │ │ ├── Titel.jpg │ │ ├── Topaz.bmp │ │ ├── Topaz.jpg │ │ ├── TreeWindow.bmp │ │ ├── TreeWindow.jpg │ │ ├── Type 2.bmp │ │ ├── Type 2.jpg │ │ ├── Variable 2.bmp │ │ ├── Variable 2.jpg │ │ ├── abstract 2.bmp │ │ ├── abstract 2.jpg │ │ ├── private 2.bmp │ │ ├── private 2.jpg │ │ ├── private DG.bmp │ │ ├── private DG.jpg │ │ ├── protect DG.bmp │ │ ├── protect DG.jpg │ │ ├── protected 2.bmp │ │ ├── protected 2.jpg │ │ ├── public 2.bmp │ │ ├── public 2.jpg │ │ ├── public DG.bmp │ │ ├── public DG.jpg │ │ ├── published 2.bmp │ │ ├── published 2.jpg │ │ ├── read only 2.bmp │ │ ├── read only 2.jpg │ │ ├── readonly DG.bmp │ │ ├── readonly DG.jpg │ │ ├── virtual 2.bmp │ │ └── virtual 2.jpg │ ├── Include │ │ ├── AdditionalInfo.dtx │ │ ├── DataHandling.dtx │ │ ├── DragDrop.dtx │ │ ├── Editing.dtx │ │ ├── Features.dtx │ │ ├── GettingStartedE.RTF │ │ ├── GettingStartedE.dtx │ │ ├── GettingStartedG.RTF │ │ ├── History.dtx │ │ ├── Installation.dtx │ │ ├── KeyHandling.dtx │ │ ├── Licensing.dtx │ │ ├── Overview.dtx │ │ ├── PaintCycles.dtx │ │ ├── Paradigm.dtx │ │ ├── QA.dtx │ │ ├── Repositiory.dtx │ │ ├── TreeImage.dtx │ │ └── specialtopics.dtx │ ├── VirtualTreeview.dox │ ├── VirtualTreeview.doxdb │ └── VirtualTreeview.ldb └── VirtualTreeview.chm ├── Packages ├── 11AndAbove │ ├── CBuilder │ │ ├── VirtualTreesCBuilder.groupproj │ │ ├── VirtualTreesCD.cbproj │ │ ├── VirtualTreesCD.cpp │ │ ├── VirtualTreesCR.cbproj │ │ └── VirtualTreesCR.cpp │ └── Delphi │ │ ├── VirtualTreesDD.dpk │ │ ├── VirtualTreesDD.dproj │ │ ├── VirtualTreesDR.dpk │ │ ├── VirtualTreesDR.dproj │ │ └── VirtualTreesDelphi.groupproj ├── Berlin │ ├── CBuilder │ │ ├── VirtualTreesCBuilder.groupproj │ │ ├── VirtualTreesCD.cbproj │ │ ├── VirtualTreesCD.cpp │ │ ├── VirtualTreesCR.cbproj │ │ └── VirtualTreesCR.cpp │ └── Delphi │ │ ├── VirtualTreesDD.dpk │ │ ├── VirtualTreesDD.dproj │ │ ├── VirtualTreesDR.dpk │ │ ├── VirtualTreesDR.dproj │ │ └── VirtualTreesDelphi.groupproj ├── Rio │ ├── CBuilder │ │ ├── VirtualTreesCBuilder.groupproj │ │ ├── VirtualTreesCD.cbproj │ │ ├── VirtualTreesCD.cpp │ │ ├── VirtualTreesCR.cbproj │ │ └── VirtualTreesCR.cpp │ └── Delphi │ │ ├── VirtualTreesDD.dpk │ │ ├── VirtualTreesDD.dproj │ │ ├── VirtualTreesDR.dpk │ │ ├── VirtualTreesDR.dproj │ │ └── VirtualTreesDelphi.groupproj ├── Sydney │ ├── CBuilder │ │ ├── VirtualTreesCBuilder.groupproj │ │ ├── VirtualTreesCD.cbproj │ │ ├── VirtualTreesCD.cpp │ │ ├── VirtualTreesCR.cbproj │ │ └── VirtualTreesCR.cpp │ └── Delphi │ │ ├── VirtualTreesDD.dpk │ │ ├── VirtualTreesDD.dproj │ │ ├── VirtualTreesDR.dpk │ │ ├── VirtualTreesDR.dproj │ │ └── VirtualTreesDelphi.groupproj └── Tokyo │ ├── CBuilder │ ├── VirtualTreesCBuilder.groupproj │ ├── VirtualTreesCD.cbproj │ ├── VirtualTreesCD.cpp │ ├── VirtualTreesCR.cbproj │ └── VirtualTreesCR.cpp │ └── Delphi │ ├── VirtualTreesDD.dpk │ ├── VirtualTreesDD.dproj │ ├── VirtualTreesDR.dpk │ ├── VirtualTreesDR.dproj │ └── VirtualTreesDelphi.groupproj ├── README.md ├── Resources ├── VT XP button minus.bmp ├── VT XP button plus.bmp ├── VT XP.bmp ├── VT check dark.bmp ├── VT check light.bmp ├── VT flat.bmp ├── VT header split.cur ├── VT move all.bmp ├── VT move all.cur ├── VT move east-west.bmp ├── VT move east-west.cur ├── VT move east.cur ├── VT move north-east.cur ├── VT move north-south.bmp ├── VT move north-south.cur ├── VT move north-west.cur ├── VT move north.cur ├── VT move south-east.cur ├── VT move south-west.cur ├── VT move south.cur ├── VT move west.cur ├── VT tick dark.bmp ├── VT tick light.bmp ├── VT utilities.bmp ├── VT vertical split.cur ├── VirtualTreeview-Icon.ico └── VirtualTreeview-Icon.png ├── Source ├── VirtualTrees.Accessibility.pas ├── VirtualTrees.AccessibilityFactory.pas ├── VirtualTrees.Actions.pas ├── VirtualTrees.AncestorFMX.pas ├── VirtualTrees.AncestorVcl.pas ├── VirtualTrees.BaseAncestorFMX.pas ├── VirtualTrees.BaseAncestorVcl.pas ├── VirtualTrees.BaseTree.pas ├── VirtualTrees.Classes.pas ├── VirtualTrees.ClipBoard.pas ├── VirtualTrees.Colors.pas ├── VirtualTrees.DataObject.pas ├── VirtualTrees.DragImage.pas ├── VirtualTrees.DragnDrop.pas ├── VirtualTrees.DrawTree.pas ├── VirtualTrees.EditLink.pas ├── VirtualTrees.Export.pas ├── VirtualTrees.FMX.pas ├── VirtualTrees.Header.pas ├── VirtualTrees.HeaderPopup.dtx ├── VirtualTrees.HeaderPopup.pas ├── VirtualTrees.StyleHooks.pas ├── VirtualTrees.Types.pas ├── VirtualTrees.Utils.pas ├── VirtualTrees.WorkerThread.pas ├── VirtualTrees.dtx └── VirtualTrees.pas ├── Tests ├── Tests.dpr ├── Tests.dproj ├── VTWorkerThreadIssue1001Tests.pas ├── VirtualStringTreeTests.pas └── VirtualTreeTests.pas └── license.txt /.gitattributes: -------------------------------------------------------------------------------- 1 | # Set the default behavior, in case people don't have core.autocrlf set. 2 | * text=auto 3 | 4 | # Explicitly declare text files you want to always be normalized and converted 5 | # to native line endings on checkout. 6 | *.pas text 7 | *.dfm text 8 | *.md text 9 | *.txt text 10 | *.java text 11 | *.cs text 12 | *.dpk -text 13 | *.dproj -text 14 | *.groupproj -text 15 | 16 | # Declare files that will always have CRLF line endings on checkout. 17 | 18 | # Denote all files that are truly binary and should not be modified. 19 | *.exe binary 20 | *.res binary 21 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Compiled source # 2 | ################### 3 | *.dcu 4 | *.obj 5 | *.exe 6 | *.bpl 7 | *.bpi 8 | *.dcp 9 | *.rsm 10 | *.stat 11 | *.map 12 | 13 | # Generated source # 14 | ################### 15 | *.hpp 16 | 17 | # Backup files # 18 | ################### 19 | *.~* 20 | 21 | # IDE Files # 22 | ################### 23 | *.dproj.local 24 | *.groupproj.local 25 | *.identcache 26 | *.dsk 27 | *.tvsconfig 28 | *.otares 29 | *.drc 30 | *.rc 31 | *.res 32 | *.local 33 | *.prjmgc 34 | 35 | # Output Folders # 36 | ################### 37 | /Win32 38 | /Win64 39 | /OSX32 40 | /__history 41 | *.bak 42 | *.Patch 43 | VirtualTreeView.zip 44 | *.#00 45 | *.pch 46 | *.skincfg 47 | *.lib 48 | /Tests/dunitx-results.xml 49 | -------------------------------------------------------------------------------- /.hgignore: -------------------------------------------------------------------------------- 1 | syntax: glob 2 | *.local 3 | *.dsk 4 | *identcache 5 | *.~dsk 6 | *.tvsconfig 7 | __history 8 | Win32 9 | Win64 10 | Debug 11 | Release 12 | *.stat 13 | -------------------------------------------------------------------------------- /Design/VirtualTrees.dcr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TurboPack/VirtualTreeView/a4b671404cd0794c77a8edd312d811d48f37dd20/Design/VirtualTrees.dcr -------------------------------------------------------------------------------- /Help/Source/Images/Background.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TurboPack/VirtualTreeView/a4b671404cd0794c77a8edd312d811d48f37dd20/Help/Source/Images/Background.bmp -------------------------------------------------------------------------------- /Help/Source/Images/Background.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TurboPack/VirtualTreeView/a4b671404cd0794c77a8edd312d811d48f37dd20/Help/Source/Images/Background.jpg -------------------------------------------------------------------------------- /Help/Source/Images/Big folder.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TurboPack/VirtualTreeView/a4b671404cd0794c77a8edd312d811d48f37dd20/Help/Source/Images/Big folder.bmp -------------------------------------------------------------------------------- /Help/Source/Images/Big folder.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TurboPack/VirtualTreeView/a4b671404cd0794c77a8edd312d811d48f37dd20/Help/Source/Images/Big folder.jpg -------------------------------------------------------------------------------- /Help/Source/Images/Blue star.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TurboPack/VirtualTreeView/a4b671404cd0794c77a8edd312d811d48f37dd20/Help/Source/Images/Blue star.bmp -------------------------------------------------------------------------------- /Help/Source/Images/Blue star.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TurboPack/VirtualTreeView/a4b671404cd0794c77a8edd312d811d48f37dd20/Help/Source/Images/Blue star.jpg -------------------------------------------------------------------------------- /Help/Source/Images/ButtonFillModes.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TurboPack/VirtualTreeView/a4b671404cd0794c77a8edd312d811d48f37dd20/Help/Source/Images/ButtonFillModes.bmp -------------------------------------------------------------------------------- /Help/Source/Images/ButtonFillModes.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TurboPack/VirtualTreeView/a4b671404cd0794c77a8edd312d811d48f37dd20/Help/Source/Images/ButtonFillModes.jpg -------------------------------------------------------------------------------- /Help/Source/Images/Check images overview.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TurboPack/VirtualTreeView/a4b671404cd0794c77a8edd312d811d48f37dd20/Help/Source/Images/Check images overview.bmp -------------------------------------------------------------------------------- /Help/Source/Images/Check images overview.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TurboPack/VirtualTreeView/a4b671404cd0794c77a8edd312d811d48f37dd20/Help/Source/Images/Check images overview.jpg -------------------------------------------------------------------------------- /Help/Source/Images/CheckDark.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TurboPack/VirtualTreeView/a4b671404cd0794c77a8edd312d811d48f37dd20/Help/Source/Images/CheckDark.bmp -------------------------------------------------------------------------------- /Help/Source/Images/CheckDark.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TurboPack/VirtualTreeView/a4b671404cd0794c77a8edd312d811d48f37dd20/Help/Source/Images/CheckDark.jpg -------------------------------------------------------------------------------- /Help/Source/Images/CheckLight.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TurboPack/VirtualTreeView/a4b671404cd0794c77a8edd312d811d48f37dd20/Help/Source/Images/CheckLight.bmp -------------------------------------------------------------------------------- /Help/Source/Images/CheckLight.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TurboPack/VirtualTreeView/a4b671404cd0794c77a8edd312d811d48f37dd20/Help/Source/Images/CheckLight.jpg -------------------------------------------------------------------------------- /Help/Source/Images/Checker150.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TurboPack/VirtualTreeView/a4b671404cd0794c77a8edd312d811d48f37dd20/Help/Source/Images/Checker150.bmp -------------------------------------------------------------------------------- /Help/Source/Images/Checker150.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TurboPack/VirtualTreeView/a4b671404cd0794c77a8edd312d811d48f37dd20/Help/Source/Images/Checker150.jpg -------------------------------------------------------------------------------- /Help/Source/Images/Class 2.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TurboPack/VirtualTreeView/a4b671404cd0794c77a8edd312d811d48f37dd20/Help/Source/Images/Class 2.bmp -------------------------------------------------------------------------------- /Help/Source/Images/Class 2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TurboPack/VirtualTreeView/a4b671404cd0794c77a8edd312d811d48f37dd20/Help/Source/Images/Class 2.jpg -------------------------------------------------------------------------------- /Help/Source/Images/Clock.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TurboPack/VirtualTreeView/a4b671404cd0794c77a8edd312d811d48f37dd20/Help/Source/Images/Clock.bmp -------------------------------------------------------------------------------- /Help/Source/Images/Clock.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TurboPack/VirtualTreeView/a4b671404cd0794c77a8edd312d811d48f37dd20/Help/Source/Images/Clock.jpg -------------------------------------------------------------------------------- /Help/Source/Images/Constant 2.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TurboPack/VirtualTreeView/a4b671404cd0794c77a8edd312d811d48f37dd20/Help/Source/Images/Constant 2.bmp -------------------------------------------------------------------------------- /Help/Source/Images/Constant 2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TurboPack/VirtualTreeView/a4b671404cd0794c77a8edd312d811d48f37dd20/Help/Source/Images/Constant 2.jpg -------------------------------------------------------------------------------- /Help/Source/Images/Document.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TurboPack/VirtualTreeView/a4b671404cd0794c77a8edd312d811d48f37dd20/Help/Source/Images/Document.bmp -------------------------------------------------------------------------------- /Help/Source/Images/Document.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TurboPack/VirtualTreeView/a4b671404cd0794c77a8edd312d811d48f37dd20/Help/Source/Images/Document.jpg -------------------------------------------------------------------------------- /Help/Source/Images/Event 2.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TurboPack/VirtualTreeView/a4b671404cd0794c77a8edd312d811d48f37dd20/Help/Source/Images/Event 2.bmp -------------------------------------------------------------------------------- /Help/Source/Images/Event 2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TurboPack/VirtualTreeView/a4b671404cd0794c77a8edd312d811d48f37dd20/Help/Source/Images/Event 2.jpg -------------------------------------------------------------------------------- /Help/Source/Images/Field 2.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TurboPack/VirtualTreeView/a4b671404cd0794c77a8edd312d811d48f37dd20/Help/Source/Images/Field 2.bmp -------------------------------------------------------------------------------- /Help/Source/Images/Field 2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TurboPack/VirtualTreeView/a4b671404cd0794c77a8edd312d811d48f37dd20/Help/Source/Images/Field 2.jpg -------------------------------------------------------------------------------- /Help/Source/Images/Folder.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TurboPack/VirtualTreeView/a4b671404cd0794c77a8edd312d811d48f37dd20/Help/Source/Images/Folder.bmp -------------------------------------------------------------------------------- /Help/Source/Images/Folder.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TurboPack/VirtualTreeView/a4b671404cd0794c77a8edd312d811d48f37dd20/Help/Source/Images/Folder.jpg -------------------------------------------------------------------------------- /Help/Source/Images/GenericXP.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TurboPack/VirtualTreeView/a4b671404cd0794c77a8edd312d811d48f37dd20/Help/Source/Images/GenericXP.bmp -------------------------------------------------------------------------------- /Help/Source/Images/GenericXP.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TurboPack/VirtualTreeView/a4b671404cd0794c77a8edd312d811d48f37dd20/Help/Source/Images/GenericXP.jpg -------------------------------------------------------------------------------- /Help/Source/Images/Help+Support.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TurboPack/VirtualTreeView/a4b671404cd0794c77a8edd312d811d48f37dd20/Help/Source/Images/Help+Support.bmp -------------------------------------------------------------------------------- /Help/Source/Images/Help+Support.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TurboPack/VirtualTreeView/a4b671404cd0794c77a8edd312d811d48f37dd20/Help/Source/Images/Help+Support.jpg -------------------------------------------------------------------------------- /Help/Source/Images/Hierarchy.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TurboPack/VirtualTreeView/a4b671404cd0794c77a8edd312d811d48f37dd20/Help/Source/Images/Hierarchy.bmp -------------------------------------------------------------------------------- /Help/Source/Images/Hierarchy.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TurboPack/VirtualTreeView/a4b671404cd0794c77a8edd312d811d48f37dd20/Help/Source/Images/Hierarchy.jpg -------------------------------------------------------------------------------- /Help/Source/Images/Hot.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TurboPack/VirtualTreeView/a4b671404cd0794c77a8edd312d811d48f37dd20/Help/Source/Images/Hot.bmp -------------------------------------------------------------------------------- /Help/Source/Images/Hot.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TurboPack/VirtualTreeView/a4b671404cd0794c77a8edd312d811d48f37dd20/Help/Source/Images/Hot.jpg -------------------------------------------------------------------------------- /Help/Source/Images/Info.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TurboPack/VirtualTreeView/a4b671404cd0794c77a8edd312d811d48f37dd20/Help/Source/Images/Info.bmp -------------------------------------------------------------------------------- /Help/Source/Images/Info.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TurboPack/VirtualTreeView/a4b671404cd0794c77a8edd312d811d48f37dd20/Help/Source/Images/Info.jpg -------------------------------------------------------------------------------- /Help/Source/Images/Library.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TurboPack/VirtualTreeView/a4b671404cd0794c77a8edd312d811d48f37dd20/Help/Source/Images/Library.bmp -------------------------------------------------------------------------------- /Help/Source/Images/Library.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TurboPack/VirtualTreeView/a4b671404cd0794c77a8edd312d811d48f37dd20/Help/Source/Images/Library.jpg -------------------------------------------------------------------------------- /Help/Source/Images/License.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TurboPack/VirtualTreeView/a4b671404cd0794c77a8edd312d811d48f37dd20/Help/Source/Images/License.bmp -------------------------------------------------------------------------------- /Help/Source/Images/License.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TurboPack/VirtualTreeView/a4b671404cd0794c77a8edd312d811d48f37dd20/Help/Source/Images/License.jpg -------------------------------------------------------------------------------- /Help/Source/Images/LineModes.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TurboPack/VirtualTreeView/a4b671404cd0794c77a8edd312d811d48f37dd20/Help/Source/Images/LineModes.bmp -------------------------------------------------------------------------------- /Help/Source/Images/LineModes.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TurboPack/VirtualTreeView/a4b671404cd0794c77a8edd312d811d48f37dd20/Help/Source/Images/LineModes.jpg -------------------------------------------------------------------------------- /Help/Source/Images/Link new.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TurboPack/VirtualTreeView/a4b671404cd0794c77a8edd312d811d48f37dd20/Help/Source/Images/Link new.bmp -------------------------------------------------------------------------------- /Help/Source/Images/Link new.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TurboPack/VirtualTreeView/a4b671404cd0794c77a8edd312d811d48f37dd20/Help/Source/Images/Link new.jpg -------------------------------------------------------------------------------- /Help/Source/Images/Mail.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TurboPack/VirtualTreeView/a4b671404cd0794c77a8edd312d811d48f37dd20/Help/Source/Images/Mail.bmp -------------------------------------------------------------------------------- /Help/Source/Images/Mail.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TurboPack/VirtualTreeView/a4b671404cd0794c77a8edd312d811d48f37dd20/Help/Source/Images/Mail.jpg -------------------------------------------------------------------------------- /Help/Source/Images/Method 2.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TurboPack/VirtualTreeView/a4b671404cd0794c77a8edd312d811d48f37dd20/Help/Source/Images/Method 2.bmp -------------------------------------------------------------------------------- /Help/Source/Images/Method 2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TurboPack/VirtualTreeView/a4b671404cd0794c77a8edd312d811d48f37dd20/Help/Source/Images/Method 2.jpg -------------------------------------------------------------------------------- /Help/Source/Images/Overview.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TurboPack/VirtualTreeView/a4b671404cd0794c77a8edd312d811d48f37dd20/Help/Source/Images/Overview.bmp -------------------------------------------------------------------------------- /Help/Source/Images/Overview.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TurboPack/VirtualTreeView/a4b671404cd0794c77a8edd312d811d48f37dd20/Help/Source/Images/Overview.jpg -------------------------------------------------------------------------------- /Help/Source/Images/Property 2.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TurboPack/VirtualTreeView/a4b671404cd0794c77a8edd312d811d48f37dd20/Help/Source/Images/Property 2.bmp -------------------------------------------------------------------------------- /Help/Source/Images/Property 2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TurboPack/VirtualTreeView/a4b671404cd0794c77a8edd312d811d48f37dd20/Help/Source/Images/Property 2.jpg -------------------------------------------------------------------------------- /Help/Source/Images/Read only 3.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TurboPack/VirtualTreeView/a4b671404cd0794c77a8edd312d811d48f37dd20/Help/Source/Images/Read only 3.bmp -------------------------------------------------------------------------------- /Help/Source/Images/Read only 3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TurboPack/VirtualTreeView/a4b671404cd0794c77a8edd312d811d48f37dd20/Help/Source/Images/Read only 3.jpg -------------------------------------------------------------------------------- /Help/Source/Images/Selection mode.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TurboPack/VirtualTreeView/a4b671404cd0794c77a8edd312d811d48f37dd20/Help/Source/Images/Selection mode.bmp -------------------------------------------------------------------------------- /Help/Source/Images/Selection mode.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TurboPack/VirtualTreeView/a4b671404cd0794c77a8edd312d811d48f37dd20/Help/Source/Images/Selection mode.jpg -------------------------------------------------------------------------------- /Help/Source/Images/Snow earth.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TurboPack/VirtualTreeView/a4b671404cd0794c77a8edd312d811d48f37dd20/Help/Source/Images/Snow earth.bmp -------------------------------------------------------------------------------- /Help/Source/Images/Snow earth.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TurboPack/VirtualTreeView/a4b671404cd0794c77a8edd312d811d48f37dd20/Help/Source/Images/Snow earth.jpg -------------------------------------------------------------------------------- /Help/Source/Images/Source code.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TurboPack/VirtualTreeView/a4b671404cd0794c77a8edd312d811d48f37dd20/Help/Source/Images/Source code.bmp -------------------------------------------------------------------------------- /Help/Source/Images/Source code.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TurboPack/VirtualTreeView/a4b671404cd0794c77a8edd312d811d48f37dd20/Help/Source/Images/Source code.jpg -------------------------------------------------------------------------------- /Help/Source/Images/Space100.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TurboPack/VirtualTreeView/a4b671404cd0794c77a8edd312d811d48f37dd20/Help/Source/Images/Space100.bmp -------------------------------------------------------------------------------- /Help/Source/Images/Space100.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TurboPack/VirtualTreeView/a4b671404cd0794c77a8edd312d811d48f37dd20/Help/Source/Images/Space100.jpg -------------------------------------------------------------------------------- /Help/Source/Images/StripeDark.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TurboPack/VirtualTreeView/a4b671404cd0794c77a8edd312d811d48f37dd20/Help/Source/Images/StripeDark.bmp -------------------------------------------------------------------------------- /Help/Source/Images/StripeDark.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TurboPack/VirtualTreeView/a4b671404cd0794c77a8edd312d811d48f37dd20/Help/Source/Images/StripeDark.jpg -------------------------------------------------------------------------------- /Help/Source/Images/StripeLight.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TurboPack/VirtualTreeView/a4b671404cd0794c77a8edd312d811d48f37dd20/Help/Source/Images/StripeLight.bmp -------------------------------------------------------------------------------- /Help/Source/Images/StripeLight.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TurboPack/VirtualTreeView/a4b671404cd0794c77a8edd312d811d48f37dd20/Help/Source/Images/StripeLight.jpg -------------------------------------------------------------------------------- /Help/Source/Images/Struct 2.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TurboPack/VirtualTreeView/a4b671404cd0794c77a8edd312d811d48f37dd20/Help/Source/Images/Struct 2.bmp -------------------------------------------------------------------------------- /Help/Source/Images/Struct 2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TurboPack/VirtualTreeView/a4b671404cd0794c77a8edd312d811d48f37dd20/Help/Source/Images/Struct 2.jpg -------------------------------------------------------------------------------- /Help/Source/Images/TickDark.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TurboPack/VirtualTreeView/a4b671404cd0794c77a8edd312d811d48f37dd20/Help/Source/Images/TickDark.bmp -------------------------------------------------------------------------------- /Help/Source/Images/TickDark.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TurboPack/VirtualTreeView/a4b671404cd0794c77a8edd312d811d48f37dd20/Help/Source/Images/TickDark.jpg -------------------------------------------------------------------------------- /Help/Source/Images/TickLight.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TurboPack/VirtualTreeView/a4b671404cd0794c77a8edd312d811d48f37dd20/Help/Source/Images/TickLight.bmp -------------------------------------------------------------------------------- /Help/Source/Images/TickLight.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TurboPack/VirtualTreeView/a4b671404cd0794c77a8edd312d811d48f37dd20/Help/Source/Images/TickLight.jpg -------------------------------------------------------------------------------- /Help/Source/Images/Titel.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TurboPack/VirtualTreeView/a4b671404cd0794c77a8edd312d811d48f37dd20/Help/Source/Images/Titel.jpg -------------------------------------------------------------------------------- /Help/Source/Images/Topaz.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TurboPack/VirtualTreeView/a4b671404cd0794c77a8edd312d811d48f37dd20/Help/Source/Images/Topaz.bmp -------------------------------------------------------------------------------- /Help/Source/Images/Topaz.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TurboPack/VirtualTreeView/a4b671404cd0794c77a8edd312d811d48f37dd20/Help/Source/Images/Topaz.jpg -------------------------------------------------------------------------------- /Help/Source/Images/TreeWindow.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TurboPack/VirtualTreeView/a4b671404cd0794c77a8edd312d811d48f37dd20/Help/Source/Images/TreeWindow.bmp -------------------------------------------------------------------------------- /Help/Source/Images/TreeWindow.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TurboPack/VirtualTreeView/a4b671404cd0794c77a8edd312d811d48f37dd20/Help/Source/Images/TreeWindow.jpg -------------------------------------------------------------------------------- /Help/Source/Images/Type 2.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TurboPack/VirtualTreeView/a4b671404cd0794c77a8edd312d811d48f37dd20/Help/Source/Images/Type 2.bmp -------------------------------------------------------------------------------- /Help/Source/Images/Type 2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TurboPack/VirtualTreeView/a4b671404cd0794c77a8edd312d811d48f37dd20/Help/Source/Images/Type 2.jpg -------------------------------------------------------------------------------- /Help/Source/Images/Variable 2.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TurboPack/VirtualTreeView/a4b671404cd0794c77a8edd312d811d48f37dd20/Help/Source/Images/Variable 2.bmp -------------------------------------------------------------------------------- /Help/Source/Images/Variable 2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TurboPack/VirtualTreeView/a4b671404cd0794c77a8edd312d811d48f37dd20/Help/Source/Images/Variable 2.jpg -------------------------------------------------------------------------------- /Help/Source/Images/abstract 2.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TurboPack/VirtualTreeView/a4b671404cd0794c77a8edd312d811d48f37dd20/Help/Source/Images/abstract 2.bmp -------------------------------------------------------------------------------- /Help/Source/Images/abstract 2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TurboPack/VirtualTreeView/a4b671404cd0794c77a8edd312d811d48f37dd20/Help/Source/Images/abstract 2.jpg -------------------------------------------------------------------------------- /Help/Source/Images/private 2.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TurboPack/VirtualTreeView/a4b671404cd0794c77a8edd312d811d48f37dd20/Help/Source/Images/private 2.bmp -------------------------------------------------------------------------------- /Help/Source/Images/private 2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TurboPack/VirtualTreeView/a4b671404cd0794c77a8edd312d811d48f37dd20/Help/Source/Images/private 2.jpg -------------------------------------------------------------------------------- /Help/Source/Images/private DG.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TurboPack/VirtualTreeView/a4b671404cd0794c77a8edd312d811d48f37dd20/Help/Source/Images/private DG.bmp -------------------------------------------------------------------------------- /Help/Source/Images/private DG.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TurboPack/VirtualTreeView/a4b671404cd0794c77a8edd312d811d48f37dd20/Help/Source/Images/private DG.jpg -------------------------------------------------------------------------------- /Help/Source/Images/protect DG.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TurboPack/VirtualTreeView/a4b671404cd0794c77a8edd312d811d48f37dd20/Help/Source/Images/protect DG.bmp -------------------------------------------------------------------------------- /Help/Source/Images/protect DG.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TurboPack/VirtualTreeView/a4b671404cd0794c77a8edd312d811d48f37dd20/Help/Source/Images/protect DG.jpg -------------------------------------------------------------------------------- /Help/Source/Images/protected 2.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TurboPack/VirtualTreeView/a4b671404cd0794c77a8edd312d811d48f37dd20/Help/Source/Images/protected 2.bmp -------------------------------------------------------------------------------- /Help/Source/Images/protected 2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TurboPack/VirtualTreeView/a4b671404cd0794c77a8edd312d811d48f37dd20/Help/Source/Images/protected 2.jpg -------------------------------------------------------------------------------- /Help/Source/Images/public 2.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TurboPack/VirtualTreeView/a4b671404cd0794c77a8edd312d811d48f37dd20/Help/Source/Images/public 2.bmp -------------------------------------------------------------------------------- /Help/Source/Images/public 2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TurboPack/VirtualTreeView/a4b671404cd0794c77a8edd312d811d48f37dd20/Help/Source/Images/public 2.jpg -------------------------------------------------------------------------------- /Help/Source/Images/public DG.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TurboPack/VirtualTreeView/a4b671404cd0794c77a8edd312d811d48f37dd20/Help/Source/Images/public DG.bmp -------------------------------------------------------------------------------- /Help/Source/Images/public DG.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TurboPack/VirtualTreeView/a4b671404cd0794c77a8edd312d811d48f37dd20/Help/Source/Images/public DG.jpg -------------------------------------------------------------------------------- /Help/Source/Images/published 2.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TurboPack/VirtualTreeView/a4b671404cd0794c77a8edd312d811d48f37dd20/Help/Source/Images/published 2.bmp -------------------------------------------------------------------------------- /Help/Source/Images/published 2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TurboPack/VirtualTreeView/a4b671404cd0794c77a8edd312d811d48f37dd20/Help/Source/Images/published 2.jpg -------------------------------------------------------------------------------- /Help/Source/Images/read only 2.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TurboPack/VirtualTreeView/a4b671404cd0794c77a8edd312d811d48f37dd20/Help/Source/Images/read only 2.bmp -------------------------------------------------------------------------------- /Help/Source/Images/read only 2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TurboPack/VirtualTreeView/a4b671404cd0794c77a8edd312d811d48f37dd20/Help/Source/Images/read only 2.jpg -------------------------------------------------------------------------------- /Help/Source/Images/readonly DG.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TurboPack/VirtualTreeView/a4b671404cd0794c77a8edd312d811d48f37dd20/Help/Source/Images/readonly DG.bmp -------------------------------------------------------------------------------- /Help/Source/Images/readonly DG.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TurboPack/VirtualTreeView/a4b671404cd0794c77a8edd312d811d48f37dd20/Help/Source/Images/readonly DG.jpg -------------------------------------------------------------------------------- /Help/Source/Images/virtual 2.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TurboPack/VirtualTreeView/a4b671404cd0794c77a8edd312d811d48f37dd20/Help/Source/Images/virtual 2.bmp -------------------------------------------------------------------------------- /Help/Source/Images/virtual 2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TurboPack/VirtualTreeView/a4b671404cd0794c77a8edd312d811d48f37dd20/Help/Source/Images/virtual 2.jpg -------------------------------------------------------------------------------- /Help/Source/Include/AdditionalInfo.dtx: -------------------------------------------------------------------------------- 1 | @@AdditionalInfo.htm 2 | 3 | 4 | * Special care has been taken to wrap every event call by a DoXXX method (e.g. for OnBeforeItem paint there is a 5 | protected DoBeforeItemPaint method) which is always virtual to allow descendants to override it and intercept so calls to 6 | events regardless whether there is actually an event handler assigned or not. 7 | * During a locked update stage (entered by BeginUpdate) there will be <B>no</B> updates of the tree nor the 8 | selection. If you change the selection in such a stage then it is temporarily accumulated and applied if, during an 9 | EndUpdate call, the inner update counter reaches zero. 10 | 11 | 12 | 13 | <B>Borland C++ Builder:</B> 14 | 15 | * Define the constant NO_WIN32_LEAN_AND_MEAN in your environment/project options to avoid problems with undefined 16 | interfaces. 17 | * The automatic conversion process from Delphi source code to C++ code has unfortunately some bugs. Most of them 18 | could be solved by rearranging the Delphi code, but one problem still remains and must be solved manually. The translator 19 | does not automatically consider default parameters in functions. The parameters are correctly converted but without the 20 | default value. Usually the problem will appear when you try to compile and there is a call of the function with fewer 21 | than expected parameters. 22 | 23 | Summary 24 | This chapter collects everything else which is important or very helpful to know but which does not justify an own 25 | chapter. 26 | -------------------------------------------------------------------------------- /Help/Source/Include/DataHandling.dtx: -------------------------------------------------------------------------------- 1 | @@DataHandling.htm 2 | <TITLE Data handling> 3 | 4 | Usually single items (as in TTreeview and TListView) only have a simple data member which can take a pointer to the 5 | actual data an application maintains for this item in an external structure. This principle can be used with Virtual 6 | Treeview too. But the control goes a step further by letting the application decide how much data per node is needed and 7 | providing this space implicitly. This way the application is freed from maintaining an extra structure sometimes. 8 | 9 | 10 | 11 | * Application view * 12 | The core point behind this technique is that the tree has to allocate and deallocate memory for each node anyway. The 13 | amount to allocate does not matter with respect to node handling. So it is easy for the tree to allocate some more bytes 14 | for the application. To know how much memory is to be allocated there are several ways to tell. Firstly there is the 15 | property NodeDataSize which can be set already at design time and describes the required user memory per node in bytes. 16 | If you don't know this size (because it depends on a structure which you want to be examined by SizeOf) then simply 17 | assign your size in the form creation process to the tree via the NodeDataSize property. 18 | 19 | 20 | 21 | Secondly, use the event OnGetNodeDataSize. This event may occasionally be useful for values which are neither known at 22 | design time nor can they be determined at compile time (as the size of a record). The event is triggered when the 23 | NodeDataSize property is -1 (which is by default the case). This value will be replaced by the actual data size returned 24 | in the event. 25 | 26 | 27 | <TABLE> 28 | <B>Note: </B>If you want to store application data in a node (e.g. the caption) then you <B>must</B> allocate node data 29 | as outlined above. If you get an access violation in OLE32.dll then you have likely forgotten to allocate this node data 30 | and tried to assign a string. 31 | </TABLE> 32 | 33 | 34 | The allocated bytes per node are an inherent part of the node record and follow the last internal member in the 35 | TVirtualNode structure (symbolized by the Data member). In order for the application to access this memory it needs to 36 | map its node data structure to this tree internal memory. To simplify this task the application can use GetNodeData. This 37 | method returns the address of the data area in a node record. This address can then be assigned to a local pointer 38 | variable (or can be type casted) as shown in the chapter code repository. I strongly recommend that you always use the 39 | GetNodeData method to get the data address instead of simply using @Node.Data because a tree class may add internal data 40 | to this area which starts then at this address while the actual application data begins a few bytes later. 41 | 42 | 43 | 44 | * Tree Control view * 45 | Depending on its tasks a tree may need to store data on a per node basis (e.g. TCustomVirtualStringTree keeps the width 46 | \of a node to allow quick response on DoGetNodeWidth which is used for various tasks including draw selection). 47 | Particularly multi selection with the mouse (draw selection) depends on very quick width determination to allow 48 | interactivity even with 100,000 selected nodes. 49 | 50 | In order to avoid access conflicts between the tree and the application a simple mechanism has been implemented to allow 51 | flexible internal node data handling (in addition to the normal node record and application data handling). Following 52 | functions have been added to the base tree: 53 | 54 | * InternalData 55 | * AllocateInternalDataArea 56 | 57 | 58 | <TABLE> 59 | <B>Note: </B>A tree descendant which requires additional internal data <B>must</B> call AllocateInternalDataArea to 60 | register its need. 61 | </TABLE> 62 | 63 | 64 | <B>InternalData</B> is a virtual function which does nothing in the base tree class (returns nil). I recommend to 65 | \override this method in descendants however and return the address of the internal data for that tree. This address can 66 | easily be determined by adding the offset returned from AllocateInternalDataArea to the start of the node record. To make 67 | this work you have of course to keep the offset somewhere, just like TVirtualStringTree does. 68 | 69 | 70 | 71 | <B>AllocateInternalDataArea</B> is the function which sums up all requests for internal data and keeps this sum which 72 | must be added to each node data offset to return the correct address for user data. Note: call this method only once 73 | (e.g. during tree creation) to register the data area you need. 74 | 75 | Summary 76 | An important aspect of the tree is the handling of data for each node. Read here how Virtual Treeview manages your data. 77 | -------------------------------------------------------------------------------- /Help/Source/Include/DragDrop.dtx: -------------------------------------------------------------------------------- 1 | @@DragDrop.htm 2 | <TITLE Drag'n drop and clipboard handling> 3 | 4 | One important aspect for system integration under Windows is the ability to use OLE (object linking and embedding) to 5 | transfer data from and to other applications. Unfortunately this is a dark chapter in Delphi's feature list because there 6 | has never been support for either OLE drag'n drop or OLE clipboard handling (until Delphi 6 at least). Instead a 7 | proprietary mechanism had been invented which is not at all compatible with the rest of the system. 8 | 9 | 10 | 11 | * Drag'n drop * 12 | Virtual Treeview supports both kinds of drag'n drop (VCL and OLE) and tries to present a single interface to the 13 | application. This means that those (already existing) events which can be reused are used in the process (like 14 | OnStartDrag and OnEndDrag). Other events however differ significantly from the VCL variants because of the additional 15 | information available during OLE drag'n drop. These events are OnDragOver and OnDragDrop. Read there for a detail 16 | \description of the parameters. Since in a VCL drag'n drop operation the source is always known as being a VCL control it 17 | is relatively easy to determine the participants. This however is not very data-oriented and OLE drag'n drop focuses 18 | exactly on this issue. In such an operation a so called data object is passed to the receiver which is a COM interface 19 | (IDataObject) and can be used to retrieve the dragged data in various formats. 20 | 21 | To accept OLE drag'n drop an application has basically the same steps to perform as always used for VCL drag'n drop plus 22 | some extra work to handle the different data coming in during the drop event. Usually there is an event handler for 23 | OnDragOver which tells not only whether dropping is allowed on a particular position but also which effect should then 24 | take place. Allowed effects are copy, move and link. This is the first new aspect which is not possible with VCL drag'n 25 | drop. As always the real work must be done in the drop event and Virtual Treeview supports processing its own native data 26 | format (which is a stream of chunks to represent the tree structure) by a special method called ProcessDrop. Note that 27 | this method can only be used for the internal format and does not process other formats like text or images. From this 28 | information you can easily conclude that a lot of other formats can be passed around with the mighty OLE drag'n drop 29 | mechanism. It is however out of the scope of this help to describe how this mechanism works or to give an overview of 30 | possible data formats. Please read the Win32 SDK documentation as it comes with your Delphi copy or browse the MSDN 31 | \online documents at MSDN online for a detailed description. The only interesting aspect you should keep in mind at the 32 | moment is that the data object used in a drag'n drop operation is the same as used for OLE clipboard data. Hence you can 33 | share code for handling of both and you don't have to learn different ways or data structures. 34 | 35 | 36 | 37 | * Step by step * 38 | The typical approach to determine how to handle data during the drop event in Virtual Treeview is as follows: 39 | 40 | * If the given data object is nil then the source of the drag operation is the VCL and you have to figure out 41 | yourself what and how to process the drop. The other parameters contain also mostly useful data (Effects is set to 42 | default values however). Read more details at OnDragDrop. 43 | * With a valid data object you know OLE data is being passed. Check the source parameter to learn whether a Virtual 44 | Treeview is the source or something else. Although further processing can successfully be done without this information 45 | it is still useful if you want to optimize data transition and source as well as target tree are in the same process (in 46 | which case source memory can be accessed from the target tree). 47 | * Loop through the given formats list to find a format you can handle. Since it is recommended to sort this list so 48 | that preferred formats come first you can simply accept the first format you find in the array which you are able to 49 | handle. With a Virtual Treeview as source usually already the second entry represents the native format (the first is a 50 | special reference format which is not useful for an application) and can be passed to ProcessDrop. The native format is 51 | registered as CF_VIRTUALTREE while other typical formats include CF_TEXT or CF_HDROP. Note that, because Virtual Treeview 52 | is already OLE drag'n drop aware, you do not need to register its window for accepting file drops. If the user drops 53 | files onto a Virtual Treeview window you will get the CF_HDROP format in the format list passed to OnDragDrop. 54 | * Depending on the data formats you might want to take various actions. For the native tree format you will likely 55 | want <B>ProcessDrop</B> to handle the data. If you made sure source and target tree are in the same application (process) 56 | you can even omit the entire handling and simply call MoveTo or CopyTo. 57 | * If you do not call any tree method or handle the dropped data somehow yourself nothing will happen. No data will be 58 | added. 59 | 60 | Summary 61 | Virtual Treeview behaves also well when it comes to data exchange with other applications or structural manipulations 62 | using the mouse. In both cases the prerred method is using OLE. Read here why and what's behind it. 63 | -------------------------------------------------------------------------------- /Help/Source/Include/Editing.dtx: -------------------------------------------------------------------------------- 1 | @@Editing.htm 2 | <TITLE Editors and editing> 3 | 4 | Generally it cannot be said what data a user will edit when he or she edits a node. In the case of the string tree it 5 | becomes a lot easier to decide because we have, as the name implies, strings and captions to edit. But this is only a 6 | special case and the underlaying edit principle must be flexible to allow editing various different data of a node, 7 | including several items instead of only single ones. 8 | 9 | 10 | 11 | Since you cannot generally tell what will be edited the used solution does not assume anything. Instead it delegates the 12 | entire process to the application or derived trees via the IVTEditLink class. This interface defines some necessary 13 | methods which allow interaction between the tree and the editor but the actual editor implementation is up to the edit 14 | link (which can of course delegate this task to even another instance like the application). The edit link is responsible 15 | for everything including to hide and show the editor, reading the old values of a node and setting the new values etc. 16 | The tree only signals some general states like the edit start, end or cancellation. 17 | 18 | 19 | 20 | Editing starts with the protected DoEdit method which may be triggered by the edit timer (which in turn is triggered by 21 | clicking again on the focused node), by pressing F2 or by calling EditNode. DoEdit creates an editor (actually only the 22 | edit link) via the virtual CreateEditor method which should be overridden by descendant trees to return a valid edit link 23 | (as TVirtualStringTree does). Otherwise the method will query the application for an editor link. Actual editing starts 24 | \only if CreateEditor returns a valid edit link. 25 | 26 | After the tree received a valid edit link it initiates communication by calling PrepareEdit which can be used by the link 27 | to retrieve the values to be edited using the given node and column. If the edit link returns True in this call another 28 | call is initiated by the tree telling the link where to place the editor using the SetBounds method. Finally the tree 29 | calls BeginEdit to actually start the edit operation. From now on the edit link is responsible for any further action 30 | including passing on key presses like VK_UP and VK_DOWN to select a new node to edit etc. The link must also be aware 31 | that editing might be stopped at any time by EndEdit or CancelEdit. Otherwise however the edit link (and its editor(s)) 32 | is completely autonomous and can use whatever it considers as being appropriate for the editing task. It isn't even 33 | limited to use an in-place editor. 34 | 35 | 36 | 37 | With the class TStringEditLink you will find a sample implementation used in the string tree to edit single node 38 | captions. By examining the used editor (a normal TEdit control) you will find some things which should be handled the 39 | same or in a similar way to make editing smooth. 40 | 41 | 42 | 43 | Starting with version 3.8 Virtual Treeview allows to use the TNT controls suite from Troy Wolbrink, which allow to edit 44 | node captions with Unicode content. Download the latest package and add its path after installation to your project. 45 | Enable the TntSupport compiler switch by changing it from <B>{.$define TntSupport}</B> to <B>{$define TntSupport}</B> and 46 | recompile. 47 | 48 | Summary 49 | Because of the virtual nature of Virtual Treeview editing becomes a difficult issue. Read here what needs to be 50 | considered and where you can hook in to allow any editor for a node. 51 | -------------------------------------------------------------------------------- /Help/Source/Include/GettingStartedE.dtx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TurboPack/VirtualTreeView/a4b671404cd0794c77a8edd312d811d48f37dd20/Help/Source/Include/GettingStartedE.dtx -------------------------------------------------------------------------------- /Help/Source/Include/Installation.dtx: -------------------------------------------------------------------------------- 1 | @@Installation.htm 2 | <title Installation> 3 | 4 | Virtual Treeview is designed for Delphi 7 and higher and can also be used with Borland C++ Builder 2006 and up. It is 5 | however not designed to work directly with Kylix, Lazarus, Free Pascal or Delphi for .NET. 6 | 7 | 8 | 9 | The initial core source files are: 10 | 11 | <image Document><b>Compilers.inc</b> 12 | 13 | Include file which contains various compiler switches which determine the target compiler and the target operating 14 | system. 15 | 16 | <image Document><b>VTConfig.inc</b> 17 | 18 | Include file which contains version neutral compiler switches which control certain things that can be compiled into the 19 | tree view (e.g. Windows XP theme support, Unicode controls, a specialized node memory manager etc.). 20 | 21 | <image Document><b>VirtualTrees.pas</b> 22 | 23 | The actual implementation of Virtual Treeview and its descendants and support classes. 24 | 25 | <image Document><b>VirtualTrees.res</b> 26 | 27 | Resource file containing some check and miscellaneous images used for all Virtual Treeviews. 28 | 29 | <image Document><b>VTHeaderPopup.pas</b> 30 | 31 | Unit containing a TPopupMenu descendant which provides a convenient way to implement a header popup used to switch 32 | visibility of columns. 33 | 34 | * Installation * 35 | Please have a look at the file INSTALL.txt for installation instructions. the installer which was formerly available is 36 | no longer maintained. 37 | -------------------------------------------------------------------------------- /Help/Source/Include/Licensing.dtx: -------------------------------------------------------------------------------- 1 | @@Licensing.htm 2 | <title Licensing> 3 | 4 | Virtual Treeview License Agreement 5 | 6 | 7 | 8 | The contents of this file are subject to the Mozilla Public License Version 1.1 (the "License"); you may not use this 9 | \file except in compliance with the License. You may obtain a copy of the License at <extlink http://www.mozilla.org/MPL>www.mozilla.org/MPL</extlink>. 10 | 11 | 12 | 13 | Alternatively, you may redistribute this library, use and/or modify it under the terms of the GNU Lesser General Public 14 | License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later 15 | \version. You may obtain a copy of the LGPL at <extlink http://www.gnu.org/copyleft>www.gnu.org/copyleft</extlink>. 16 | 17 | 18 | 19 | Software distributed under the License is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express 20 | \or implied. See the License for the specific language governing rights and limitations under the License. 21 | 22 | 23 | 24 | The original code is VirtualTrees.pas, released September 30, 2000. 25 | 26 | 27 | 28 | The initial developer of the original code is digital publishing AG (www.digitalpublishing.de). 29 | 30 | 31 | 32 | Virtual Treeview is written, published and maintaned by 33 | 34 | 35 | 36 | Mike Lischke (public@soft-gems.net, www.soft-gems.net). 37 | 38 | Joachim Marder (joachim.marder@gmail.com) 39 | 40 | and many more 41 | -------------------------------------------------------------------------------- /Help/Source/Include/Overview.dtx: -------------------------------------------------------------------------------- 1 | @@Overview.htm 2 | <title Introduction> 3 | 4 | Virtual Treeview is a tree view control built from ground up. More than 3 years of development made it one of the most 5 | flexible and advanced tree controls available today. Virtual Treeview starts off with the claim to improve many aspects 6 | \of existing solutions and introduces some new technologies and principles which were not available before. 7 | 8 | As the name already indicates, this control uses a different paradigm for tree management than other controls of this 9 | kind. It does not know anything about the data it manages (except its size), not even the captions of a node. Everything 10 | is retrieved from the application via events (or descendants via overridden methods). 11 | 12 | Virtual Treeview has been carefully designed and thoroughly tested. The control proved its concept as well as everyday 13 | fitness already in many commercial products and freeware projects. 14 | 15 | <table noborder> 16 | <image Overview.bmp> 17 | </table> 18 | Virtual Treeview can be characterized by the following core capabilities: 19 | 20 | 21 | 22 | * <b>Extremely fast</b> and designed for <b>high speed access</b>. 23 | * <b>Memory sparing</b> which is the premise for speed and capacity. 24 | * A <b>high capacity</b> control. 25 | * <b>Highly customizable</b>. 26 | * Designed for <b>professionals</b>, implements a <b>virtual paradigm</b> with a <b>new serialization concept</b>. 27 | * <b>Newest technologies and platforms</b> are supported (e.g. Windows XP). 28 | * Unique features like <b>Unicode</b>, <b>right-to-left</b> directionality and layout, <b>alpha blending</b> 29 | and <b>OLE</b> drag'n drop and clipboard operations. 30 | 31 | <table noborder> 32 | <image GenericXP.bmp> 33 | </table> 34 | 35 | <b>Homepage:</b> <extlink http://www.soft-gems.net>www.soft-gems.net</extlink> 36 | 37 | <b>E-Mail:</b> <extlink mailto:support@soft-gems.net>support@soft-gems.net</extlink> 38 | 39 | <b>Support center:</b> <extlink http://support.soft-gems.net>support.soft-gems.net</extlink> 40 | 41 | <b>News group: </b><extlink news://news.soft-gems.net/delphi-gems.support.virtualtreeview>delphi-gems.support.virtualtreeview</extlink> 42 | 43 | <b>Web based forums: </b><extlink http://support.soft-gems.net/forums>support.soft-gems.net/forums</extlink> 44 | 45 | <b>Issue Tracker: </b><extlink http://support.soft-gems.net/mantis>support.soft-gems.net/mantis</extlink> 46 | -------------------------------------------------------------------------------- /Help/Source/Include/PaintCycles.dtx: -------------------------------------------------------------------------------- 1 | @@PaintCycles.htm 2 | <TITLE Paint cycles and stages> 3 | 4 | Similar to the system tree view Virtual Treeview defines so called <B>paint cycles</B>. A paint cycle is one run of the 5 | paint code which draws a part or the entire window. In Virtual Treeview this task is accomplished by the method PaintTree 6 | which centralizes the paint management into one place and is called for various tasks like window painting, drag image 7 | painting, WM_PRINTCLIENT handling and so on. 8 | 9 | 10 | 11 | This paint method is able to draw the entire tree regardless of its window to the target canvas and optimizes painting by 12 | considering the update/clipping rectangle, which is passed in via the Window parameter (see also PaintTree). 13 | 14 | 15 | 16 | Usually the following paint stages are executed during a paint cycle: 17 | 18 | * before paint (OnBeforePaint) 19 | * before item paint (OnBeforeItemPaint) 20 | * before item erase (OnBeforeItemErase) 21 | * after item erase (OnAfterItemErase) 22 | * before cell draw (OnBeforeCellPaint) 23 | * on paint text (string trees only, OnPaintText) 24 | * after cell draw (OnAfterCellPaint) 25 | 26 | after item paint (OnAfterItemPaint) after paint (OnAfterPaint) 27 | 28 | 29 | 30 | The cell and node events are of course not executed if there is no node to be drawn. A special flag (tsPainting) in 31 | TreeStates indicates when a paint cycle is in progress. Using this flag an application can for instance determine whether 32 | a node is initialized because it is about to be drawn or for other reasons. 33 | 34 | 35 | 36 | Every of the stages above is accompanied by a specific event which allows the application to customize a particular 37 | aspect in the painting. The following list discusses tasks which can be done during the various stages. 38 | 39 | 40 | <TABLE> 41 | Stage \Description Comments 42 | ----------------- ----------------------------- ------------------------------------------------------------------------------------------ 43 | before paint This stage is entered only This stage is typically used to do any further setup of the target canvas of the paint 44 | \once per paint cycle. After \operation (e.g. the window or a printer canvas), like changing the mapping mode or 45 | setting the vsPainting state setting another clipping region. Since the passed canvas is not directly used to do the 46 | it is the very first actual painting setting its font or colors has no effect. Basically only properties which 47 | instruction in a cycle. affect blitting a bitmap to the target canvas have an effect at all. 48 | before item This stage is entered once In the event for this stage you can tell the tree whether you want to paint the node 49 | paint per node to be drawn and entirely on your own or let the tree paint it. As this happens on a per node basis it is 50 | allows directly to control the perfect place to maintain a special layout without doing everything in the paint 51 | the path which is the taken cycle. Note: setting the CustomDraw parameter in the event to True will skip the node 52 | to paint the node. entirely, without painting anything of the standard things like tree lines, button, 53 | images or erasing the background. Hence to display any useful information for the node do 54 | it in the OnBeforeItemPaint event.<P> 55 | <P> 56 | This is the first stage which gets the double buffer canvas which is used to draw a node 57 | so if you want to set special properties this is a good opportunity. Keep in mind though 58 | that in particular the colors are set by the tree according to specific rules (focus, 59 | selection etc.). 60 | before item This stage is also entered This stage and its associated event is usually used to give the node a different 61 | erase \only once per node and background color or erase the background with a special pattern which is different to 62 | allows to customize the what the tree would draw. 63 | node's background. 64 | after item erase This stage is also entered This stage and its associated event is used to do additional drawings after the 65 | \only once per node. background has been erased. 66 | before cell This paint stage is the While internally a full setup for this node happened before the stage is entered (if it 67 | paint first of the cell specific is the first run) the only noticeable effect for the application which has changed 68 | stages used to customize a compared to <B>after item erase</B> is that the painting is limited to the current 69 | single cell of a node and is column. There are still no lines or images painted yet. 70 | called several times per 71 | node, depending on the 72 | number of columns. If no 73 | columns are used then it is 74 | called once. 75 | \on paint text After default stuff like Because Virtual Treeview does not know how to draw the content of a node it delegates 76 | lines and images has been this drawing to a virtual method called DoPaintNode. Descendants override this method and 77 | painted the paint node/paint do whatever is appropriate. For instance TVirtualDrawTree simply triggers its OnDrawNode 78 | text stage is entered. event while the TVirtualStringTree prepares the target canvas and allows the application 79 | to override some or all canvas settings (font etc.) by triggering OnPaintText. After this 80 | event returned the text/caption of the node is drawn. Changed font properties are taken 81 | into account when aligning and painting the text.<P> 82 | <B>Note: </B>The string tree triggers the OnGetText event two times if toShowStaticText 83 | is enabled in the TVirtualStringTree.TreeOptions.StringOptions property. Once for the 84 | normal text and once for the static text. Use the event's parameter to find out what is 85 | required. 86 | after cell paint This stage is entered This stage can be used to add whatever you like to a single cell after everything has 87 | immediately after the cell been painted there and is triggered once per column. 88 | is drawn. 89 | after item paint This stage is entered after The after item paint stage is used to add node specific stuff like frames and the like 90 | all cells of an item are which concern all columns of that node and is called once per node. 91 | drawn. 92 | after paint The after paint stage is the In this stage everything of the tree (related to the current update area) has been drawn, 93 | last stage in the long chain including the selection rectangle. 94 | \of paint stages and is 95 | entered after when paint 96 | cycle is complete. 97 | </TABLE> 98 | Summary 99 | The most complex process in Virtual Treeview is without doubts its painting. Read here what stages Virtual Treeview 100 | enters during paint and how you can customize this process. 101 | -------------------------------------------------------------------------------- /Help/Source/Include/Paradigm.dtx: -------------------------------------------------------------------------------- 1 | @@Paradigm.htm 2 | <TITLE The virtual paradigm> 3 | 4 | * The History * 5 | Years ago I wrote a treeview implementation called TreeNT (see also <EXTLINK http://www.delphi-gems.com>TreeNT at the 6 | Delphi Gems homepage</EXTLINK>). This control is a wrapper around the system tree control provided by ComCtl32.dll. Over 7 | the time while I developed the control I encountered many limitations, either introduced by the Delphi VCL or "intended" 8 | by the underlying system control. The most annoying problems were the dependency on specific ComCtl32.dll versions and 9 | the slow behavior of the control when more than a couple of nodes had to be managed. In fact Microsoft's tree view has 10 | been designed to ease life for small node sets only. 11 | 12 | 13 | 14 | * The problems * 15 | Despite the problems with the system tree control TreeNT worked quite well and has meanwhile been downloaded several 16 | thousands of times from my web site and those many other Delphi sites around the world. When I started working for a 17 | software house in Munich I quickly included TreeNT into the company's inhouse library. But then the problems which were 18 | formerly only annoying started to make the tree nearly unusable. I realized how much the requirements in the private and 19 | professional/commercial environment actually differ. 20 | 21 | Aside many other problems one was especially annoying: How can adding some 5000-6000 nodes take a minute or so to finish? 22 | This question was the reason that I created the very first version of Virtual Treeview. What I actually did was to recall 23 | my studies where I learned my trade. Why, on earth, must everything be wrapped into an object? In Java and the like even 24 | simple data types like strings are objects. While this kind of abstraction provides some additional conveniences it costs 25 | quite a lot in terms of CPU power and memory, particularly if it comes to many instances of such simple type pretenders. 26 | 27 | 28 | 29 | * The nodes * 30 | These thoughts inspired the idea of using small records as nodes only and putting them into a doubly linked list (see 31 | also TVirtualNode). Well, this idea is not very new (in fact I used to write many code parts using linked lists), but 32 | together with other principles it got a new quality. The key points are 33 | 34 | * node minimalism and 35 | * pull over push. 36 | 37 | Pull over push means here that the tree asks for the data it must display instead of having the application to push it 38 | into the tree during creation. A node stays uninitialized and dataless until it is touched the first time. Only its 39 | existence and place in the tree is known. The assumption that this would be much better in terms of speed and 40 | responsiveness was based on the thought that only very few nodes need really to be accessed usually (mainly to display a 41 | handful of nodes in the tree window). Tests confirmed quickly that this was indeed the case. 42 | 43 | The node minimalism lead to the approach to leave out everything from the node structure which can be determined 44 | dynamically and/or is used very rarely. One example is the owner tree of the node. There are only very few cases where 45 | the knowledge about it is necessary. So a standalone method (TreeFromNode) has been created to allow retrieval of the 46 | \owner tree. Another omitted member was the absolute position of a node which is needed e.g. for invalidation of a 47 | certain node or start of tree window painting. For this decision however another fact was more relevant: inserting, 48 | deleting, collapsing, expanding and hiding nodes makes all following positions obsolete and requires a rescan and update 49 | \of the tree. Since this would be much too expensive a node cache has been introduced. This cache is a simple 50 | \one-dimensional array which holds node references in increasing absolute position order. A separate thread (which is 51 | shared between all Virtual Treeview instances in a program) is used to collect the references in the background. Well, 52 | \one could say that all these updates are still necessary (even with a cache because it must be held coherent) and the 53 | thread could well work directly in the node records. The most valuable advantage of the array like cache is however that 54 | you can query it for a node at a particular position by using binary search which is not possible with linked lists. 55 | 56 | 57 | 58 | * The paradigm * 59 | Being <B>virtual</B> is more than requesting data on demand. Although this is an important aspect some additional things 60 | are considered in Virtual Tree. The <B>pull over push</B> principle for data can be extended for the structure as well. 61 | It means then to create nodes or entire branches only on demand (e.g. when expanding a node or iterating through its 62 | child nodes for incremental search etc.). This allows to fill a tree view with only the top nodes and initialize only 63 | those of them which are currently in view. Clearly this increases start up times a lot for large trees. 64 | 65 | The core sequence for filling the tree is an iteration, which runs over initializing a node (to tell if it has children 66 | at all, see OnInitNode) and initializing its children (see OnInitChildren), which only means to tell the tree how many 67 | child nodes should be there. The tree will automatically allocate memory and set up the structure in the most efficient 68 | way but does not yet query for data. This will then again be done in OnInitNode for each of the newly created child nodes 69 | as soon as they are touched the first time. For compatibility reasons also AddChild and InsertNode have been implemented 70 | but are not as efficient as the iterative approach just explained. For obvious reasons these compatibility methods have 71 | to trigger some updates for the tree implicitly unless updates are locked. It is therefore strongly recommended to put 72 | calls to AddChild and InsertNode always into a BeginUpdate/EndUpdate frame (if there is more than one call). 73 | 74 | 75 | 76 | * Records instead classes * 77 | Basically, the idea of virtualizing the tree control and using records instead of classes were two ideas which are born 78 | nearly at the same time. It was quite clear from the very first moment that classes can never be as effective as a simple 79 | record structures (in terms of size, access speed and management). Sure, a TPersistent only needs 4 bytes more than a 80 | record (the pointer to the class' VMT), but these are still too many extra bytes if you consider that I have wrestled 81 | quite a while with myself about every byte in a tree node (and want the minimalism principle). Another point you should 82 | not underestimate is that classes as nodes would of course also mean to put node specific methods into this class too, 83 | which will be overridden at times (this is the main argument to use a class after all). This will require additional CPU 84 | cycles just to lookup access methods, to dereference etc. which in turn will cost extra time. Trees with only some 1000 85 | nodes will never see a large difference but for big trees this is significant and Virtual Treeview has mainly been 86 | created to address high capacity tree views. 87 | 88 | With choosing records I also gave up the VCL concept of having a tree nodes class which is responsible to manage tree 89 | nodes and is secondary to the control itself. In Virtual Treeview every access to the tree content is done via methods 90 | and properties provided by the tree control. Keep also in mind that nobody prevents you from using classes and store 91 | their references in the node's data area. It is only just so that the node (as internal management structure) is as small 92 | as possible, opening so all possibilities: from smallest memory footprint to highest comfort. 93 | 94 | 95 | 96 | * 19.09.2003 * 97 | * Times are changing * 98 | With the advent of .NET and C# things outlined in the previous paragraphs need rethinking. The software world is changing 99 | and so must Virtual Treeview if it wants to stay. Don't get me wrong, all the nice principles in the control have proved 100 | their usefulness and fitness for the purpose they were designed. However one could see that there are still flaws and 101 | probably will ever be, regardless of the actual design. Still, nothing is so good that it couldn't get better and the 102 | approach using records/structs instead of classes not only made it sometimes hard to get used to Virtual Treeview but it 103 | makes the control as a whole incompatible to the intrinsic values of Microsoft's new concept. And here lies the next 104 | natural step for it: Virtual Treeview must go .NET. So stay tuned for the things to come... 105 | 106 | Summary 107 | Interested in the story of Virtual Treeview? Well, here is a part of it. 108 | -------------------------------------------------------------------------------- /Help/Source/Include/QA.dtx: -------------------------------------------------------------------------------- 1 | @@QA.htm 2 | <TITLE Questions and Answers> 3 | 4 | Got some basic questions and need an answer - look here: 5 | 6 | <B> 7 | 8 | Q: How to initially fill the tree? 9 | 10 | A:</B> The only information VT needs at startup is the number of root nodes. All other information is queried from the 11 | application when they are needed (text, child count etc.). Hence all to do is to set property RootNodeCount to the number 12 | \of nodes required. 13 | 14 | <B> 15 | 16 | Q: When I change the text of a node in code then often the display is not updated. What must I do to make selection etc. 17 | working again? 18 | 19 | A:</B> The Virtual String Tree class keeps the caption's width for each node to allow quick hit tests. But since the 20 | captions are not stored in the tree they might get out of synch with the cached width. So if you change a node's text or 21 | \only its width somehow (e.g. making it bold in OnPaintText) then you have to tell the tree about this event. You can do 22 | this by calling InvalidateNode. For changes in an event, though, you should not call InvaldiateNode all the time but 23 | rather store the text attributes somewhere and force recalculation only once. 24 | 25 | <B> 26 | 27 | Q: Why doesn't the horizontal scroll bar stay constant while scrolling vertically and columns are unused? 28 | 29 | A:</B> VT holds (except a few important things for the overall structure) no information about a node to save memory and 30 | provide high speed access. This implies, though, that it only knows the width of the items currently displayed in the 31 | client area. Hence the horizontal scroll bar reflects only the width of the largest node currently in view. When columns 32 | are used then the width is determined by the overall width of the header. 33 | 34 | <B> 35 | 36 | Q: Why is the horizontal scroll bar not updated when scrolling vertically using the scroll thumb? 37 | 38 | A:</B> To avoid unnecessary flickering and to keep high speed response the horizontal scroll bar is updated after the 39 | scroll thumb has been released. You cannot scroll horizontally while scrolling vertically, so the horizontal scroll bar 40 | doesn't need to be updated while thumb tracking. When columns are used then the width is constant anyway and the 41 | horizontal scrollbar does not need an update. 42 | 43 | <B> 44 | 45 | Q: How to assign and access my own data to/on a node? 46 | 47 | A:</B> VT does not hide any information about the internal structure of the node from the application. And the best place 48 | to hold data specific to a node is the node itself. So there's a user definable area at the end of each node record which 49 | can be used to store application data. Usually you already have all data in your own structure (database, file etc.) so 50 | you need only to supply an identifier or a pointer (link) into your own structure. This prevents your application from 51 | doubling the data just for display which in turn can save a remarkable amount of memory. As the space requirements may 52 | vary from application to application the amount of user data space can be globally adjusted by the property NodeDataSize. 53 | In order to avoid ugly pointer math there's a function GetNodeData which returns a pointer which directly corresponds to 54 | the user data area (it points to the first byte in that area). I strongly recommend to use GetNodeData only (instead 55 | directly accessing a node's data area) because specific tree classes may additionally allocate data in the user data area 56 | and these parts needs to be taken into account. Assign the returned pointer to your own variable of the correct type (or 57 | just cast the pointer) and access your own data as usual. <B>Note:</B> Setting NodeDataSize will clear the entire tree 58 | and build it from scratch using this new size as all node records have to be reallocated. 59 | 60 | <B>Q: Do I need to check if a node's data is successfully allocated? 61 | 62 | A:</B> No, user data is allocated with the node (actually it is part of a node) so the memory allocation function takes 63 | care of initialization. 64 | 65 | <B> 66 | 67 | Q: How to get the currently focused node and the target node during a drag'n drop operation? 68 | 69 | A:</B> Just query property FocusedNode and DropTargetNode, respectively. 70 | 71 | <B> 72 | 73 | Q: When to free my own node specific data? 74 | 75 | A:</B> Use OnFreeNode as central routine to release/disconnect all your data (just like as you should use OnNodeInit to 76 | allocate/attach your data to the node). 77 | 78 | <B> 79 | 80 | Q: How can I know which node am I working on? 81 | 82 | A:</B> You might want to access the currently FocusedNode to add child nodes to etc. or you might want to use the drop 83 | target to act on during a drag'n drop operation etc. But usually you are working on the selection. You have two 84 | \opportunities to get a list of currently selected nodes. One is the GetFirstSelected/GetNextSelected pair which is 85 | really fast but returns the nodes precisely as they are in the internal selection array (which is ordered by memory 86 | locations, not logically). Or you can use GetSortedSelection which fills a dynamic array with node references in logical 87 | (structural) order. 88 | 89 | <B> 90 | 91 | Q: Is user data saved while doing drag'n drop or saving/restoring nodes? 92 | 93 | A:</B> This question implies another question, which I want to answer first: Yes, the same mechanism to save and load 94 | nodes is used for drag'n drop as for streaming to/from a file. Because of potentially large node data and/or many nodes 95 | the user data is not saved by default with a node. There are the OnSaveNode and OnLoadNode events which provide the 96 | application with a stream to store its node data in. 97 | 98 | <B> 99 | 100 | Q: Where should I update my external resources (like a database) involved by any node manipulation? 101 | 102 | A:</B> There are several events which could be used. First there is the set of edit events (OnEditCancelled, OnEditing, 103 | TBaseVirtualTree) which indicate the cancellation, start and successful finish of an edit event, respectively. These 104 | events are used to generally indicate editing of a node. Especially for the node's text in a TVirtualStringTree another 105 | event might ease your life. It's the OnNewText event. This is a good place to set a record's description/caption in a 106 | database etc. 107 | 108 | When it comes to structure changes then usually much more work is involved to keep external data in sync. For general 109 | notifications of such a change you might want to use OnStructureChange. This event might often be enough, in particular 110 | when also OnInitNode, OnInitChildren and OnFreeNode are considered. But for cut, copy and paste as well as drag'n drop 111 | even more care must be taken, since a node might move within the tree what then involves a move of a database record or a 112 | file etc. For this kind of action the event pairs OnNodeCopying/OnNodeCopied and OnNodeMoving/TBaseVirtualTree have been 113 | introduced. As with all those pairs you can reject copying or moving a node. 114 | 115 | <B>Note:</B> These events do only appear for the top node which represents a sub tree! For example if the user drags the 116 | second and the third top level node of a tree to a Word document then you'll get only two events, one for each selected 117 | node, but not for any child node even if they are selected too. You can still walk through the child nodes if you need to 118 | by using e.g. IterateSubTree, but usually a tree represents a hierarchical structure which is recursively defined which 119 | avoids the need to update each and every of probably many child nodes. 120 | -------------------------------------------------------------------------------- /Help/Source/Include/TreeImage.dtx: -------------------------------------------------------------------------------- 1 | @@TreeImage.htm 2 | <TITLE Tree image and tree window> 3 | 4 | Some methods in Virtual Treeview work with an internal tree image, e.g. painting or hit determination. This tree image 5 | does not really exist but is rather an imagination of the entire tree drawn to an infinitely sized sheet. In this picture 6 | the tree is always drawn at position (0, 0) and advances to positive horizontal and vertical values which reach out to 7 | the right and down, respectively. This also means that coordinates given in this fictional image are always positive. 8 | 9 | 10 | 11 | A display function like the WM_PAINT handler can now take a rectangle of this full image (in PaintTree this is called the 12 | <U>window</U>) and let it draw to any location in a target canvas. This allows to draw a part of the entire image even if 13 | the tree window is scrolled or needs otherwise to be moved (e.g. when dragging or printing). In order to get the full 14 | dimension of the tree image call GetTreeRect, which returns a rectangle always starting at (0, 0) and extending at least 15 | to client area size but usually much further (determined by the private variables FRangeX and FRangeY which also 16 | determine the scroll bar values). 17 | 18 | 19 | 20 | In order to maintain the visual portion of the tree image two offset values are maintained which specify the horizontal 21 | and vertical distance relative to the client area of the tree control. These offsets (OffsetX, OffsetY and OffsetXY) are 22 | therefore negative. This means 0 means no offset at all and -100 means the tree is scrolled by 100 pixels. Values \> 0 23 | are always made to 0. 24 | 25 | 26 | 27 | How does this now fit together when you want, say, to print a part of the tree to a memory or printer canvas? Have a look 28 | at the image below: 29 | 30 | <IMAGE TreeWindow> 31 | 32 | On the left pane you can see a typical tree view of which only a specific part is visible. This situation is visualized 33 | by the non-shaded rectangular region. The right pane shows the reproduction of the visible part to different locations. 34 | The entire tree image size corresponds to the internal FRangeX and FRangeY variables of the tree view. When drawing a 35 | part of the window the method PaintTree needs to know the size and position of the part to draw. This is given by a TRect 36 | structure passed in the <B>Window</B> parameter. For normal screen display this rectangle structure consists of the 37 | current scroll offsets (properties OffsetX and OffsetY or OffsetXY for both together given as TPoint) and the size of the 38 | client area of the tree control. This rectangle is usually also intersected with the current clipping region to avoid 39 | painting parts of the tree which are not invalid. 40 | 41 | 42 | 43 | The place where the image is to be painted is given in the parameter <B>Target</B>. This point specifies the physical 44 | location in the target canvas where to draw the content of the region specified by <B>Window</B>. Note that these 45 | coordinates are usually (but wrongly) considered as being physical pixels. This might be true for screen or bitmap output 46 | but is not for the printer where a single pixel would be much too small. Hence another term is used here: logical 47 | coordinates. The actual size of one unit of these coordinates can either be a single pixel but also a millimeter, inch or 48 | even some other odd size. The interpretation is determined by the mapping mode of the target canvas (device context, DC) 49 | and its window and viewport extents. For more information about mapping modes see the online help or MSDN under <I>SetMapMode</I> 50 | and for DC extents under <I>SetWindowExtEx</I> as well as <I>SetViewportExtEx</I>. With the help of mapping modes and 51 | window/viewport extents you can greatly customize the outcome of PaintTree. These APIs are usually also used to provide a 52 | print preview. 53 | 54 | Summary 55 | If you are one of those developers who want to create tree descendants, which perhaps involve visual changes in Virtual 56 | Treeview then you need to know how the control paints itself (as outlined in <LINK PaintCycles.htm, Paint cycles and stages>). 57 | What happens with the resulting image and how it can be used for certain tasks like printing? Some answers are in this 58 | topic. 59 | -------------------------------------------------------------------------------- /Help/Source/Include/specialtopics.dtx: -------------------------------------------------------------------------------- 1 | The topics defined in this file are special topics. 2 | Special topics are used by the filters for certain 3 | defined parts of the output. 4 | A special topic should contain of one standard 5 | section of text (usually the predefined "Description" 6 | section. The welcome topic should have a description 7 | (standard section type) and a summary (summary section 8 | type section). 9 | 10 | This file can be used as a template for new files or 11 | directly. We recommend to make a copy of that file if 12 | you want to use it in your project. 13 | 14 | Special Topic Used For 15 | -------------------- ----------------------------------- 16 | !!INDEX a brief description which appears 17 | on the index of an index page 18 | (if generated by the filter) 19 | !!SYMREF a brief description which appears 20 | on the symbol reference page (if 21 | generated by the filter) 22 | !!CONTENTS a brief description which appears 23 | on the content page (if 24 | generated by the filter) 25 | !!COPYRIGHT a brief copyright notice which 26 | appears on the bottom if each 27 | generated page or file. 28 | !!ABOUT an abstract description of the 29 | generated documentation and/or the 30 | author/company of the documentation 31 | !!WELCOME The <Title> is used as the primary 32 | title of the documentation. 33 | The summary (if available) is used 34 | as a sub-title of the documentation 35 | The description (if available) is 36 | used for describing the content 37 | of the documentation. 38 | !!GLOSSARY a brief introduction to the generated 39 | glossary topic. 40 | 41 | !!CLASSES 42 | !!FUNCTIONS 43 | !!RECORDS 44 | !!TYPES 45 | !!VARIABLES 46 | !!CONSTANTS 47 | !!MACROS 48 | !!FILES 49 | 50 | 51 | @@$Main 52 | <TITLE %PROJECTTITLE%> 53 | 54 | @@$Inner fundamentals 55 | <TITLE Inner fundamentals> 56 | <AUTOLINK ON> 57 | 58 | If you would like to understand certain things going on in Virtual Treeview you should read on in this chapter. Herein I 59 | will explain what was my motiviation to create Virtual Treeview, why I based everything on the design you see now, how 60 | painting in the tree is organized and can be customized, what are the key navigation commands in the control and many 61 | more things. Particularly if you want to derive your own descendant from Virtual Treeview you should read everything 62 | here. 63 | 64 | @@!!INDEX 65 | <TITLE Index> 66 | 67 | These are all topics and symbols available in this documentation. 68 | 69 | @@!!SYMREF 70 | <TITLE Symbol Reference> 71 | 72 | These are all symbols available in this documentation. 73 | 74 | @@!!CONTENTS 75 | <TITLE Contents> 76 | 77 | This is the table of contents of this documentation. 78 | 79 | @@!!GLOSSARY 80 | <TITLE %PROJECTTITLE% Glossary> 81 | <TITLEIMG Checker150> 82 | 83 | This is the %PROJECTTITLE% glossary. It contains brief descriptions of important terms and topics. 84 | 85 | @@!!CLASSES 86 | <TITLE Classes> 87 | 88 | These are all classes that are contained in this documentation. 89 | 90 | @@!!FUNCTIONS 91 | <TITLE Functions> 92 | 93 | These are all functions that are contained in this documentation. 94 | 95 | @@!!RECORDS 96 | <TITLE Structs and Records> 97 | 98 | These are all structs and records that are contained in this documentation. 99 | 100 | @@!!TYPES 101 | <TITLE Types> 102 | 103 | These are all types that are contained in this documentation. 104 | 105 | @@!!VARIABLES 106 | <TITLE Variables> 107 | 108 | These are all variables that are contained in this documentation. 109 | 110 | @@!!CONSTANTS 111 | <TITLE Constants> 112 | 113 | These are all constants that are contained in this documentation. 114 | 115 | @@!!COPYRIGHT 116 | <title Copyright> 117 | 118 | (c) 1999-2012 Mike Lischke, <extlink http://www.soft-gems.net>Soft Gems software solutions</extlink>, All rights 119 | reserved. 120 | -------------------------------------------------------------------------------- /Help/Source/VirtualTreeview.ldb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TurboPack/VirtualTreeView/a4b671404cd0794c77a8edd312d811d48f37dd20/Help/Source/VirtualTreeview.ldb -------------------------------------------------------------------------------- /Help/VirtualTreeview.chm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TurboPack/VirtualTreeView/a4b671404cd0794c77a8edd312d811d48f37dd20/Help/VirtualTreeview.chm -------------------------------------------------------------------------------- /Packages/11AndAbove/CBuilder/VirtualTreesCBuilder.groupproj: -------------------------------------------------------------------------------- 1 | <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 2 | <PropertyGroup> 3 | <ProjectGuid>{90943296-FDFA-4C80-A99D-237F570C4F54}</ProjectGuid> 4 | </PropertyGroup> 5 | <ItemGroup> 6 | <Projects Include="VirtualTreesCR.cbproj"> 7 | <Dependencies/> 8 | </Projects> 9 | <Projects Include="VirtualTreesCD.cbproj"> 10 | <Dependencies/> 11 | </Projects> 12 | </ItemGroup> 13 | <ProjectExtensions> 14 | <Borland.Personality>Default.Personality.12</Borland.Personality> 15 | <Borland.ProjectType/> 16 | <BorlandProject> 17 | <Default.Personality/> 18 | </BorlandProject> 19 | </ProjectExtensions> 20 | <Target Name="VirtualTreesCR"> 21 | <MSBuild Projects="VirtualTreesCR.cbproj"/> 22 | </Target> 23 | <Target Name="VirtualTreesCR:Clean"> 24 | <MSBuild Projects="VirtualTreesCR.cbproj" Targets="Clean"/> 25 | </Target> 26 | <Target Name="VirtualTreesCR:Make"> 27 | <MSBuild Projects="VirtualTreesCR.cbproj" Targets="Make"/> 28 | </Target> 29 | <Target Name="VirtualTreesCD"> 30 | <MSBuild Projects="VirtualTreesCD.cbproj"/> 31 | </Target> 32 | <Target Name="VirtualTreesCD:Clean"> 33 | <MSBuild Projects="VirtualTreesCD.cbproj" Targets="Clean"/> 34 | </Target> 35 | <Target Name="VirtualTreesCD:Make"> 36 | <MSBuild Projects="VirtualTreesCD.cbproj" Targets="Make"/> 37 | </Target> 38 | <Target Name="Build"> 39 | <CallTarget Targets="VirtualTreesCR;VirtualTreesCD"/> 40 | </Target> 41 | <Target Name="Clean"> 42 | <CallTarget Targets="VirtualTreesCR:Clean;VirtualTreesCD:Clean"/> 43 | </Target> 44 | <Target Name="Make"> 45 | <CallTarget Targets="VirtualTreesCR:Make;VirtualTreesCD:Make"/> 46 | </Target> 47 | <Import Project="$(BDS)\Bin\CodeGear.Group.Targets" Condition="Exists('$(BDS)\Bin\CodeGear.Group.Targets')"/> 48 | </Project> 49 | -------------------------------------------------------------------------------- /Packages/11AndAbove/CBuilder/VirtualTreesCD.cpp: -------------------------------------------------------------------------------- 1 | //--------------------------------------------------------------------------- 2 | 3 | #include <basepch.h> 4 | #pragma hdrstop 5 | #pragma package(smart_init) 6 | //--------------------------------------------------------------------------- 7 | 8 | // Package source. 9 | //--------------------------------------------------------------------------- 10 | 11 | 12 | #pragma argsused 13 | int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void*) 14 | { 15 | return 1; 16 | } 17 | //--------------------------------------------------------------------------- 18 | -------------------------------------------------------------------------------- /Packages/11AndAbove/CBuilder/VirtualTreesCR.cpp: -------------------------------------------------------------------------------- 1 | //--------------------------------------------------------------------------- 2 | 3 | #include <basepch.h> 4 | #pragma hdrstop 5 | //--------------------------------------------------------------------------- 6 | 7 | // Package source. 8 | //--------------------------------------------------------------------------- 9 | 10 | 11 | #pragma argsused 12 | extern "C" int _libmain(unsigned long reason) 13 | { 14 | return 1; 15 | } 16 | //--------------------------------------------------------------------------- 17 | -------------------------------------------------------------------------------- /Packages/11AndAbove/Delphi/VirtualTreesDD.dpk: -------------------------------------------------------------------------------- 1 | package VirtualTreesDD; 2 | 3 | {$R *.res} 4 | {$R '..\..\..\Design\VirtualTrees.dcr'} 5 | {$IFDEF IMPLICITBUILDING This IFDEF should not be used by users} 6 | {$ALIGN 8} 7 | {$ASSERTIONS ON} 8 | {$BOOLEVAL OFF} 9 | {$DEBUGINFO OFF} 10 | {$EXTENDEDSYNTAX ON} 11 | {$IMPORTEDDATA ON} 12 | {$IOCHECKS ON} 13 | {$LOCALSYMBOLS OFF} 14 | {$LONGSTRINGS ON} 15 | {$OPENSTRINGS ON} 16 | {$OPTIMIZATION ON} 17 | {$OVERFLOWCHECKS OFF} 18 | {$RANGECHECKS OFF} 19 | {$REFERENCEINFO OFF} 20 | {$SAFEDIVIDE OFF} 21 | {$STACKFRAMES OFF} 22 | {$TYPEDADDRESS OFF} 23 | {$VARSTRINGCHECKS ON} 24 | {$WRITEABLECONST OFF} 25 | {$MINENUMSIZE 1} 26 | {$IMAGEBASE $400000} 27 | {$DEFINE RELEASE} 28 | {$ENDIF IMPLICITBUILDING} 29 | {$DESCRIPTION 'TurboPack VirtualTree Delphi designtime package'} 30 | {$LIBSUFFIX AUTO} 31 | {$DESIGNONLY} 32 | {$IMPLICITBUILD OFF} 33 | 34 | requires 35 | DesignIDE, 36 | VirtualTreesDR; 37 | 38 | contains 39 | VirtualTreesReg in '..\..\..\Design\VirtualTreesReg.pas'; 40 | 41 | end. 42 | -------------------------------------------------------------------------------- /Packages/11AndAbove/Delphi/VirtualTreesDD.dproj: -------------------------------------------------------------------------------- 1 | <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 2 | <PropertyGroup> 3 | <Base>True</Base> 4 | <AppType>Package</AppType> 5 | <Config Condition="'$(Config)'==''">Release</Config> 6 | <DCC_DCCCompiler>DCC32</DCC_DCCCompiler> 7 | <FrameworkType>VCL</FrameworkType> 8 | <MainSource>VirtualTreesDD.dpk</MainSource> 9 | <Platform Condition="'$(Platform)'==''">Win32</Platform> 10 | <ProjectGuid>{A34BA07B-19B6-4C21-9DEE-65FCA52D00AB}</ProjectGuid> 11 | <ProjectName Condition="'$(ProjectName)'==''">VirtualTreesDD</ProjectName> 12 | <ProjectVersion>20.3</ProjectVersion> 13 | <TargetedPlatforms>3</TargetedPlatforms> 14 | </PropertyGroup> 15 | <PropertyGroup Condition="'$(Config)'=='Base' or '$(Base)'!=''"> 16 | <Base>true</Base> 17 | </PropertyGroup> 18 | <PropertyGroup Condition="('$(Platform)'=='Win32' and '$(Base)'=='true') or '$(Base_Win32)'!=''"> 19 | <Base_Win32>true</Base_Win32> 20 | <CfgParent>Base</CfgParent> 21 | <Base>true</Base> 22 | </PropertyGroup> 23 | <PropertyGroup Condition="('$(Platform)'=='Win64' and '$(Base)'=='true') or '$(Base_Win64)'!=''"> 24 | <Base_Win64>true</Base_Win64> 25 | <CfgParent>Base</CfgParent> 26 | <Base>true</Base> 27 | </PropertyGroup> 28 | <PropertyGroup Condition="'$(Config)'=='Release' or '$(Cfg_1)'!=''"> 29 | <Cfg_1>true</Cfg_1> 30 | <CfgParent>Base</CfgParent> 31 | <Base>true</Base> 32 | </PropertyGroup> 33 | <PropertyGroup Condition="'$(Config)'=='Debug' or '$(Cfg_2)'!=''"> 34 | <Cfg_2>true</Cfg_2> 35 | <CfgParent>Base</CfgParent> 36 | <Base>true</Base> 37 | </PropertyGroup> 38 | <PropertyGroup Condition="'$(Base)'!=''"> 39 | <SanitizedProjectName>VirtualTreesDD</SanitizedProjectName> 40 | <DCC_BpiOutput>..\cpp\$(Platform)\$(Config)</DCC_BpiOutput> 41 | <DCC_CBuilderOutput>All</DCC_CBuilderOutput> 42 | <DCC_DcuOutput>.\$(Platform)\$(Config)</DCC_DcuOutput> 43 | <DCC_Description>TurboPack VirtualTree Delphi designtime package</DCC_Description> 44 | <DCC_HppOutput>..\cpp\$(Platform)\$(Config)</DCC_HppOutput> 45 | <DCC_ImageBase>00400000</DCC_ImageBase> 46 | <DCC_Namespace>System;Xml;Data;Datasnap;Web;Soap;Vcl;Vcl.Imaging;Vcl.Touch;Vcl.Samples;Vcl.Shell;$(DCC_Namespace)</DCC_Namespace> 47 | <DCC_ObjOutput>..\cpp\$(Platform)\$(Config)</DCC_ObjOutput> 48 | <DCC_OutputNeverBuildDcps>true</DCC_OutputNeverBuildDcps> 49 | <DCC_UnitSearchPath>..\..\..\Source;.\$(Platform)\$(Config);$(DCC_UnitSearchPath)</DCC_UnitSearchPath> 50 | <DesignOnlyPackage>true</DesignOnlyPackage> 51 | <DllSuffix>$(Auto)</DllSuffix> 52 | <GenDll>true</GenDll> 53 | <GenPackage>true</GenPackage> 54 | <SkipResGeneration>false</SkipResGeneration> 55 | <VerInfo_Keys>CompanyName=;FileDescription=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=;ProductVersion=1.0.0.0;Comments=</VerInfo_Keys> 56 | <VerInfo_Locale>1053</VerInfo_Locale> 57 | </PropertyGroup> 58 | <PropertyGroup Condition="'$(Base_Win32)'!=''"> 59 | <DCC_Namespace>Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace)</DCC_Namespace> 60 | <DCC_UsePackage>vcl;VirtualTreesD;VirtualTreesDR;$(DCC_UsePackage)</DCC_UsePackage> 61 | </PropertyGroup> 62 | <PropertyGroup Condition="'$(Base_Win64)'!=''"> 63 | <BT_BuildType>Debug</BT_BuildType> 64 | <DCC_Namespace>Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;$(DCC_Namespace)</DCC_Namespace> 65 | <VerInfo_IncludeVerInfo>true</VerInfo_IncludeVerInfo> 66 | <VerInfo_Keys>CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=</VerInfo_Keys> 67 | <VerInfo_Locale>1033</VerInfo_Locale> 68 | </PropertyGroup> 69 | <PropertyGroup Condition="'$(Cfg_1)'!=''"> 70 | <DCC_DebugInformation>0</DCC_DebugInformation> 71 | <DCC_Define>RELEASE;$(DCC_Define)</DCC_Define> 72 | <DCC_LocalDebugSymbols>false</DCC_LocalDebugSymbols> 73 | <DCC_SymbolReferenceInfo>0</DCC_SymbolReferenceInfo> 74 | </PropertyGroup> 75 | <PropertyGroup Condition="'$(Cfg_2)'!=''"> 76 | <DCC_Define>DEBUG;$(DCC_Define)</DCC_Define> 77 | <DCC_GenerateStackFrames>true</DCC_GenerateStackFrames> 78 | <DCC_Optimize>false</DCC_Optimize> 79 | </PropertyGroup> 80 | <ItemGroup> 81 | <DelphiCompile Include="$(MainSource)"> 82 | <MainSource>MainSource</MainSource> 83 | </DelphiCompile> 84 | <DCCReference Include="..\..\..\Design\VirtualTrees.dcr"/> 85 | <DCCReference Include="DesignIDE.dcp"/> 86 | <DCCReference Include="VirtualTreesDR.dcp"/> 87 | <DCCReference Include="..\..\..\Design\VirtualTreesReg.pas"/> 88 | <BuildConfiguration Include="Base"> 89 | <Key>Base</Key> 90 | </BuildConfiguration> 91 | <BuildConfiguration Include="Release"> 92 | <Key>Cfg_1</Key> 93 | <CfgParent>Base</CfgParent> 94 | </BuildConfiguration> 95 | <BuildConfiguration Include="Debug"> 96 | <Key>Cfg_2</Key> 97 | <CfgParent>Base</CfgParent> 98 | </BuildConfiguration> 99 | </ItemGroup> 100 | <ProjectExtensions> 101 | <Borland.Personality>Delphi.Personality.12</Borland.Personality> 102 | <Borland.ProjectType>Package</Borland.ProjectType> 103 | <BorlandProject> 104 | <Delphi.Personality> 105 | <Source> 106 | <Source Name="MainSource">VirtualTreesDD.dpk</Source> 107 | </Source> 108 | <Excluded_Packages/> 109 | <VersionInfo> 110 | <VersionInfo Name="IncludeVerInfo">True</VersionInfo> 111 | <VersionInfo Name="AutoIncBuild">False</VersionInfo> 112 | <VersionInfo Name="MajorVer">1</VersionInfo> 113 | <VersionInfo Name="MinorVer">0</VersionInfo> 114 | <VersionInfo Name="Release">0</VersionInfo> 115 | <VersionInfo Name="Build">0</VersionInfo> 116 | <VersionInfo Name="Debug">False</VersionInfo> 117 | <VersionInfo Name="PreRelease">False</VersionInfo> 118 | <VersionInfo Name="Special">False</VersionInfo> 119 | <VersionInfo Name="Private">False</VersionInfo> 120 | <VersionInfo Name="DLL">False</VersionInfo> 121 | <VersionInfo Name="Locale">1053</VersionInfo> 122 | <VersionInfo Name="CodePage">1252</VersionInfo> 123 | </VersionInfo> 124 | <VersionInfoKeys> 125 | <VersionInfoKeys Name="CompanyName"/> 126 | <VersionInfoKeys Name="FileDescription"/> 127 | <VersionInfoKeys Name="FileVersion">1.0.0.0</VersionInfoKeys> 128 | <VersionInfoKeys Name="InternalName"/> 129 | <VersionInfoKeys Name="LegalCopyright"/> 130 | <VersionInfoKeys Name="LegalTrademarks"/> 131 | <VersionInfoKeys Name="OriginalFilename"/> 132 | <VersionInfoKeys Name="ProductName"/> 133 | <VersionInfoKeys Name="ProductVersion">1.0.0.0</VersionInfoKeys> 134 | <VersionInfoKeys Name="Comments"/> 135 | </VersionInfoKeys> 136 | </Delphi.Personality> 137 | <Platforms> 138 | <Platform value="Android">False</Platform> 139 | <Platform value="Android64">False</Platform> 140 | <Platform value="Linux64">False</Platform> 141 | <Platform value="OSX64">False</Platform> 142 | <Platform value="OSXARM64">False</Platform> 143 | <Platform value="Win32">True</Platform> 144 | <Platform value="Win64">True</Platform> 145 | <Platform value="Win64x">False</Platform> 146 | <Platform value="iOSDevice64">False</Platform> 147 | <Platform value="iOSSimARM64">False</Platform> 148 | </Platforms> 149 | </BorlandProject> 150 | <ProjectFileVersion>12</ProjectFileVersion> 151 | </ProjectExtensions> 152 | <Import Project="$(BDS)\Bin\CodeGear.Delphi.Targets" Condition="Exists('$(BDS)\Bin\CodeGear.Delphi.Targets')"/> 153 | <Import Project="$(APPDATA)\Embarcadero\$(BDSAPPDATABASEDIR)\$(PRODUCTVERSION)\UserTools.proj" Condition="Exists('$(APPDATA)\Embarcadero\$(BDSAPPDATABASEDIR)\$(PRODUCTVERSION)\UserTools.proj')"/> 154 | <Import Project="$(MSBuildProjectName).deployproj" Condition="Exists('$(MSBuildProjectName).deployproj')"/> 155 | </Project> 156 | -------------------------------------------------------------------------------- /Packages/11AndAbove/Delphi/VirtualTreesDR.dpk: -------------------------------------------------------------------------------- 1 | package VirtualTreesDR; 2 | 3 | {$R *.res} 4 | {$IFDEF IMPLICITBUILDING This IFDEF should not be used by users} 5 | {$ALIGN 8} 6 | {$ASSERTIONS ON} 7 | {$BOOLEVAL OFF} 8 | {$DEBUGINFO OFF} 9 | {$EXTENDEDSYNTAX ON} 10 | {$IMPORTEDDATA ON} 11 | {$IOCHECKS ON} 12 | {$LOCALSYMBOLS OFF} 13 | {$LONGSTRINGS ON} 14 | {$OPENSTRINGS ON} 15 | {$OPTIMIZATION ON} 16 | {$OVERFLOWCHECKS OFF} 17 | {$RANGECHECKS OFF} 18 | {$REFERENCEINFO OFF} 19 | {$SAFEDIVIDE OFF} 20 | {$STACKFRAMES OFF} 21 | {$TYPEDADDRESS OFF} 22 | {$VARSTRINGCHECKS ON} 23 | {$WRITEABLECONST OFF} 24 | {$MINENUMSIZE 1} 25 | {$IMAGEBASE $400000} 26 | {$DEFINE RELEASE} 27 | {$ENDIF IMPLICITBUILDING} 28 | {$DESCRIPTION 'TurboPack VirtualTree Delphi runtime package'} 29 | {$LIBSUFFIX AUTO} 30 | {$RUNONLY} 31 | {$IMPLICITBUILD OFF} 32 | 33 | requires 34 | vcl, 35 | vclx; 36 | 37 | contains 38 | VirtualTrees in '..\..\..\Source\VirtualTrees.pas', 39 | VirtualTrees.Accessibility in '..\..\..\Source\VirtualTrees.Accessibility.pas', 40 | VirtualTrees.AccessibilityFactory in '..\..\..\Source\VirtualTrees.AccessibilityFactory.pas', 41 | VirtualTrees.Actions in '..\..\..\Source\VirtualTrees.Actions.pas', 42 | VirtualTrees.AncestorVCL in '..\..\..\Source\VirtualTrees.AncestorVCL.pas', 43 | VirtualTrees.BaseAncestorVCL in '..\..\..\Source\VirtualTrees.BaseAncestorVCL.pas', 44 | VirtualTrees.BaseTree in '..\..\..\Source\VirtualTrees.BaseTree.pas', 45 | VirtualTrees.Classes in '..\..\..\Source\VirtualTrees.Classes.pas', 46 | VirtualTrees.ClipBoard in '..\..\..\Source\VirtualTrees.ClipBoard.pas', 47 | VirtualTrees.Colors in '..\..\..\Source\VirtualTrees.Colors.pas', 48 | VirtualTrees.DataObject in '..\..\..\Source\VirtualTrees.DataObject.pas', 49 | VirtualTrees.DragImage in '..\..\..\Source\VirtualTrees.DragImage.pas', 50 | VirtualTrees.DragnDrop in '..\..\..\Source\VirtualTrees.DragnDrop.pas', 51 | VirtualTrees.DrawTree in '..\..\..\Source\VirtualTrees.DrawTree.pas', 52 | VirtualTrees.EditLink in '..\..\..\Source\VirtualTrees.EditLink.pas', 53 | VirtualTrees.Export in '..\..\..\Source\VirtualTrees.Export.pas', 54 | VirtualTrees.Header in '..\..\..\Source\VirtualTrees.Header.pas', 55 | VirtualTrees.HeaderPopup in '..\..\..\Source\VirtualTrees.HeaderPopup.pas', 56 | VirtualTrees.StyleHooks in '..\..\..\Source\VirtualTrees.StyleHooks.pas', 57 | VirtualTrees.Types in '..\..\..\Source\VirtualTrees.Types.pas', 58 | VirtualTrees.Utils in '..\..\..\Source\VirtualTrees.Utils.pas', 59 | VirtualTrees.WorkerThread in '..\..\..\Source\VirtualTrees.WorkerThread.pas'; 60 | 61 | end. 62 | -------------------------------------------------------------------------------- /Packages/11AndAbove/Delphi/VirtualTreesDelphi.groupproj: -------------------------------------------------------------------------------- 1 | <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 2 | <PropertyGroup> 3 | <ProjectGuid>{CC6A9541-DD5C-4BCD-8914-016D8D2EAB3B}</ProjectGuid> 4 | </PropertyGroup> 5 | <ItemGroup> 6 | <Projects Include="VirtualTreesDR.dproj"> 7 | <Dependencies/> 8 | </Projects> 9 | <Projects Include="VirtualTreesDD.dproj"> 10 | <Dependencies>VirtualTreesDR.dproj</Dependencies> 11 | </Projects> 12 | </ItemGroup> 13 | <ProjectExtensions> 14 | <Borland.Personality>Default.Personality.12</Borland.Personality> 15 | <Borland.ProjectType/> 16 | <BorlandProject> 17 | <Default.Personality/> 18 | </BorlandProject> 19 | </ProjectExtensions> 20 | <Target Name="VirtualTreesDR"> 21 | <MSBuild Projects="VirtualTreesDR.dproj"/> 22 | </Target> 23 | <Target Name="VirtualTreesDR:Clean"> 24 | <MSBuild Projects="VirtualTreesDR.dproj" Targets="Clean"/> 25 | </Target> 26 | <Target Name="VirtualTreesDR:Make"> 27 | <MSBuild Projects="VirtualTreesDR.dproj" Targets="Make"/> 28 | </Target> 29 | <Target Name="VirtualTreesDD" DependsOnTargets="VirtualTreesDR"> 30 | <MSBuild Projects="VirtualTreesDD.dproj"/> 31 | </Target> 32 | <Target Name="VirtualTreesDD:Clean" DependsOnTargets="VirtualTreesDR:Clean"> 33 | <MSBuild Projects="VirtualTreesDD.dproj" Targets="Clean"/> 34 | </Target> 35 | <Target Name="VirtualTreesDD:Make" DependsOnTargets="VirtualTreesDR:Make"> 36 | <MSBuild Projects="VirtualTreesDD.dproj" Targets="Make"/> 37 | </Target> 38 | <Target Name="Build"> 39 | <CallTarget Targets="VirtualTreesDR;VirtualTreesDD"/> 40 | </Target> 41 | <Target Name="Clean"> 42 | <CallTarget Targets="VirtualTreesDR:Clean;VirtualTreesDD:Clean"/> 43 | </Target> 44 | <Target Name="Make"> 45 | <CallTarget Targets="VirtualTreesDR:Make;VirtualTreesDD:Make"/> 46 | </Target> 47 | <Import Project="$(BDS)\Bin\CodeGear.Group.Targets" Condition="Exists('$(BDS)\Bin\CodeGear.Group.Targets')"/> 48 | </Project> 49 | -------------------------------------------------------------------------------- /Packages/Berlin/CBuilder/VirtualTreesCBuilder.groupproj: -------------------------------------------------------------------------------- 1 | <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 2 | <PropertyGroup> 3 | <ProjectGuid>{90943296-FDFA-4C80-A99D-237F570C4F54}</ProjectGuid> 4 | </PropertyGroup> 5 | <ItemGroup> 6 | <Projects Include="VirtualTreesCR.cbproj"> 7 | <Dependencies/> 8 | </Projects> 9 | <Projects Include="VirtualTreesCD.cbproj"> 10 | <Dependencies/> 11 | </Projects> 12 | </ItemGroup> 13 | <ProjectExtensions> 14 | <Borland.Personality>Default.Personality.12</Borland.Personality> 15 | <Borland.ProjectType/> 16 | <BorlandProject> 17 | <Default.Personality/> 18 | </BorlandProject> 19 | </ProjectExtensions> 20 | <Target Name="VirtualTreesCR"> 21 | <MSBuild Projects="VirtualTreesCR.cbproj"/> 22 | </Target> 23 | <Target Name="VirtualTreesCR:Clean"> 24 | <MSBuild Projects="VirtualTreesCR.cbproj" Targets="Clean"/> 25 | </Target> 26 | <Target Name="VirtualTreesCR:Make"> 27 | <MSBuild Projects="VirtualTreesCR.cbproj" Targets="Make"/> 28 | </Target> 29 | <Target Name="VirtualTreesCD"> 30 | <MSBuild Projects="VirtualTreesCD.cbproj"/> 31 | </Target> 32 | <Target Name="VirtualTreesCD:Clean"> 33 | <MSBuild Projects="VirtualTreesCD.cbproj" Targets="Clean"/> 34 | </Target> 35 | <Target Name="VirtualTreesCD:Make"> 36 | <MSBuild Projects="VirtualTreesCD.cbproj" Targets="Make"/> 37 | </Target> 38 | <Target Name="Build"> 39 | <CallTarget Targets="VirtualTreesCR;VirtualTreesCD"/> 40 | </Target> 41 | <Target Name="Clean"> 42 | <CallTarget Targets="VirtualTreesCR:Clean;VirtualTreesCD:Clean"/> 43 | </Target> 44 | <Target Name="Make"> 45 | <CallTarget Targets="VirtualTreesCR:Make;VirtualTreesCD:Make"/> 46 | </Target> 47 | <Import Project="$(BDS)\Bin\CodeGear.Group.Targets" Condition="Exists('$(BDS)\Bin\CodeGear.Group.Targets')"/> 48 | </Project> 49 | -------------------------------------------------------------------------------- /Packages/Berlin/CBuilder/VirtualTreesCD.cpp: -------------------------------------------------------------------------------- 1 | //--------------------------------------------------------------------------- 2 | 3 | #include <basepch.h> 4 | #pragma hdrstop 5 | #pragma package(smart_init) 6 | //--------------------------------------------------------------------------- 7 | 8 | // Package source. 9 | //--------------------------------------------------------------------------- 10 | 11 | 12 | #pragma argsused 13 | int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void*) 14 | { 15 | return 1; 16 | } 17 | //--------------------------------------------------------------------------- 18 | -------------------------------------------------------------------------------- /Packages/Berlin/CBuilder/VirtualTreesCR.cpp: -------------------------------------------------------------------------------- 1 | //--------------------------------------------------------------------------- 2 | 3 | #include <basepch.h> 4 | #pragma hdrstop 5 | #pragma package(smart_init) 6 | //--------------------------------------------------------------------------- 7 | 8 | // Package source. 9 | //--------------------------------------------------------------------------- 10 | 11 | 12 | #pragma argsused 13 | int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void*) 14 | { 15 | return 1; 16 | } 17 | //--------------------------------------------------------------------------- 18 | -------------------------------------------------------------------------------- /Packages/Berlin/Delphi/VirtualTreesDD.dpk: -------------------------------------------------------------------------------- 1 | package VirtualTreesDD; 2 | 3 | {$R *.res} 4 | {$R '..\..\..\Design\VirtualTrees.dcr'} 5 | {$IFDEF IMPLICITBUILDING This IFDEF should not be used by users} 6 | {$ALIGN 8} 7 | {$ASSERTIONS ON} 8 | {$BOOLEVAL OFF} 9 | {$DEBUGINFO OFF} 10 | {$EXTENDEDSYNTAX ON} 11 | {$IMPORTEDDATA ON} 12 | {$IOCHECKS ON} 13 | {$LOCALSYMBOLS OFF} 14 | {$LONGSTRINGS ON} 15 | {$OPENSTRINGS ON} 16 | {$OPTIMIZATION ON} 17 | {$OVERFLOWCHECKS OFF} 18 | {$RANGECHECKS OFF} 19 | {$REFERENCEINFO OFF} 20 | {$SAFEDIVIDE OFF} 21 | {$STACKFRAMES OFF} 22 | {$TYPEDADDRESS OFF} 23 | {$VARSTRINGCHECKS ON} 24 | {$WRITEABLECONST OFF} 25 | {$MINENUMSIZE 1} 26 | {$IMAGEBASE $400000} 27 | {$DEFINE RELEASE} 28 | {$ENDIF IMPLICITBUILDING} 29 | {$DESCRIPTION 'TurboPack VirtualTree Delphi designtime package'} 30 | {$LIBSUFFIX '240'} 31 | {$DESIGNONLY} 32 | {$IMPLICITBUILD OFF} 33 | 34 | requires 35 | DesignIDE, 36 | VirtualTreesDR; 37 | 38 | contains 39 | VirtualTreesReg in '..\..\..\Design\VirtualTreesReg.pas'; 40 | 41 | end. 42 | -------------------------------------------------------------------------------- /Packages/Berlin/Delphi/VirtualTreesDR.dpk: -------------------------------------------------------------------------------- 1 | package VirtualTreesDR; 2 | 3 | {$R *.res} 4 | {$IFDEF IMPLICITBUILDING This IFDEF should not be used by users} 5 | {$ALIGN 8} 6 | {$ASSERTIONS ON} 7 | {$BOOLEVAL OFF} 8 | {$DEBUGINFO OFF} 9 | {$EXTENDEDSYNTAX ON} 10 | {$IMPORTEDDATA ON} 11 | {$IOCHECKS ON} 12 | {$LOCALSYMBOLS OFF} 13 | {$LONGSTRINGS ON} 14 | {$OPENSTRINGS ON} 15 | {$OPTIMIZATION ON} 16 | {$OVERFLOWCHECKS OFF} 17 | {$RANGECHECKS OFF} 18 | {$REFERENCEINFO OFF} 19 | {$SAFEDIVIDE OFF} 20 | {$STACKFRAMES OFF} 21 | {$TYPEDADDRESS OFF} 22 | {$VARSTRINGCHECKS ON} 23 | {$WRITEABLECONST OFF} 24 | {$MINENUMSIZE 1} 25 | {$IMAGEBASE $400000} 26 | {$DEFINE RELEASE} 27 | {$ENDIF IMPLICITBUILDING} 28 | {$DESCRIPTION 'TurboPack VirtualTree Delphi runtime package'} 29 | {$LIBSUFFIX '240'} 30 | {$RUNONLY} 31 | {$IMPLICITBUILD OFF} 32 | 33 | requires 34 | vcl, 35 | vclx; 36 | 37 | contains 38 | VirtualTrees in '..\..\..\Source\VirtualTrees.pas', 39 | VirtualTrees.Accessibility in '..\..\..\Source\VirtualTrees.Accessibility.pas', 40 | VirtualTrees.AccessibilityFactory in '..\..\..\Source\VirtualTrees.AccessibilityFactory.pas', 41 | VirtualTrees.Actions in '..\..\..\Source\VirtualTrees.Actions.pas', 42 | VirtualTrees.Classes in '..\..\..\Source\VirtualTrees.Classes.pas', 43 | VirtualTrees.ClipBoard in '..\..\..\Source\VirtualTrees.ClipBoard.pas', 44 | VirtualTrees.Export in '..\..\..\Source\VirtualTrees.Export.pas', 45 | VirtualTrees.HeaderPopup in '..\..\..\Source\VirtualTrees.HeaderPopup.pas', 46 | VirtualTrees.StyleHooks in '..\..\..\Source\VirtualTrees.StyleHooks.pas', 47 | VirtualTrees.Utils in '..\..\..\Source\VirtualTrees.Utils.pas', 48 | VirtualTrees.WorkerThread in '..\..\..\Source\VirtualTrees.WorkerThread.pas'; 49 | 50 | end. 51 | -------------------------------------------------------------------------------- /Packages/Berlin/Delphi/VirtualTreesDelphi.groupproj: -------------------------------------------------------------------------------- 1 | <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 2 | <PropertyGroup> 3 | <ProjectGuid>{CC6A9541-DD5C-4BCD-8914-016D8D2EAB3B}</ProjectGuid> 4 | </PropertyGroup> 5 | <ItemGroup> 6 | <Projects Include="VirtualTreesDR.dproj"> 7 | <Dependencies/> 8 | </Projects> 9 | <Projects Include="VirtualTreesDD.dproj"> 10 | <Dependencies>VirtualTreesDR.dproj</Dependencies> 11 | </Projects> 12 | </ItemGroup> 13 | <ProjectExtensions> 14 | <Borland.Personality>Default.Personality.12</Borland.Personality> 15 | <Borland.ProjectType/> 16 | <BorlandProject> 17 | <Default.Personality/> 18 | </BorlandProject> 19 | </ProjectExtensions> 20 | <Target Name="VirtualTreesDR"> 21 | <MSBuild Projects="VirtualTreesDR.dproj"/> 22 | </Target> 23 | <Target Name="VirtualTreesDR:Clean"> 24 | <MSBuild Projects="VirtualTreesDR.dproj" Targets="Clean"/> 25 | </Target> 26 | <Target Name="VirtualTreesDR:Make"> 27 | <MSBuild Projects="VirtualTreesDR.dproj" Targets="Make"/> 28 | </Target> 29 | <Target Name="VirtualTreesDD" DependsOnTargets="VirtualTreesDR"> 30 | <MSBuild Projects="VirtualTreesDD.dproj"/> 31 | </Target> 32 | <Target Name="VirtualTreesDD:Clean" DependsOnTargets="VirtualTreesDR:Clean"> 33 | <MSBuild Projects="VirtualTreesDD.dproj" Targets="Clean"/> 34 | </Target> 35 | <Target Name="VirtualTreesDD:Make" DependsOnTargets="VirtualTreesDR:Make"> 36 | <MSBuild Projects="VirtualTreesDD.dproj" Targets="Make"/> 37 | </Target> 38 | <Target Name="Build"> 39 | <CallTarget Targets="VirtualTreesDR;VirtualTreesDD"/> 40 | </Target> 41 | <Target Name="Clean"> 42 | <CallTarget Targets="VirtualTreesDR:Clean;VirtualTreesDD:Clean"/> 43 | </Target> 44 | <Target Name="Make"> 45 | <CallTarget Targets="VirtualTreesDR:Make;VirtualTreesDD:Make"/> 46 | </Target> 47 | <Import Project="$(BDS)\Bin\CodeGear.Group.Targets" Condition="Exists('$(BDS)\Bin\CodeGear.Group.Targets')"/> 48 | </Project> 49 | -------------------------------------------------------------------------------- /Packages/Rio/CBuilder/VirtualTreesCBuilder.groupproj: -------------------------------------------------------------------------------- 1 | <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 2 | <PropertyGroup> 3 | <ProjectGuid>{90943296-FDFA-4C80-A99D-237F570C4F54}</ProjectGuid> 4 | </PropertyGroup> 5 | <ItemGroup> 6 | <Projects Include="VirtualTreesCR.cbproj"> 7 | <Dependencies/> 8 | </Projects> 9 | <Projects Include="VirtualTreesCD.cbproj"> 10 | <Dependencies/> 11 | </Projects> 12 | </ItemGroup> 13 | <ProjectExtensions> 14 | <Borland.Personality>Default.Personality.12</Borland.Personality> 15 | <Borland.ProjectType/> 16 | <BorlandProject> 17 | <Default.Personality/> 18 | </BorlandProject> 19 | </ProjectExtensions> 20 | <Target Name="VirtualTreesCR"> 21 | <MSBuild Projects="VirtualTreesCR.cbproj"/> 22 | </Target> 23 | <Target Name="VirtualTreesCR:Clean"> 24 | <MSBuild Projects="VirtualTreesCR.cbproj" Targets="Clean"/> 25 | </Target> 26 | <Target Name="VirtualTreesCR:Make"> 27 | <MSBuild Projects="VirtualTreesCR.cbproj" Targets="Make"/> 28 | </Target> 29 | <Target Name="VirtualTreesCD"> 30 | <MSBuild Projects="VirtualTreesCD.cbproj"/> 31 | </Target> 32 | <Target Name="VirtualTreesCD:Clean"> 33 | <MSBuild Projects="VirtualTreesCD.cbproj" Targets="Clean"/> 34 | </Target> 35 | <Target Name="VirtualTreesCD:Make"> 36 | <MSBuild Projects="VirtualTreesCD.cbproj" Targets="Make"/> 37 | </Target> 38 | <Target Name="Build"> 39 | <CallTarget Targets="VirtualTreesCR;VirtualTreesCD"/> 40 | </Target> 41 | <Target Name="Clean"> 42 | <CallTarget Targets="VirtualTreesCR:Clean;VirtualTreesCD:Clean"/> 43 | </Target> 44 | <Target Name="Make"> 45 | <CallTarget Targets="VirtualTreesCR:Make;VirtualTreesCD:Make"/> 46 | </Target> 47 | <Import Project="$(BDS)\Bin\CodeGear.Group.Targets" Condition="Exists('$(BDS)\Bin\CodeGear.Group.Targets')"/> 48 | </Project> 49 | -------------------------------------------------------------------------------- /Packages/Rio/CBuilder/VirtualTreesCD.cpp: -------------------------------------------------------------------------------- 1 | //--------------------------------------------------------------------------- 2 | 3 | #include <basepch.h> 4 | #pragma hdrstop 5 | #pragma package(smart_init) 6 | //--------------------------------------------------------------------------- 7 | 8 | // Package source. 9 | //--------------------------------------------------------------------------- 10 | 11 | 12 | #pragma argsused 13 | int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void*) 14 | { 15 | return 1; 16 | } 17 | //--------------------------------------------------------------------------- 18 | -------------------------------------------------------------------------------- /Packages/Rio/CBuilder/VirtualTreesCR.cpp: -------------------------------------------------------------------------------- 1 | //--------------------------------------------------------------------------- 2 | 3 | #include <basepch.h> 4 | #pragma hdrstop 5 | #pragma package(smart_init) 6 | //--------------------------------------------------------------------------- 7 | 8 | // Package source. 9 | //--------------------------------------------------------------------------- 10 | 11 | 12 | #pragma argsused 13 | int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void*) 14 | { 15 | return 1; 16 | } 17 | //--------------------------------------------------------------------------- 18 | -------------------------------------------------------------------------------- /Packages/Rio/Delphi/VirtualTreesDD.dpk: -------------------------------------------------------------------------------- 1 | package VirtualTreesDD; 2 | 3 | {$R *.res} 4 | {$R '..\..\..\Design\VirtualTrees.dcr'} 5 | {$IFDEF IMPLICITBUILDING This IFDEF should not be used by users} 6 | {$ALIGN 8} 7 | {$ASSERTIONS ON} 8 | {$BOOLEVAL OFF} 9 | {$DEBUGINFO OFF} 10 | {$EXTENDEDSYNTAX ON} 11 | {$IMPORTEDDATA ON} 12 | {$IOCHECKS ON} 13 | {$LOCALSYMBOLS OFF} 14 | {$LONGSTRINGS ON} 15 | {$OPENSTRINGS ON} 16 | {$OPTIMIZATION ON} 17 | {$OVERFLOWCHECKS OFF} 18 | {$RANGECHECKS OFF} 19 | {$REFERENCEINFO OFF} 20 | {$SAFEDIVIDE OFF} 21 | {$STACKFRAMES OFF} 22 | {$TYPEDADDRESS OFF} 23 | {$VARSTRINGCHECKS ON} 24 | {$WRITEABLECONST OFF} 25 | {$MINENUMSIZE 1} 26 | {$IMAGEBASE $400000} 27 | {$DEFINE RELEASE} 28 | {$ENDIF IMPLICITBUILDING} 29 | {$DESCRIPTION 'TurboPack VirtualTree Delphi designtime package'} 30 | {$LIBSUFFIX '260'} 31 | {$DESIGNONLY} 32 | {$IMPLICITBUILD OFF} 33 | 34 | requires 35 | DesignIDE, 36 | VirtualTreesDR; 37 | 38 | contains 39 | VirtualTreesReg in '..\..\..\Design\VirtualTreesReg.pas'; 40 | 41 | end. -------------------------------------------------------------------------------- /Packages/Rio/Delphi/VirtualTreesDR.dpk: -------------------------------------------------------------------------------- 1 | package VirtualTreesDR; 2 | 3 | {$R *.res} 4 | {$IFDEF IMPLICITBUILDING This IFDEF should not be used by users} 5 | {$ALIGN 8} 6 | {$ASSERTIONS ON} 7 | {$BOOLEVAL OFF} 8 | {$DEBUGINFO OFF} 9 | {$EXTENDEDSYNTAX ON} 10 | {$IMPORTEDDATA ON} 11 | {$IOCHECKS ON} 12 | {$LOCALSYMBOLS OFF} 13 | {$LONGSTRINGS ON} 14 | {$OPENSTRINGS ON} 15 | {$OPTIMIZATION ON} 16 | {$OVERFLOWCHECKS OFF} 17 | {$RANGECHECKS OFF} 18 | {$REFERENCEINFO OFF} 19 | {$SAFEDIVIDE OFF} 20 | {$STACKFRAMES OFF} 21 | {$TYPEDADDRESS OFF} 22 | {$VARSTRINGCHECKS ON} 23 | {$WRITEABLECONST OFF} 24 | {$MINENUMSIZE 1} 25 | {$IMAGEBASE $400000} 26 | {$DEFINE RELEASE} 27 | {$ENDIF IMPLICITBUILDING} 28 | {$DESCRIPTION 'TurboPack VirtualTree Delphi runtime package'} 29 | {$LIBSUFFIX '260'} 30 | {$RUNONLY} 31 | {$IMPLICITBUILD OFF} 32 | 33 | requires 34 | vcl, 35 | vclx; 36 | 37 | contains 38 | VirtualTrees in '..\..\..\Source\VirtualTrees.pas', 39 | VirtualTrees.Accessibility in '..\..\..\Source\VirtualTrees.Accessibility.pas', 40 | VirtualTrees.AccessibilityFactory in '..\..\..\Source\VirtualTrees.AccessibilityFactory.pas', 41 | VirtualTrees.Actions in '..\..\..\Source\VirtualTrees.Actions.pas', 42 | VirtualTrees.Classes in '..\..\..\Source\VirtualTrees.Classes.pas', 43 | VirtualTrees.ClipBoard in '..\..\..\Source\VirtualTrees.ClipBoard.pas', 44 | VirtualTrees.Export in '..\..\..\Source\VirtualTrees.Export.pas', 45 | VirtualTrees.HeaderPopup in '..\..\..\Source\VirtualTrees.HeaderPopup.pas', 46 | VirtualTrees.StyleHooks in '..\..\..\Source\VirtualTrees.StyleHooks.pas', 47 | VirtualTrees.Utils in '..\..\..\Source\VirtualTrees.Utils.pas', 48 | VirtualTrees.WorkerThread in '..\..\..\Source\VirtualTrees.WorkerThread.pas'; 49 | 50 | end. -------------------------------------------------------------------------------- /Packages/Rio/Delphi/VirtualTreesDelphi.groupproj: -------------------------------------------------------------------------------- 1 | <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 2 | <PropertyGroup> 3 | <ProjectGuid>{CC6A9541-DD5C-4BCD-8914-016D8D2EAB3B}</ProjectGuid> 4 | </PropertyGroup> 5 | <ItemGroup> 6 | <Projects Include="VirtualTreesDR.dproj"> 7 | <Dependencies/> 8 | </Projects> 9 | <Projects Include="VirtualTreesDD.dproj"> 10 | <Dependencies>VirtualTreesDR.dproj</Dependencies> 11 | </Projects> 12 | <Projects Include="VirtualTreesDR.dproj"> 13 | <Dependencies/> 14 | </Projects> 15 | </ItemGroup> 16 | <ProjectExtensions> 17 | <Borland.Personality>Default.Personality.12</Borland.Personality> 18 | <Borland.ProjectType/> 19 | <BorlandProject> 20 | <Default.Personality/> 21 | </BorlandProject> 22 | </ProjectExtensions> 23 | <Target Name="VirtualTreesDR"> 24 | <MSBuild Projects="VirtualTreesDR.dproj"/> 25 | </Target> 26 | <Target Name="VirtualTreesDR:Clean"> 27 | <MSBuild Projects="VirtualTreesDR.dproj" Targets="Clean"/> 28 | </Target> 29 | <Target Name="VirtualTreesDR:Make"> 30 | <MSBuild Projects="VirtualTreesDR.dproj" Targets="Make"/> 31 | </Target> 32 | <Target Name="VirtualTreesDD" DependsOnTargets="VirtualTreesDR"> 33 | <MSBuild Projects="VirtualTreesDD.dproj"/> 34 | </Target> 35 | <Target Name="VirtualTreesDD:Clean" DependsOnTargets="VirtualTreesDR:Clean"> 36 | <MSBuild Projects="VirtualTreesDD.dproj" Targets="Clean"/> 37 | </Target> 38 | <Target Name="VirtualTreesDD:Make" DependsOnTargets="VirtualTreesDR:Make"> 39 | <MSBuild Projects="VirtualTreesDD.dproj" Targets="Make"/> 40 | </Target> 41 | <Target Name="Build"> 42 | <CallTarget Targets="VirtualTreesDR;VirtualTreesDD;VirtualTreesDR"/> 43 | </Target> 44 | <Target Name="Clean"> 45 | <CallTarget Targets="VirtualTreesDR:Clean;VirtualTreesDD:Clean;VirtualTreesDR:Clean"/> 46 | </Target> 47 | <Target Name="Make"> 48 | <CallTarget Targets="VirtualTreesDR:Make;VirtualTreesDD:Make;VirtualTreesDR:Make"/> 49 | </Target> 50 | <Import Project="$(BDS)\Bin\CodeGear.Group.Targets" Condition="Exists('$(BDS)\Bin\CodeGear.Group.Targets')"/> 51 | </Project> 52 | -------------------------------------------------------------------------------- /Packages/Sydney/CBuilder/VirtualTreesCBuilder.groupproj: -------------------------------------------------------------------------------- 1 | <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 2 | <PropertyGroup> 3 | <ProjectGuid>{90943296-FDFA-4C80-A99D-237F570C4F54}</ProjectGuid> 4 | </PropertyGroup> 5 | <ItemGroup> 6 | <Projects Include="VirtualTreesCR.cbproj"> 7 | <Dependencies/> 8 | </Projects> 9 | <Projects Include="VirtualTreesCD.cbproj"> 10 | <Dependencies/> 11 | </Projects> 12 | </ItemGroup> 13 | <ProjectExtensions> 14 | <Borland.Personality>Default.Personality.12</Borland.Personality> 15 | <Borland.ProjectType/> 16 | <BorlandProject> 17 | <Default.Personality/> 18 | </BorlandProject> 19 | </ProjectExtensions> 20 | <Target Name="VirtualTreesCR"> 21 | <MSBuild Projects="VirtualTreesCR.cbproj"/> 22 | </Target> 23 | <Target Name="VirtualTreesCR:Clean"> 24 | <MSBuild Projects="VirtualTreesCR.cbproj" Targets="Clean"/> 25 | </Target> 26 | <Target Name="VirtualTreesCR:Make"> 27 | <MSBuild Projects="VirtualTreesCR.cbproj" Targets="Make"/> 28 | </Target> 29 | <Target Name="VirtualTreesCD"> 30 | <MSBuild Projects="VirtualTreesCD.cbproj"/> 31 | </Target> 32 | <Target Name="VirtualTreesCD:Clean"> 33 | <MSBuild Projects="VirtualTreesCD.cbproj" Targets="Clean"/> 34 | </Target> 35 | <Target Name="VirtualTreesCD:Make"> 36 | <MSBuild Projects="VirtualTreesCD.cbproj" Targets="Make"/> 37 | </Target> 38 | <Target Name="Build"> 39 | <CallTarget Targets="VirtualTreesCR;VirtualTreesCD"/> 40 | </Target> 41 | <Target Name="Clean"> 42 | <CallTarget Targets="VirtualTreesCR:Clean;VirtualTreesCD:Clean"/> 43 | </Target> 44 | <Target Name="Make"> 45 | <CallTarget Targets="VirtualTreesCR:Make;VirtualTreesCD:Make"/> 46 | </Target> 47 | <Import Project="$(BDS)\Bin\CodeGear.Group.Targets" Condition="Exists('$(BDS)\Bin\CodeGear.Group.Targets')"/> 48 | </Project> 49 | -------------------------------------------------------------------------------- /Packages/Sydney/CBuilder/VirtualTreesCD.cpp: -------------------------------------------------------------------------------- 1 | //--------------------------------------------------------------------------- 2 | 3 | #include <basepch.h> 4 | #pragma hdrstop 5 | #pragma package(smart_init) 6 | //--------------------------------------------------------------------------- 7 | 8 | // Package source. 9 | //--------------------------------------------------------------------------- 10 | 11 | 12 | #pragma argsused 13 | int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void*) 14 | { 15 | return 1; 16 | } 17 | //--------------------------------------------------------------------------- 18 | -------------------------------------------------------------------------------- /Packages/Sydney/CBuilder/VirtualTreesCR.cpp: -------------------------------------------------------------------------------- 1 | //--------------------------------------------------------------------------- 2 | 3 | #include <basepch.h> 4 | #pragma hdrstop 5 | #pragma package(smart_init) 6 | //--------------------------------------------------------------------------- 7 | 8 | // Package source. 9 | //--------------------------------------------------------------------------- 10 | 11 | 12 | #pragma argsused 13 | int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void*) 14 | { 15 | return 1; 16 | } 17 | //--------------------------------------------------------------------------- 18 | -------------------------------------------------------------------------------- /Packages/Sydney/Delphi/VirtualTreesDD.dpk: -------------------------------------------------------------------------------- 1 | package VirtualTreesDD; 2 | 3 | {$R *.res} 4 | {$R '..\..\..\Design\VirtualTrees.dcr'} 5 | {$IFDEF IMPLICITBUILDING This IFDEF should not be used by users} 6 | {$ALIGN 8} 7 | {$ASSERTIONS ON} 8 | {$BOOLEVAL OFF} 9 | {$DEBUGINFO OFF} 10 | {$EXTENDEDSYNTAX ON} 11 | {$IMPORTEDDATA ON} 12 | {$IOCHECKS ON} 13 | {$LOCALSYMBOLS OFF} 14 | {$LONGSTRINGS ON} 15 | {$OPENSTRINGS ON} 16 | {$OPTIMIZATION ON} 17 | {$OVERFLOWCHECKS OFF} 18 | {$RANGECHECKS OFF} 19 | {$REFERENCEINFO OFF} 20 | {$SAFEDIVIDE OFF} 21 | {$STACKFRAMES OFF} 22 | {$TYPEDADDRESS OFF} 23 | {$VARSTRINGCHECKS ON} 24 | {$WRITEABLECONST OFF} 25 | {$MINENUMSIZE 1} 26 | {$IMAGEBASE $400000} 27 | {$DEFINE RELEASE} 28 | {$ENDIF IMPLICITBUILDING} 29 | {$DESCRIPTION 'TurboPack VirtualTree Delphi designtime package'} 30 | {$LIBSUFFIX '270'} 31 | {$DESIGNONLY} 32 | {$IMPLICITBUILD OFF} 33 | 34 | requires 35 | DesignIDE, 36 | VirtualTreesDR; 37 | 38 | contains 39 | VirtualTreesReg in '..\..\..\Design\VirtualTreesReg.pas'; 40 | 41 | end. 42 | -------------------------------------------------------------------------------- /Packages/Sydney/Delphi/VirtualTreesDD.dproj: -------------------------------------------------------------------------------- 1 | <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 2 | <PropertyGroup> 3 | <Base>True</Base> 4 | <AppType>Package</AppType> 5 | <Config Condition="'$(Config)'==''">Release</Config> 6 | <DCC_DCCCompiler>DCC32</DCC_DCCCompiler> 7 | <FrameworkType>VCL</FrameworkType> 8 | <MainSource>VirtualTreesDD.dpk</MainSource> 9 | <Platform Condition="'$(Platform)'==''">Win32</Platform> 10 | <ProjectGuid>{A34BA07B-19B6-4C21-9DEE-65FCA52D00AB}</ProjectGuid> 11 | <ProjectVersion>19.2</ProjectVersion> 12 | <TargetedPlatforms>1</TargetedPlatforms> 13 | </PropertyGroup> 14 | <PropertyGroup Condition="'$(Config)'=='Base' or '$(Base)'!=''"> 15 | <Base>true</Base> 16 | </PropertyGroup> 17 | <PropertyGroup Condition="('$(Platform)'=='Win32' and '$(Base)'=='true') or '$(Base_Win32)'!=''"> 18 | <Base_Win32>true</Base_Win32> 19 | <CfgParent>Base</CfgParent> 20 | <Base>true</Base> 21 | </PropertyGroup> 22 | <PropertyGroup Condition="'$(Config)'=='Release' or '$(Cfg_1)'!=''"> 23 | <Cfg_1>true</Cfg_1> 24 | <CfgParent>Base</CfgParent> 25 | <Base>true</Base> 26 | </PropertyGroup> 27 | <PropertyGroup Condition="'$(Config)'=='Debug' or '$(Cfg_2)'!=''"> 28 | <Cfg_2>true</Cfg_2> 29 | <CfgParent>Base</CfgParent> 30 | <Base>true</Base> 31 | </PropertyGroup> 32 | <PropertyGroup Condition="'$(Base)'!=''"> 33 | <SanitizedProjectName>VirtualTreesDD</SanitizedProjectName> 34 | <DCC_BpiOutput>..\cpp\$(Platform)\$(Config)</DCC_BpiOutput> 35 | <DCC_CBuilderOutput>All</DCC_CBuilderOutput> 36 | <DCC_DcuOutput>.\$(Platform)\$(Config)</DCC_DcuOutput> 37 | <DCC_Description>TurboPack VirtualTree Delphi designtime package</DCC_Description> 38 | <DCC_HppOutput>..\cpp\$(Platform)\$(Config)</DCC_HppOutput> 39 | <DCC_ImageBase>00400000</DCC_ImageBase> 40 | <DCC_Namespace>System;Xml;Data;Datasnap;Web;Soap;Vcl;Vcl.Imaging;Vcl.Touch;Vcl.Samples;Vcl.Shell;$(DCC_Namespace)</DCC_Namespace> 41 | <DCC_ObjOutput>..\cpp\$(Platform)\$(Config)</DCC_ObjOutput> 42 | <DCC_OutputNeverBuildDcps>true</DCC_OutputNeverBuildDcps> 43 | <DCC_UnitSearchPath>..\..\..\Source;.\$(Platform)\$(Config);$(DCC_UnitSearchPath)</DCC_UnitSearchPath> 44 | <DesignOnlyPackage>true</DesignOnlyPackage> 45 | <DllSuffix>270</DllSuffix> 46 | <GenDll>true</GenDll> 47 | <GenPackage>true</GenPackage> 48 | <SkipResGeneration>false</SkipResGeneration> 49 | <VerInfo_Keys>CompanyName=;FileDescription=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=;ProductVersion=1.0.0.0;Comments=</VerInfo_Keys> 50 | <VerInfo_Locale>1053</VerInfo_Locale> 51 | </PropertyGroup> 52 | <PropertyGroup Condition="'$(Base_Win32)'!=''"> 53 | <DCC_Namespace>Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace)</DCC_Namespace> 54 | <DCC_UsePackage>vcl;VirtualTreesD;VirtualTreesDR;$(DCC_UsePackage)</DCC_UsePackage> 55 | </PropertyGroup> 56 | <PropertyGroup Condition="'$(Cfg_1)'!=''"> 57 | <DCC_DebugInformation>0</DCC_DebugInformation> 58 | <DCC_Define>RELEASE;$(DCC_Define)</DCC_Define> 59 | <DCC_LocalDebugSymbols>false</DCC_LocalDebugSymbols> 60 | <DCC_SymbolReferenceInfo>0</DCC_SymbolReferenceInfo> 61 | </PropertyGroup> 62 | <PropertyGroup Condition="'$(Cfg_2)'!=''"> 63 | <DCC_Define>DEBUG;$(DCC_Define)</DCC_Define> 64 | <DCC_GenerateStackFrames>true</DCC_GenerateStackFrames> 65 | <DCC_Optimize>false</DCC_Optimize> 66 | </PropertyGroup> 67 | <ItemGroup> 68 | <DelphiCompile Include="$(MainSource)"> 69 | <MainSource>MainSource</MainSource> 70 | </DelphiCompile> 71 | <DCCReference Include="..\..\..\Design\VirtualTrees.dcr"/> 72 | <DCCReference Include="DesignIDE.dcp"/> 73 | <DCCReference Include="VirtualTreesDR.dcp"/> 74 | <DCCReference Include="..\..\..\Design\VirtualTreesReg.pas"/> 75 | <BuildConfiguration Include="Base"> 76 | <Key>Base</Key> 77 | </BuildConfiguration> 78 | <BuildConfiguration Include="Release"> 79 | <Key>Cfg_1</Key> 80 | <CfgParent>Base</CfgParent> 81 | </BuildConfiguration> 82 | <BuildConfiguration Include="Debug"> 83 | <Key>Cfg_2</Key> 84 | <CfgParent>Base</CfgParent> 85 | </BuildConfiguration> 86 | </ItemGroup> 87 | <ProjectExtensions> 88 | <Borland.Personality>Delphi.Personality.12</Borland.Personality> 89 | <Borland.ProjectType>Package</Borland.ProjectType> 90 | <BorlandProject> 91 | <Delphi.Personality> 92 | <Source> 93 | <Source Name="MainSource">VirtualTreesDD.dpk</Source> 94 | </Source> 95 | <Excluded_Packages/> 96 | <VersionInfo> 97 | <VersionInfo Name="IncludeVerInfo">True</VersionInfo> 98 | <VersionInfo Name="AutoIncBuild">False</VersionInfo> 99 | <VersionInfo Name="MajorVer">1</VersionInfo> 100 | <VersionInfo Name="MinorVer">0</VersionInfo> 101 | <VersionInfo Name="Release">0</VersionInfo> 102 | <VersionInfo Name="Build">0</VersionInfo> 103 | <VersionInfo Name="Debug">False</VersionInfo> 104 | <VersionInfo Name="PreRelease">False</VersionInfo> 105 | <VersionInfo Name="Special">False</VersionInfo> 106 | <VersionInfo Name="Private">False</VersionInfo> 107 | <VersionInfo Name="DLL">False</VersionInfo> 108 | <VersionInfo Name="Locale">1053</VersionInfo> 109 | <VersionInfo Name="CodePage">1252</VersionInfo> 110 | </VersionInfo> 111 | <VersionInfoKeys> 112 | <VersionInfoKeys Name="CompanyName"/> 113 | <VersionInfoKeys Name="FileDescription"/> 114 | <VersionInfoKeys Name="FileVersion">1.0.0.0</VersionInfoKeys> 115 | <VersionInfoKeys Name="InternalName"/> 116 | <VersionInfoKeys Name="LegalCopyright"/> 117 | <VersionInfoKeys Name="LegalTrademarks"/> 118 | <VersionInfoKeys Name="OriginalFilename"/> 119 | <VersionInfoKeys Name="ProductName"/> 120 | <VersionInfoKeys Name="ProductVersion">1.0.0.0</VersionInfoKeys> 121 | <VersionInfoKeys Name="Comments"/> 122 | </VersionInfoKeys> 123 | </Delphi.Personality> 124 | <Platforms> 125 | <Platform value="Android">False</Platform> 126 | <Platform value="Android64">False</Platform> 127 | <Platform value="Linux64">False</Platform> 128 | <Platform value="OSX64">False</Platform> 129 | <Platform value="Win32">True</Platform> 130 | <Platform value="Win64">False</Platform> 131 | <Platform value="iOSDevice64">False</Platform> 132 | <Platform value="iOSSimulator">False</Platform> 133 | </Platforms> 134 | </BorlandProject> 135 | <ProjectFileVersion>12</ProjectFileVersion> 136 | </ProjectExtensions> 137 | <Import Project="$(BDS)\Bin\CodeGear.Delphi.Targets" Condition="Exists('$(BDS)\Bin\CodeGear.Delphi.Targets')"/> 138 | <Import Project="$(APPDATA)\Embarcadero\$(BDSAPPDATABASEDIR)\$(PRODUCTVERSION)\UserTools.proj" Condition="Exists('$(APPDATA)\Embarcadero\$(BDSAPPDATABASEDIR)\$(PRODUCTVERSION)\UserTools.proj')"/> 139 | <Import Project="$(MSBuildProjectName).deployproj" Condition="Exists('$(MSBuildProjectName).deployproj')"/> 140 | </Project> 141 | -------------------------------------------------------------------------------- /Packages/Sydney/Delphi/VirtualTreesDR.dpk: -------------------------------------------------------------------------------- 1 | package VirtualTreesDR; 2 | 3 | {$R *.res} 4 | {$IFDEF IMPLICITBUILDING This IFDEF should not be used by users} 5 | {$ALIGN 8} 6 | {$ASSERTIONS ON} 7 | {$BOOLEVAL OFF} 8 | {$DEBUGINFO OFF} 9 | {$EXTENDEDSYNTAX ON} 10 | {$IMPORTEDDATA ON} 11 | {$IOCHECKS ON} 12 | {$LOCALSYMBOLS OFF} 13 | {$LONGSTRINGS ON} 14 | {$OPENSTRINGS ON} 15 | {$OPTIMIZATION ON} 16 | {$OVERFLOWCHECKS OFF} 17 | {$RANGECHECKS OFF} 18 | {$REFERENCEINFO OFF} 19 | {$SAFEDIVIDE OFF} 20 | {$STACKFRAMES OFF} 21 | {$TYPEDADDRESS OFF} 22 | {$VARSTRINGCHECKS ON} 23 | {$WRITEABLECONST OFF} 24 | {$MINENUMSIZE 1} 25 | {$IMAGEBASE $400000} 26 | {$DEFINE RELEASE} 27 | {$ENDIF IMPLICITBUILDING} 28 | {$DESCRIPTION 'TurboPack VirtualTree Delphi runtime package'} 29 | {$LIBSUFFIX '270'} 30 | {$RUNONLY} 31 | {$IMPLICITBUILD OFF} 32 | 33 | requires 34 | vcl, 35 | vclx; 36 | 37 | contains 38 | VirtualTrees in '..\..\..\Source\VirtualTrees.pas', 39 | VirtualTrees.Accessibility in '..\..\..\Source\VirtualTrees.Accessibility.pas', 40 | VirtualTrees.AccessibilityFactory in '..\..\..\Source\VirtualTrees.AccessibilityFactory.pas', 41 | VirtualTrees.Actions in '..\..\..\Source\VirtualTrees.Actions.pas', 42 | VirtualTrees.Classes in '..\..\..\Source\VirtualTrees.Classes.pas', 43 | VirtualTrees.ClipBoard in '..\..\..\Source\VirtualTrees.ClipBoard.pas', 44 | VirtualTrees.Colors in '..\..\..\Source\VirtualTrees.Colors.pas', 45 | VirtualTrees.DataObject in '..\..\..\Source\VirtualTrees.DataObject.pas', 46 | VirtualTrees.DragImage in '..\..\..\Source\VirtualTrees.DragImage.pas', 47 | VirtualTrees.DragnDrop in '..\..\..\Source\VirtualTrees.DragnDrop.pas', 48 | VirtualTrees.DrawTree in '..\..\..\Source\VirtualTrees.DrawTree.pas', 49 | VirtualTrees.EditLink in '..\..\..\Source\VirtualTrees.EditLink.pas', 50 | VirtualTrees.Export in '..\..\..\Source\VirtualTrees.Export.pas', 51 | VirtualTrees.Header in '..\..\..\Source\VirtualTrees.Header.pas', 52 | VirtualTrees.HeaderPopup in '..\..\..\Source\VirtualTrees.HeaderPopup.pas', 53 | VirtualTrees.StyleHooks in '..\..\..\Source\VirtualTrees.StyleHooks.pas', 54 | VirtualTrees.Types in '..\..\..\Source\VirtualTrees.Types.pas', 55 | VirtualTrees.Utils in '..\..\..\Source\VirtualTrees.Utils.pas', 56 | VirtualTrees.WorkerThread in '..\..\..\Source\VirtualTrees.WorkerThread.pas'; 57 | 58 | end. 59 | -------------------------------------------------------------------------------- /Packages/Sydney/Delphi/VirtualTreesDR.dproj: -------------------------------------------------------------------------------- 1 | <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 2 | <PropertyGroup> 3 | <Base>True</Base> 4 | <AppType>Package</AppType> 5 | <Config Condition="'$(Config)'==''">Release</Config> 6 | <DCC_DCCCompiler>DCC32</DCC_DCCCompiler> 7 | <FrameworkType>VCL</FrameworkType> 8 | <MainSource>VirtualTreesDR.dpk</MainSource> 9 | <Platform Condition="'$(Platform)'==''">Win32</Platform> 10 | <ProjectGuid>{B62F3689-96E1-47D5-9FB2-2A2718281FDB}</ProjectGuid> 11 | <ProjectVersion>19.2</ProjectVersion> 12 | <TargetedPlatforms>3</TargetedPlatforms> 13 | </PropertyGroup> 14 | <PropertyGroup Condition="'$(Config)'=='Base' or '$(Base)'!=''"> 15 | <Base>true</Base> 16 | </PropertyGroup> 17 | <PropertyGroup Condition="('$(Platform)'=='Win32' and '$(Base)'=='true') or '$(Base_Win32)'!=''"> 18 | <Base_Win32>true</Base_Win32> 19 | <CfgParent>Base</CfgParent> 20 | <Base>true</Base> 21 | </PropertyGroup> 22 | <PropertyGroup Condition="('$(Platform)'=='Win64' and '$(Base)'=='true') or '$(Base_Win64)'!=''"> 23 | <Base_Win64>true</Base_Win64> 24 | <CfgParent>Base</CfgParent> 25 | <Base>true</Base> 26 | </PropertyGroup> 27 | <PropertyGroup Condition="'$(Config)'=='Release' or '$(Cfg_1)'!=''"> 28 | <Cfg_1>true</Cfg_1> 29 | <CfgParent>Base</CfgParent> 30 | <Base>true</Base> 31 | </PropertyGroup> 32 | <PropertyGroup Condition="'$(Config)'=='Debug' or '$(Cfg_2)'!=''"> 33 | <Cfg_2>true</Cfg_2> 34 | <CfgParent>Base</CfgParent> 35 | <Base>true</Base> 36 | </PropertyGroup> 37 | <PropertyGroup Condition="('$(Platform)'=='Win32' and '$(Cfg_2)'=='true') or '$(Cfg_2_Win32)'!=''"> 38 | <Cfg_2_Win32>true</Cfg_2_Win32> 39 | <CfgParent>Cfg_2</CfgParent> 40 | <Cfg_2>true</Cfg_2> 41 | <Base>true</Base> 42 | </PropertyGroup> 43 | <PropertyGroup Condition="('$(Platform)'=='Win64' and '$(Cfg_2)'=='true') or '$(Cfg_2_Win64)'!=''"> 44 | <Cfg_2_Win64>true</Cfg_2_Win64> 45 | <CfgParent>Cfg_2</CfgParent> 46 | <Cfg_2>true</Cfg_2> 47 | <Base>true</Base> 48 | </PropertyGroup> 49 | <PropertyGroup Condition="'$(Base)'!=''"> 50 | <SanitizedProjectName>VirtualTreesDR</SanitizedProjectName> 51 | <DCC_BpiOutput>..\cpp\$(Platform)\$(Config)</DCC_BpiOutput> 52 | <DCC_CBuilderOutput>All</DCC_CBuilderOutput> 53 | <DCC_DcuOutput>.\$(Platform)\$(Config)</DCC_DcuOutput> 54 | <DCC_Description>TurboPack VirtualTree Delphi runtime package</DCC_Description> 55 | <DCC_HppOutput>..\cpp\$(Platform)\$(Config)</DCC_HppOutput> 56 | <DCC_ImageBase>00400000</DCC_ImageBase> 57 | <DCC_Namespace>System;Xml;Data;Datasnap;Web;Soap;Vcl;Vcl.Imaging;Vcl.Touch;Vcl.Samples;Vcl.Shell;$(DCC_Namespace)</DCC_Namespace> 58 | <DCC_ObjOutput>..\cpp\$(Platform)\$(Config)</DCC_ObjOutput> 59 | <DCC_OutputNeverBuildDcps>true</DCC_OutputNeverBuildDcps> 60 | <DCC_UnitSearchPath>..\..\..\Source;.\$(Platform)\$(Config);$(DCC_UnitSearchPath)</DCC_UnitSearchPath> 61 | <DllSuffix>270</DllSuffix> 62 | <GenDll>true</GenDll> 63 | <GenPackage>true</GenPackage> 64 | <RuntimeOnlyPackage>true</RuntimeOnlyPackage> 65 | <SkipResGeneration>false</SkipResGeneration> 66 | <VerInfo_Keys>CompanyName=;FileDescription=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=;ProductVersion=1.0.0.0;Comments=</VerInfo_Keys> 67 | <VerInfo_Locale>1053</VerInfo_Locale> 68 | </PropertyGroup> 69 | <PropertyGroup Condition="'$(Base_Win32)'!=''"> 70 | <DCC_Namespace>Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace)</DCC_Namespace> 71 | </PropertyGroup> 72 | <PropertyGroup Condition="'$(Base_Win64)'!=''"> 73 | <DCC_DcuOutput>$(BDSCOMMONDIR)\DCP\$(Platform)</DCC_DcuOutput> 74 | <DCC_Namespace>Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;$(DCC_Namespace)</DCC_Namespace> 75 | <VerInfo_IncludeVerInfo>true</VerInfo_IncludeVerInfo> 76 | <VerInfo_Locale>1033</VerInfo_Locale> 77 | </PropertyGroup> 78 | <PropertyGroup Condition="'$(Cfg_1)'!=''"> 79 | <DCC_DebugInformation>0</DCC_DebugInformation> 80 | <DCC_Define>RELEASE;$(DCC_Define)</DCC_Define> 81 | <DCC_LocalDebugSymbols>false</DCC_LocalDebugSymbols> 82 | <DCC_SymbolReferenceInfo>0</DCC_SymbolReferenceInfo> 83 | </PropertyGroup> 84 | <PropertyGroup Condition="'$(Cfg_2)'!=''"> 85 | <DCC_Define>DEBUG;$(DCC_Define)</DCC_Define> 86 | <DCC_GenerateStackFrames>true</DCC_GenerateStackFrames> 87 | <DCC_Optimize>false</DCC_Optimize> 88 | </PropertyGroup> 89 | <PropertyGroup Condition="'$(Cfg_2_Win32)'!=''"> 90 | <DCC_OutputNeverBuildDcps>true</DCC_OutputNeverBuildDcps> 91 | </PropertyGroup> 92 | <PropertyGroup Condition="'$(Cfg_2_Win64)'!=''"> 93 | <DCC_RemoteDebug>true</DCC_RemoteDebug> 94 | </PropertyGroup> 95 | <ItemGroup> 96 | <DelphiCompile Include="$(MainSource)"> 97 | <MainSource>MainSource</MainSource> 98 | </DelphiCompile> 99 | <DCCReference Include="vcl.dcp"/> 100 | <DCCReference Include="vclx.dcp"/> 101 | <DCCReference Include="..\..\..\Source\VirtualTrees.pas"/> 102 | <DCCReference Include="..\..\..\Source\VirtualTrees.Accessibility.pas"/> 103 | <DCCReference Include="..\..\..\Source\VirtualTrees.AccessibilityFactory.pas"/> 104 | <DCCReference Include="..\..\..\Source\VirtualTrees.Actions.pas"/> 105 | <DCCReference Include="..\..\..\Source\VirtualTrees.Classes.pas"/> 106 | <DCCReference Include="..\..\..\Source\VirtualTrees.ClipBoard.pas"/> 107 | <DCCReference Include="..\..\..\Source\VirtualTrees.Colors.pas"/> 108 | <DCCReference Include="..\..\..\Source\VirtualTrees.DataObject.pas"/> 109 | <DCCReference Include="..\..\..\Source\VirtualTrees.DragImage.pas"/> 110 | <DCCReference Include="..\..\..\Source\VirtualTrees.DragnDrop.pas"/> 111 | <DCCReference Include="..\..\..\Source\VirtualTrees.DrawTree.pas"/> 112 | <DCCReference Include="..\..\..\Source\VirtualTrees.EditLink.pas"/> 113 | <DCCReference Include="..\..\..\Source\VirtualTrees.Export.pas"/> 114 | <DCCReference Include="..\..\..\Source\VirtualTrees.Header.pas"/> 115 | <DCCReference Include="..\..\..\Source\VirtualTrees.HeaderPopup.pas"/> 116 | <DCCReference Include="..\..\..\Source\VirtualTrees.StyleHooks.pas"/> 117 | <DCCReference Include="..\..\..\Source\VirtualTrees.Types.pas"/> 118 | <DCCReference Include="..\..\..\Source\VirtualTrees.Utils.pas"/> 119 | <DCCReference Include="..\..\..\Source\VirtualTrees.WorkerThread.pas"/> 120 | <BuildConfiguration Include="Base"> 121 | <Key>Base</Key> 122 | </BuildConfiguration> 123 | <BuildConfiguration Include="Release"> 124 | <Key>Cfg_1</Key> 125 | <CfgParent>Base</CfgParent> 126 | </BuildConfiguration> 127 | <BuildConfiguration Include="Debug"> 128 | <Key>Cfg_2</Key> 129 | <CfgParent>Base</CfgParent> 130 | </BuildConfiguration> 131 | </ItemGroup> 132 | <ProjectExtensions> 133 | <Borland.Personality>Delphi.Personality.12</Borland.Personality> 134 | <Borland.ProjectType>Package</Borland.ProjectType> 135 | <BorlandProject> 136 | <Delphi.Personality> 137 | <Source> 138 | <Source Name="MainSource">VirtualTreesDR.dpk</Source> 139 | </Source> 140 | <Excluded_Packages/> 141 | <VersionInfo> 142 | <VersionInfo Name="IncludeVerInfo">True</VersionInfo> 143 | <VersionInfo Name="AutoIncBuild">False</VersionInfo> 144 | <VersionInfo Name="MajorVer">1</VersionInfo> 145 | <VersionInfo Name="MinorVer">0</VersionInfo> 146 | <VersionInfo Name="Release">0</VersionInfo> 147 | <VersionInfo Name="Build">0</VersionInfo> 148 | <VersionInfo Name="Debug">False</VersionInfo> 149 | <VersionInfo Name="PreRelease">False</VersionInfo> 150 | <VersionInfo Name="Special">False</VersionInfo> 151 | <VersionInfo Name="Private">False</VersionInfo> 152 | <VersionInfo Name="DLL">False</VersionInfo> 153 | <VersionInfo Name="Locale">1053</VersionInfo> 154 | <VersionInfo Name="CodePage">1252</VersionInfo> 155 | </VersionInfo> 156 | <VersionInfoKeys> 157 | <VersionInfoKeys Name="CompanyName"/> 158 | <VersionInfoKeys Name="FileDescription"/> 159 | <VersionInfoKeys Name="FileVersion">1.0.0.0</VersionInfoKeys> 160 | <VersionInfoKeys Name="InternalName"/> 161 | <VersionInfoKeys Name="LegalCopyright"/> 162 | <VersionInfoKeys Name="LegalTrademarks"/> 163 | <VersionInfoKeys Name="OriginalFilename"/> 164 | <VersionInfoKeys Name="ProductName"/> 165 | <VersionInfoKeys Name="ProductVersion">1.0.0.0</VersionInfoKeys> 166 | <VersionInfoKeys Name="Comments"/> 167 | </VersionInfoKeys> 168 | </Delphi.Personality> 169 | <Platforms> 170 | <Platform value="Linux64">False</Platform> 171 | <Platform value="OSX64">False</Platform> 172 | <Platform value="Win32">True</Platform> 173 | <Platform value="Win64">True</Platform> 174 | </Platforms> 175 | </BorlandProject> 176 | <ProjectFileVersion>12</ProjectFileVersion> 177 | </ProjectExtensions> 178 | <Import Condition="Exists('$(BDS)\Bin\CodeGear.Delphi.Targets')" Project="$(BDS)\Bin\CodeGear.Delphi.Targets"/> 179 | <Import Condition="Exists('$(APPDATA)\Embarcadero\$(BDSAPPDATABASEDIR)\$(PRODUCTVERSION)\UserTools.proj')" Project="$(APPDATA)\Embarcadero\$(BDSAPPDATABASEDIR)\$(PRODUCTVERSION)\UserTools.proj"/> 180 | <Import Project="$(MSBuildProjectName).deployproj" Condition="Exists('$(MSBuildProjectName).deployproj')"/> 181 | </Project> 182 | -------------------------------------------------------------------------------- /Packages/Sydney/Delphi/VirtualTreesDelphi.groupproj: -------------------------------------------------------------------------------- 1 | <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 2 | <PropertyGroup> 3 | <ProjectGuid>{CC6A9541-DD5C-4BCD-8914-016D8D2EAB3B}</ProjectGuid> 4 | </PropertyGroup> 5 | <ItemGroup> 6 | <Projects Include="VirtualTreesDR.dproj"> 7 | <Dependencies/> 8 | </Projects> 9 | <Projects Include="VirtualTreesDD.dproj"> 10 | <Dependencies>VirtualTreesDR.dproj</Dependencies> 11 | </Projects> 12 | </ItemGroup> 13 | <ProjectExtensions> 14 | <Borland.Personality>Default.Personality.12</Borland.Personality> 15 | <Borland.ProjectType/> 16 | <BorlandProject> 17 | <Default.Personality/> 18 | </BorlandProject> 19 | </ProjectExtensions> 20 | <Target Name="VirtualTreesDR"> 21 | <MSBuild Projects="VirtualTreesDR.dproj"/> 22 | </Target> 23 | <Target Name="VirtualTreesDR:Clean"> 24 | <MSBuild Projects="VirtualTreesDR.dproj" Targets="Clean"/> 25 | </Target> 26 | <Target Name="VirtualTreesDR:Make"> 27 | <MSBuild Projects="VirtualTreesDR.dproj" Targets="Make"/> 28 | </Target> 29 | <Target Name="VirtualTreesDD" DependsOnTargets="VirtualTreesDR"> 30 | <MSBuild Projects="VirtualTreesDD.dproj"/> 31 | </Target> 32 | <Target Name="VirtualTreesDD:Clean" DependsOnTargets="VirtualTreesDR:Clean"> 33 | <MSBuild Projects="VirtualTreesDD.dproj" Targets="Clean"/> 34 | </Target> 35 | <Target Name="VirtualTreesDD:Make" DependsOnTargets="VirtualTreesDR:Make"> 36 | <MSBuild Projects="VirtualTreesDD.dproj" Targets="Make"/> 37 | </Target> 38 | <Target Name="Build"> 39 | <CallTarget Targets="VirtualTreesDR;VirtualTreesDD"/> 40 | </Target> 41 | <Target Name="Clean"> 42 | <CallTarget Targets="VirtualTreesDR:Clean;VirtualTreesDD:Clean"/> 43 | </Target> 44 | <Target Name="Make"> 45 | <CallTarget Targets="VirtualTreesDR:Make;VirtualTreesDD:Make"/> 46 | </Target> 47 | <Import Project="$(BDS)\Bin\CodeGear.Group.Targets" Condition="Exists('$(BDS)\Bin\CodeGear.Group.Targets')"/> 48 | </Project> 49 | -------------------------------------------------------------------------------- /Packages/Tokyo/CBuilder/VirtualTreesCBuilder.groupproj: -------------------------------------------------------------------------------- 1 | <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 2 | <PropertyGroup> 3 | <ProjectGuid>{90943296-FDFA-4C80-A99D-237F570C4F54}</ProjectGuid> 4 | </PropertyGroup> 5 | <ItemGroup> 6 | <Projects Include="VirtualTreesCR.cbproj"> 7 | <Dependencies/> 8 | </Projects> 9 | <Projects Include="VirtualTreesCD.cbproj"> 10 | <Dependencies/> 11 | </Projects> 12 | </ItemGroup> 13 | <ProjectExtensions> 14 | <Borland.Personality>Default.Personality.12</Borland.Personality> 15 | <Borland.ProjectType/> 16 | <BorlandProject> 17 | <Default.Personality/> 18 | </BorlandProject> 19 | </ProjectExtensions> 20 | <Target Name="VirtualTreesCR"> 21 | <MSBuild Projects="VirtualTreesCR.cbproj"/> 22 | </Target> 23 | <Target Name="VirtualTreesCR:Clean"> 24 | <MSBuild Projects="VirtualTreesCR.cbproj" Targets="Clean"/> 25 | </Target> 26 | <Target Name="VirtualTreesCR:Make"> 27 | <MSBuild Projects="VirtualTreesCR.cbproj" Targets="Make"/> 28 | </Target> 29 | <Target Name="VirtualTreesCD"> 30 | <MSBuild Projects="VirtualTreesCD.cbproj"/> 31 | </Target> 32 | <Target Name="VirtualTreesCD:Clean"> 33 | <MSBuild Projects="VirtualTreesCD.cbproj" Targets="Clean"/> 34 | </Target> 35 | <Target Name="VirtualTreesCD:Make"> 36 | <MSBuild Projects="VirtualTreesCD.cbproj" Targets="Make"/> 37 | </Target> 38 | <Target Name="Build"> 39 | <CallTarget Targets="VirtualTreesCR;VirtualTreesCD"/> 40 | </Target> 41 | <Target Name="Clean"> 42 | <CallTarget Targets="VirtualTreesCR:Clean;VirtualTreesCD:Clean"/> 43 | </Target> 44 | <Target Name="Make"> 45 | <CallTarget Targets="VirtualTreesCR:Make;VirtualTreesCD:Make"/> 46 | </Target> 47 | <Import Project="$(BDS)\Bin\CodeGear.Group.Targets" Condition="Exists('$(BDS)\Bin\CodeGear.Group.Targets')"/> 48 | </Project> 49 | -------------------------------------------------------------------------------- /Packages/Tokyo/CBuilder/VirtualTreesCD.cpp: -------------------------------------------------------------------------------- 1 | //--------------------------------------------------------------------------- 2 | 3 | #include <basepch.h> 4 | #pragma hdrstop 5 | #pragma package(smart_init) 6 | //--------------------------------------------------------------------------- 7 | 8 | // Package source. 9 | //--------------------------------------------------------------------------- 10 | 11 | 12 | #pragma argsused 13 | int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void*) 14 | { 15 | return 1; 16 | } 17 | //--------------------------------------------------------------------------- 18 | -------------------------------------------------------------------------------- /Packages/Tokyo/CBuilder/VirtualTreesCR.cpp: -------------------------------------------------------------------------------- 1 | //--------------------------------------------------------------------------- 2 | 3 | #include <basepch.h> 4 | #pragma hdrstop 5 | #pragma package(smart_init) 6 | //--------------------------------------------------------------------------- 7 | 8 | // Package source. 9 | //--------------------------------------------------------------------------- 10 | 11 | 12 | #pragma argsused 13 | int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void*) 14 | { 15 | return 1; 16 | } 17 | //--------------------------------------------------------------------------- 18 | -------------------------------------------------------------------------------- /Packages/Tokyo/Delphi/VirtualTreesDD.dpk: -------------------------------------------------------------------------------- 1 | package VirtualTreesDD; 2 | 3 | {$R *.res} 4 | {$R '..\..\..\Design\VirtualTrees.dcr'} 5 | {$IFDEF IMPLICITBUILDING This IFDEF should not be used by users} 6 | {$ALIGN 8} 7 | {$ASSERTIONS ON} 8 | {$BOOLEVAL OFF} 9 | {$DEBUGINFO OFF} 10 | {$EXTENDEDSYNTAX ON} 11 | {$IMPORTEDDATA ON} 12 | {$IOCHECKS ON} 13 | {$LOCALSYMBOLS OFF} 14 | {$LONGSTRINGS ON} 15 | {$OPENSTRINGS ON} 16 | {$OPTIMIZATION ON} 17 | {$OVERFLOWCHECKS OFF} 18 | {$RANGECHECKS OFF} 19 | {$REFERENCEINFO OFF} 20 | {$SAFEDIVIDE OFF} 21 | {$STACKFRAMES OFF} 22 | {$TYPEDADDRESS OFF} 23 | {$VARSTRINGCHECKS ON} 24 | {$WRITEABLECONST OFF} 25 | {$MINENUMSIZE 1} 26 | {$IMAGEBASE $400000} 27 | {$DEFINE RELEASE} 28 | {$ENDIF IMPLICITBUILDING} 29 | {$DESCRIPTION 'TurboPack VirtualTree Delphi designtime package'} 30 | {$LIBSUFFIX '250'} 31 | {$DESIGNONLY} 32 | {$IMPLICITBUILD OFF} 33 | 34 | requires 35 | DesignIDE, 36 | VirtualTreesDR; 37 | 38 | contains 39 | VirtualTreesReg in '..\..\..\Design\VirtualTreesReg.pas'; 40 | 41 | end. 42 | -------------------------------------------------------------------------------- /Packages/Tokyo/Delphi/VirtualTreesDR.dpk: -------------------------------------------------------------------------------- 1 | package VirtualTreesDR; 2 | 3 | {$R *.res} 4 | {$IFDEF IMPLICITBUILDING This IFDEF should not be used by users} 5 | {$ALIGN 8} 6 | {$ASSERTIONS ON} 7 | {$BOOLEVAL OFF} 8 | {$DEBUGINFO OFF} 9 | {$EXTENDEDSYNTAX ON} 10 | {$IMPORTEDDATA ON} 11 | {$IOCHECKS ON} 12 | {$LOCALSYMBOLS OFF} 13 | {$LONGSTRINGS ON} 14 | {$OPENSTRINGS ON} 15 | {$OPTIMIZATION ON} 16 | {$OVERFLOWCHECKS OFF} 17 | {$RANGECHECKS OFF} 18 | {$REFERENCEINFO OFF} 19 | {$SAFEDIVIDE OFF} 20 | {$STACKFRAMES OFF} 21 | {$TYPEDADDRESS OFF} 22 | {$VARSTRINGCHECKS ON} 23 | {$WRITEABLECONST OFF} 24 | {$MINENUMSIZE 1} 25 | {$IMAGEBASE $400000} 26 | {$DEFINE RELEASE} 27 | {$ENDIF IMPLICITBUILDING} 28 | {$DESCRIPTION 'TurboPack VirtualTree Delphi runtime package'} 29 | {$LIBSUFFIX '250'} 30 | {$RUNONLY} 31 | {$IMPLICITBUILD OFF} 32 | 33 | requires 34 | vcl, 35 | vclx; 36 | 37 | contains 38 | VirtualTrees in '..\..\..\Source\VirtualTrees.pas', 39 | VirtualTrees.Accessibility in '..\..\..\Source\VirtualTrees.Accessibility.pas', 40 | VirtualTrees.AccessibilityFactory in '..\..\..\Source\VirtualTrees.AccessibilityFactory.pas', 41 | VirtualTrees.Actions in '..\..\..\Source\VirtualTrees.Actions.pas', 42 | VirtualTrees.Classes in '..\..\..\Source\VirtualTrees.Classes.pas', 43 | VirtualTrees.ClipBoard in '..\..\..\Source\VirtualTrees.ClipBoard.pas', 44 | VirtualTrees.Export in '..\..\..\Source\VirtualTrees.Export.pas', 45 | VirtualTrees.HeaderPopup in '..\..\..\Source\VirtualTrees.HeaderPopup.pas', 46 | VirtualTrees.StyleHooks in '..\..\..\Source\VirtualTrees.StyleHooks.pas', 47 | VirtualTrees.Utils in '..\..\..\Source\VirtualTrees.Utils.pas', 48 | VirtualTrees.WorkerThread in '..\..\..\Source\VirtualTrees.WorkerThread.pas'; 49 | 50 | end. 51 | -------------------------------------------------------------------------------- /Packages/Tokyo/Delphi/VirtualTreesDelphi.groupproj: -------------------------------------------------------------------------------- 1 | <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 2 | <PropertyGroup> 3 | <ProjectGuid>{CC6A9541-DD5C-4BCD-8914-016D8D2EAB3B}</ProjectGuid> 4 | </PropertyGroup> 5 | <ItemGroup> 6 | <Projects Include="VirtualTreesDR.dproj"> 7 | <Dependencies/> 8 | </Projects> 9 | <Projects Include="VirtualTreesDD.dproj"> 10 | <Dependencies>VirtualTreesDR.dproj</Dependencies> 11 | </Projects> 12 | </ItemGroup> 13 | <ProjectExtensions> 14 | <Borland.Personality>Default.Personality.12</Borland.Personality> 15 | <Borland.ProjectType/> 16 | <BorlandProject> 17 | <Default.Personality/> 18 | </BorlandProject> 19 | </ProjectExtensions> 20 | <Target Name="VirtualTreesDR"> 21 | <MSBuild Projects="VirtualTreesDR.dproj"/> 22 | </Target> 23 | <Target Name="VirtualTreesDR:Clean"> 24 | <MSBuild Projects="VirtualTreesDR.dproj" Targets="Clean"/> 25 | </Target> 26 | <Target Name="VirtualTreesDR:Make"> 27 | <MSBuild Projects="VirtualTreesDR.dproj" Targets="Make"/> 28 | </Target> 29 | <Target Name="VirtualTreesDD" DependsOnTargets="VirtualTreesDR"> 30 | <MSBuild Projects="VirtualTreesDD.dproj"/> 31 | </Target> 32 | <Target Name="VirtualTreesDD:Clean" DependsOnTargets="VirtualTreesDR:Clean"> 33 | <MSBuild Projects="VirtualTreesDD.dproj" Targets="Clean"/> 34 | </Target> 35 | <Target Name="VirtualTreesDD:Make" DependsOnTargets="VirtualTreesDR:Make"> 36 | <MSBuild Projects="VirtualTreesDD.dproj" Targets="Make"/> 37 | </Target> 38 | <Target Name="Build"> 39 | <CallTarget Targets="VirtualTreesDR;VirtualTreesDD"/> 40 | </Target> 41 | <Target Name="Clean"> 42 | <CallTarget Targets="VirtualTreesDR:Clean;VirtualTreesDD:Clean"/> 43 | </Target> 44 | <Target Name="Make"> 45 | <CallTarget Targets="VirtualTreesDR:Make;VirtualTreesDD:Make"/> 46 | </Target> 47 | <Import Project="$(BDS)\Bin\CodeGear.Group.Targets" Condition="Exists('$(BDS)\Bin\CodeGear.Group.Targets')"/> 48 | </Project> 49 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # TurboPack VirtualTree 2 | 3 | Please refer to [https://github.com/JAM-Software/Virtual-TreeView](https://github.com/JAM-Software/Virtual-TreeView) for the most up to date version. 4 | 5 | This repository is currently set to archive state. 6 | --------- 7 | 8 | 9 | Updated for **10.3 Rio** / VER330 / PKG 260 10 | 11 | You can still access [10.2 Tokyo](https://github.com/TurboPack/VirtualTreeView/releases/tag/102Tokyo) and [10.1 Berlin](https://github.com/TurboPack/VirtualTreeView/releases/tag/101Berlin) versions too. 12 | 13 | ## Table of contents 14 | 15 | 1. Introduction 16 | 2. Package names 17 | 3. Installation 18 | 19 | --------- 20 | 21 | ## 1. Introduction 22 | 23 | 24 | Virtual Treeview is a Delphi treeview control built from ground up. Many years of 25 | development made it one of the most flexible and advanced tree controls available today. 26 | Virtual Treeview starts off with the claim to improve many aspects of existing solutions 27 | and introduces some new technologies and principles which were not available before. 28 | 29 | This is a source-only release of TurboPack VirtualTree. It includes 30 | designtime and runtime packages for Delphi and CBuilder and supports Win32 and Win64. 31 | 32 | --------- 33 | 34 | ## 2. Package names 35 | 36 | 37 | TurboPack VirtualTree package names have the following form: 38 | 39 | ### Delphi 40 | * VirtualTreeDR.bpl (Delphi Runtime) 41 | * VirtualTreeDD.bpl (Delphi Designtime) 42 | * VirtualTreeDBDR.bpl (Delphi data aware Runtime) 43 | * VirtualTreeDBDD.bpl (Delphi data aware Designtime) 44 | 45 | ### C++Builder 46 | * VirtualTreeCR.bpl (C++Builder Runtime) 47 | * VirtualTreeCD.bpl (C++Builder Designtime) 48 | * VirtualTreeDBCR.bpl (C++Builder data aware Runtime) 49 | * VirtualTreeDBCD.bpl (C++Builder data aware Designtime) 50 | 51 | 52 | --------- 53 | 54 | ## 3. Installation 55 | 56 | 57 | VirtualTreeView is available via the [GetIt Package Manager](http://docwiki.embarcadero.com/RADStudio/en/Installing_a_Package_Using_GetIt_Package_Manager) where you can quickly and easily install and uninstall it. 58 | 59 | To manually install TurboPack VirtualTree into your IDE, take the following 60 | steps: 61 | 62 | 1. Unzip the release files into a directory (e.g., d:\VirtualTree). 63 | 64 | 2. Start RAD Studio. 65 | 66 | 3. Add the source subdirectory (e.g., d:\VirtualTree\source) to the 67 | IDE's library path. For CBuilder, add the hpp subdirectory 68 | (e.g., d:\VirtualTree\source\hpp\win32\Release) to the IDE's system include path. 69 | 70 | 4. Open & install the designtime package specific to the IDE being 71 | used. The IDE should notify you the components have been 72 | installed. 73 | -------------------------------------------------------------------------------- /Resources/VT XP button minus.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TurboPack/VirtualTreeView/a4b671404cd0794c77a8edd312d811d48f37dd20/Resources/VT XP button minus.bmp -------------------------------------------------------------------------------- /Resources/VT XP button plus.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TurboPack/VirtualTreeView/a4b671404cd0794c77a8edd312d811d48f37dd20/Resources/VT XP button plus.bmp -------------------------------------------------------------------------------- /Resources/VT XP.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TurboPack/VirtualTreeView/a4b671404cd0794c77a8edd312d811d48f37dd20/Resources/VT XP.bmp -------------------------------------------------------------------------------- /Resources/VT check dark.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TurboPack/VirtualTreeView/a4b671404cd0794c77a8edd312d811d48f37dd20/Resources/VT check dark.bmp -------------------------------------------------------------------------------- /Resources/VT check light.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TurboPack/VirtualTreeView/a4b671404cd0794c77a8edd312d811d48f37dd20/Resources/VT check light.bmp -------------------------------------------------------------------------------- /Resources/VT flat.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TurboPack/VirtualTreeView/a4b671404cd0794c77a8edd312d811d48f37dd20/Resources/VT flat.bmp -------------------------------------------------------------------------------- /Resources/VT header split.cur: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TurboPack/VirtualTreeView/a4b671404cd0794c77a8edd312d811d48f37dd20/Resources/VT header split.cur -------------------------------------------------------------------------------- /Resources/VT move all.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TurboPack/VirtualTreeView/a4b671404cd0794c77a8edd312d811d48f37dd20/Resources/VT move all.bmp -------------------------------------------------------------------------------- /Resources/VT move all.cur: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TurboPack/VirtualTreeView/a4b671404cd0794c77a8edd312d811d48f37dd20/Resources/VT move all.cur -------------------------------------------------------------------------------- /Resources/VT move east-west.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TurboPack/VirtualTreeView/a4b671404cd0794c77a8edd312d811d48f37dd20/Resources/VT move east-west.bmp -------------------------------------------------------------------------------- /Resources/VT move east-west.cur: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TurboPack/VirtualTreeView/a4b671404cd0794c77a8edd312d811d48f37dd20/Resources/VT move east-west.cur -------------------------------------------------------------------------------- /Resources/VT move east.cur: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TurboPack/VirtualTreeView/a4b671404cd0794c77a8edd312d811d48f37dd20/Resources/VT move east.cur -------------------------------------------------------------------------------- /Resources/VT move north-east.cur: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TurboPack/VirtualTreeView/a4b671404cd0794c77a8edd312d811d48f37dd20/Resources/VT move north-east.cur -------------------------------------------------------------------------------- /Resources/VT move north-south.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TurboPack/VirtualTreeView/a4b671404cd0794c77a8edd312d811d48f37dd20/Resources/VT move north-south.bmp -------------------------------------------------------------------------------- /Resources/VT move north-south.cur: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TurboPack/VirtualTreeView/a4b671404cd0794c77a8edd312d811d48f37dd20/Resources/VT move north-south.cur -------------------------------------------------------------------------------- /Resources/VT move north-west.cur: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TurboPack/VirtualTreeView/a4b671404cd0794c77a8edd312d811d48f37dd20/Resources/VT move north-west.cur -------------------------------------------------------------------------------- /Resources/VT move north.cur: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TurboPack/VirtualTreeView/a4b671404cd0794c77a8edd312d811d48f37dd20/Resources/VT move north.cur -------------------------------------------------------------------------------- /Resources/VT move south-east.cur: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TurboPack/VirtualTreeView/a4b671404cd0794c77a8edd312d811d48f37dd20/Resources/VT move south-east.cur -------------------------------------------------------------------------------- /Resources/VT move south-west.cur: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TurboPack/VirtualTreeView/a4b671404cd0794c77a8edd312d811d48f37dd20/Resources/VT move south-west.cur -------------------------------------------------------------------------------- /Resources/VT move south.cur: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TurboPack/VirtualTreeView/a4b671404cd0794c77a8edd312d811d48f37dd20/Resources/VT move south.cur -------------------------------------------------------------------------------- /Resources/VT move west.cur: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TurboPack/VirtualTreeView/a4b671404cd0794c77a8edd312d811d48f37dd20/Resources/VT move west.cur -------------------------------------------------------------------------------- /Resources/VT tick dark.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TurboPack/VirtualTreeView/a4b671404cd0794c77a8edd312d811d48f37dd20/Resources/VT tick dark.bmp -------------------------------------------------------------------------------- /Resources/VT tick light.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TurboPack/VirtualTreeView/a4b671404cd0794c77a8edd312d811d48f37dd20/Resources/VT tick light.bmp -------------------------------------------------------------------------------- /Resources/VT utilities.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TurboPack/VirtualTreeView/a4b671404cd0794c77a8edd312d811d48f37dd20/Resources/VT utilities.bmp -------------------------------------------------------------------------------- /Resources/VT vertical split.cur: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TurboPack/VirtualTreeView/a4b671404cd0794c77a8edd312d811d48f37dd20/Resources/VT vertical split.cur -------------------------------------------------------------------------------- /Resources/VirtualTreeview-Icon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TurboPack/VirtualTreeView/a4b671404cd0794c77a8edd312d811d48f37dd20/Resources/VirtualTreeview-Icon.ico -------------------------------------------------------------------------------- /Resources/VirtualTreeview-Icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TurboPack/VirtualTreeView/a4b671404cd0794c77a8edd312d811d48f37dd20/Resources/VirtualTreeview-Icon.png -------------------------------------------------------------------------------- /Source/VirtualTrees.AccessibilityFactory.pas: -------------------------------------------------------------------------------- 1 | unit VirtualTrees.AccessibilityFactory; 2 | 3 | // The contents of this file are subject to the Mozilla Public License 4 | // Version 1.1 (the "License"); you may not use this file except in compliance 5 | // with the License. You may obtain a copy of the License at http://www.mozilla.org/MPL/ 6 | // 7 | // Alternatively, you may redistribute this library, use and/or modify it under the terms of the 8 | // GNU Lesser General Public License as published by the Free Software Foundation; 9 | // either version 2.1 of the License, or (at your option) any later version. 10 | // You may obtain a copy of the LGPL at http://www.gnu.org/copyleft/. 11 | // 12 | // Software distributed under the License is distributed on an "AS IS" basis, 13 | // WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for the 14 | // specific language governing rights and limitations under the License. 15 | // 16 | // The original code is VirtualTrees.pas, released September 30, 2000. 17 | // 18 | // The initial developer of the original code is digital publishing AG (Munich, Germany, www.digitalpublishing.de), 19 | // written by Mike Lischke (public@soft-gems.net, www.soft-gems.net). 20 | // 21 | // Portions created by digital publishing AG are Copyright 22 | // (C) 1999-2001 digital publishing AG. All Rights Reserved. 23 | //---------------------------------------------------------------------------------------------------------------------- 24 | 25 | 26 | // class to create IAccessibles for the tree passed into it. 27 | // If not already assigned, creates IAccessibles for the tree itself 28 | // and the focused item 29 | // the tree accessible is returned when the tree receives an WM_GETOBJECT message 30 | // the AccessibleItem is returned when the Accessible is being asked for the first child 31 | // To create your own IAccessibles, use the VTStandardAccessible unit as a reference, 32 | // and assign your Accessibles to the variables in the unit's initialization. 33 | // You only need to add the unit to your project, and voilá, you have an accessible string tree! 34 | // 35 | // Written by Marco Zehe. (c) 2007 36 | 37 | interface 38 | 39 | uses 40 | Winapi.oleacc, 41 | System.Classes, 42 | Vcl.Controls, 43 | VirtualTrees.BaseTree; 44 | 45 | type 46 | IVTAccessibleProvider = interface 47 | ['{8B76176B-C1F2-4C5C-99B4-2444FABE495C}'] 48 | function CreateIAccessible(ATree: TBaseVirtualTree): IAccessible; 49 | end; 50 | 51 | TVTAccessibilityFactory = class(TObject) 52 | strict private class var 53 | FAccessibilityAvailable: Boolean; 54 | FVTAccessibleFactory: TVTAccessibilityFactory; 55 | strict private 56 | FAccessibleProviders: TInterfaceList; 57 | private 58 | class procedure FreeFactory; 59 | public 60 | constructor Create; 61 | destructor Destroy; override; 62 | function CreateIAccessible(ATree: TCustomControl): IAccessible; 63 | class function GetAccessibilityFactory: TVTAccessibilityFactory; static; 64 | procedure RegisterAccessibleProvider(const AProvider: IVTAccessibleProvider); 65 | procedure UnRegisterAccessibleProvider(const AProvider: IVTAccessibleProvider); 66 | end; 67 | 68 | 69 | implementation 70 | 71 | { TVTAccessibilityFactory } 72 | 73 | constructor TVTAccessibilityFactory.Create; 74 | begin 75 | inherited Create; 76 | FAccessibleProviders := TInterfaceList.Create; 77 | FAccessibleProviders.Clear; 78 | end; 79 | 80 | function TVTAccessibilityFactory.CreateIAccessible(ATree: TCustomControl): IAccessible; 81 | var 82 | I: Integer; 83 | TmpIAccessible: IAccessible; 84 | lTree: TBaseVirtualTree; 85 | // returns an IAccessible. 86 | // 1. If the Accessible property of the passed-in tree is nil, 87 | // the first registered element will be returned. 88 | // Usually, this is the IAccessible that provides information about the tree itself. 89 | // If it is not nil, we'll check whether the AccessibleItem is nil. 90 | // If it is, we'll look in the registered IAccessibles for the appropriate one. 91 | // Each IAccessibleProvider will check the tree for properties to determine whether it is responsible. 92 | // We'll work top to bottom, from the most complicated to the most simple. 93 | // The index for these should all be greater than 0, e g the IAccessible for the tree itself should always be registered first, then any IAccessible items. 94 | begin 95 | Result := nil; 96 | lTree := (ATree as TBaseVirtualTree); 97 | if lTree <> nil then 98 | begin 99 | if lTree.Accessible = nil then 100 | begin 101 | if FAccessibleProviders.Count > 0 then 102 | begin 103 | Result := IVTAccessibleProvider(FAccessibleProviders.Items[0]).CreateIAccessible(lTree); 104 | Exit; 105 | end; 106 | end; 107 | if lTree.AccessibleItem = nil then 108 | begin 109 | if FAccessibleProviders.Count > 0 then 110 | begin 111 | for I := FAccessibleProviders.Count - 1 downto 1 do 112 | begin 113 | TmpIAccessible := IVTAccessibleProvider(FAccessibleProviders.Items[I]).CreateIAccessible(lTree); 114 | if TmpIAccessible <> nil then 115 | begin 116 | Result := TmpIAccessible; 117 | Break; 118 | end; 119 | end; 120 | if TmpIAccessible = nil then 121 | begin 122 | Result := IVTAccessibleProvider(FAccessibleProviders.Items[0]).CreateIAccessible(lTree); 123 | end; 124 | end; 125 | end 126 | else 127 | Result := lTree.AccessibleItem; 128 | end; 129 | end; 130 | 131 | destructor TVTAccessibilityFactory.Destroy; 132 | begin 133 | FAccessibleProviders.Free; 134 | FAccessibleProviders := nil; 135 | inherited Destroy; 136 | end; 137 | 138 | class procedure TVTAccessibilityFactory.FreeFactory; 139 | begin 140 | FVTAccessibleFactory.Free; 141 | end; 142 | 143 | procedure TVTAccessibilityFactory.RegisterAccessibleProvider(const AProvider: IVTAccessibleProvider); 144 | // Ads a provider if it is not already registered 145 | begin 146 | if FAccessibleProviders.IndexOf(AProvider) < 0 then 147 | FAccessibleProviders.Add(AProvider) 148 | end; 149 | 150 | procedure TVTAccessibilityFactory.UnRegisterAccessibleProvider(const AProvider: IVTAccessibleProvider); 151 | // Unregisters/removes an IAccessible provider if it is present 152 | begin 153 | if FAccessibleProviders.IndexOf(AProvider) >= 0 then 154 | FAccessibleProviders.Remove(AProvider); 155 | end; 156 | 157 | class function TVTAccessibilityFactory.GetAccessibilityFactory: TVTAccessibilityFactory; 158 | // Accessibility helper function to create a singleton class that will create or return 159 | // the IAccessible interface for the tree and the focused node. 160 | 161 | begin 162 | // first, check if we've loaded the library already 163 | if not FAccessibilityAvailable then 164 | FAccessibilityAvailable := True; 165 | if FAccessibilityAvailable then 166 | begin 167 | // Check to see if the class has already been created. 168 | if FVTAccessibleFactory = nil then 169 | FVTAccessibleFactory := TVTAccessibilityFactory.Create; 170 | Result := FVTAccessibleFactory; 171 | end 172 | else 173 | Result := nil; 174 | end; 175 | 176 | initialization 177 | 178 | finalization 179 | TVTAccessibilityFactory.FreeFactory; 180 | 181 | end. 182 | -------------------------------------------------------------------------------- /Source/VirtualTrees.Classes.pas: -------------------------------------------------------------------------------- 1 | unit VirtualTrees.Classes; 2 | 3 | // The contents of this file are subject to the Mozilla Public License 4 | // Version 1.1 (the "License"); you may not use this file except in compliance 5 | // with the License. You may obtain a copy of the License at http://www.mozilla.org/MPL/ 6 | // 7 | // Alternatively, you may redistribute this library, use and/or modify it under the terms of the 8 | // GNU Lesser General Public License as published by the Free Software Foundation; 9 | // either version 2.1 of the License, or (at your option) any later version. 10 | // You may obtain a copy of the LGPL at http://www.gnu.org/copyleft/. 11 | // 12 | // Software distributed under the License is distributed on an "AS IS" basis, 13 | // WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for the 14 | // specific language governing rights and limitations under the License. 15 | // 16 | // The original code is VirtualTrees.pas, released September 30, 2000. 17 | // 18 | // The initial developer of the original code is digital publishing AG (Munich, Germany, www.digitalpublishing.de), 19 | // written by Mike Lischke (public@soft-gems.net, www.soft-gems.net). 20 | // 21 | // Portions created by digital publishing AG are Copyright 22 | // (C) 1999-2001 digital publishing AG. All Rights Reserved. 23 | //---------------------------------------------------------------------------------------------------------------------- 24 | 25 | interface 26 | 27 | {$WARN UNSAFE_TYPE OFF} 28 | {$WARN UNSAFE_CAST OFF} 29 | {$WARN UNSAFE_CODE OFF} 30 | 31 | uses 32 | Winapi.Windows; 33 | 34 | type 35 | // Helper classes to speed up rendering text formats for clipboard and drag'n drop transfers. 36 | TBufferedRawByteString = class 37 | private 38 | FStart, 39 | FPosition, 40 | FEnd: PAnsiChar; 41 | function GetAsString: RawByteString; 42 | public 43 | destructor Destroy; override; 44 | 45 | procedure Add(const S: RawByteString); 46 | procedure AddNewLine; 47 | 48 | property AsString: RawByteString read GetAsString; 49 | end; 50 | 51 | TBufferedString = class 52 | private 53 | FStart, 54 | FPosition, 55 | FEnd: PWideChar; 56 | function GetAsString: string; 57 | public 58 | destructor Destroy; override; 59 | 60 | procedure Add(const S: string); 61 | procedure AddNewLine; 62 | 63 | property AsString: string read GetAsString; 64 | end; 65 | 66 | 67 | implementation 68 | 69 | //----------------- TBufferedRawByteString ------------------------------------------------------------------------------------ 70 | 71 | const 72 | AllocIncrement = 2 shl 11; // Must be a power of 2. 73 | 74 | destructor TBufferedRawByteString.Destroy; 75 | 76 | begin 77 | FreeMem(FStart); 78 | inherited; 79 | end; 80 | 81 | //---------------------------------------------------------------------------------------------------------------------- 82 | 83 | function TBufferedRawByteString.GetAsString: RawByteString; 84 | 85 | begin 86 | SetString(Result, FStart, FPosition - FStart); 87 | end; 88 | 89 | //---------------------------------------------------------------------------------------------------------------------- 90 | 91 | procedure TBufferedRawByteString.Add(const S: RawByteString); 92 | 93 | var 94 | NewLen, 95 | LastOffset, 96 | Len: NativeInt; 97 | 98 | begin 99 | Len := Length(S); 100 | // Make room for the new string. 101 | if FEnd - FPosition <= Len then 102 | begin 103 | // Round up NewLen so it is always a multiple of AllocIncrement. 104 | NewLen := FEnd - FStart + (Len + AllocIncrement - 1) and not (AllocIncrement - 1); 105 | // Keep last offset to restore it correctly in the case that FStart gets a new memory block assigned. 106 | LastOffset := FPosition - FStart; 107 | ReallocMem(FStart, NewLen); 108 | FPosition := FStart + LastOffset; 109 | FEnd := FStart + NewLen; 110 | end; 111 | System.Move(PAnsiChar(S)^, FPosition^, Len); 112 | System.Inc(FPosition, Len); 113 | end; 114 | 115 | //---------------------------------------------------------------------------------------------------------------------- 116 | 117 | procedure TBufferedRawByteString.AddNewLine; 118 | 119 | var 120 | NewLen, 121 | LastOffset: NativeInt; 122 | 123 | begin 124 | // Make room for the CR/LF characters. 125 | if FEnd - FPosition <= 2 then 126 | begin 127 | // Round up NewLen so it is always a multiple of AllocIncrement. 128 | NewLen := FEnd - FStart + (2 + AllocIncrement - 1) and not (AllocIncrement - 1); 129 | // Keep last offset to restore it correctly in the case that FStart gets a new memory block assigned. 130 | LastOffset := FPosition - FStart; 131 | ReallocMem(FStart, NewLen); 132 | FPosition := FStart + LastOffset; 133 | FEnd := FStart + NewLen; 134 | end; 135 | FPosition^ := #13; 136 | System.Inc(FPosition); 137 | FPosition^ := #10; 138 | System.Inc(FPosition); 139 | end; 140 | 141 | //----------------- TBufferedString -------------------------------------------------------------------------------- 142 | 143 | destructor TBufferedString.Destroy; 144 | 145 | begin 146 | FreeMem(FStart); 147 | inherited; 148 | end; 149 | 150 | //---------------------------------------------------------------------------------------------------------------------- 151 | 152 | function TBufferedString.GetAsString: string; 153 | 154 | begin 155 | SetString(Result, FStart, FPosition - FStart); 156 | end; 157 | 158 | //---------------------------------------------------------------------------------------------------------------------- 159 | 160 | procedure TBufferedString.Add(const S: string); 161 | 162 | var 163 | NewLen, 164 | LastOffset, 165 | Len: Integer; 166 | 167 | begin 168 | Len := Length(S); 169 | if Len = 0 then 170 | exit;//Nothing to do 171 | // Make room for the new string. 172 | if FEnd - FPosition <= Len then 173 | begin 174 | // Round up NewLen so it is always a multiple of AllocIncrement. 175 | NewLen := FEnd - FStart + (Len + AllocIncrement - 1) and not (AllocIncrement - 1); 176 | // Keep last offset to restore it correctly in the case that FStart gets a new memory block assigned. 177 | LastOffset := FPosition - FStart; 178 | ReallocMem(FStart, 2 * NewLen); 179 | FPosition := FStart + LastOffset; 180 | FEnd := FStart + NewLen; 181 | end; 182 | System.Move(PWideChar(S)^, FPosition^, 2 * Len); 183 | System.Inc(FPosition, Len); 184 | end; 185 | 186 | //---------------------------------------------------------------------------------------------------------------------- 187 | 188 | procedure TBufferedString.AddNewLine; 189 | 190 | var 191 | NewLen, 192 | LastOffset: Integer; 193 | 194 | begin 195 | // Make room for the CR/LF characters. 196 | if FEnd - FPosition <= 4 then 197 | begin 198 | // Round up NewLen so it is always a multiple of AllocIncrement. 199 | NewLen := FEnd - FStart + (2 + AllocIncrement - 1) and not (AllocIncrement - 1); 200 | // Keep last offset to restore it correctly in the case that FStart gets a new memory block assigned. 201 | LastOffset := FPosition - FStart; 202 | ReallocMem(FStart, 2 * NewLen); 203 | FPosition := FStart + LastOffset; 204 | FEnd := FStart + NewLen; 205 | end; 206 | FPosition^ := #13; 207 | System.Inc(FPosition); 208 | FPosition^ := #10; 209 | System.Inc(FPosition); 210 | end; 211 | 212 | 213 | end. 214 | -------------------------------------------------------------------------------- /Source/VirtualTrees.DragImage.pas: -------------------------------------------------------------------------------- 1 | unit VirtualTrees.DragImage; 2 | 3 | interface 4 | 5 | uses 6 | WinApi.Windows, 7 | WinApi.ActiveX, 8 | System.Types, 9 | Vcl.Controls, 10 | Vcl.Graphics; 11 | 12 | {$MINENUMSIZE 1, make enumerations as small as possible} 13 | 14 | 15 | type 16 | // Drag image support for the tree. 17 | TVTTransparency = 0 .. 255; 18 | 19 | // Simple move limitation for the drag image. 20 | TVTDragMoveRestriction = ( 21 | dmrNone, 22 | dmrHorizontalOnly, 23 | dmrVerticalOnly 24 | ); 25 | 26 | TVTDragImageStates = set of ( 27 | disHidden, // Internal drag image is currently hidden (always hidden if drag image helper interfaces are used). 28 | disInDrag, // Drag image class is currently being used. 29 | disPrepared // Drag image class is prepared. 30 | ); 31 | 32 | // Class to manage header and tree drag image during a drag'n drop operation. 33 | TVTDragImage = class 34 | private 35 | FOwner : TCustomControl; 36 | FBackImage, // backup of overwritten screen area 37 | FAlphaImage, // target for alpha blending 38 | FDragImage : TBitmap; // the actual drag image to blend to screen 39 | FRestriction : TVTDragMoveRestriction; // determines in which directions the drag image can be moved 40 | FColorKey : TColor; // color to make fully transparent regardless of any other setting 41 | FStates : TVTDragImageStates; // Determines the states of the drag image class. 42 | public 43 | constructor Create(AOwner : TCustomControl); 44 | destructor Destroy; override; 45 | 46 | procedure EndDrag; 47 | procedure PrepareDrag(DragImage : TBitmap; HotSpot : TPoint; const DataObject: IDataObject; pColorKey: TColor = clWindow); 48 | property MoveRestriction : TVTDragMoveRestriction read FRestriction write FRestriction default dmrNone; 49 | end; 50 | 51 | implementation 52 | 53 | uses 54 | WinApi.ShlObj, 55 | WinApi.Messages, 56 | System.SysUtils, 57 | System.Math, 58 | VirtualTrees.DragnDrop, 59 | VirtualTrees.Types, 60 | VirtualTrees.Utils, 61 | VirtualTrees.BaseTree; 62 | 63 | //----------------- TVTDragImage --------------------------------------------------------------------------------------- 64 | 65 | constructor TVTDragImage.Create(AOwner : TCustomControl); 66 | begin 67 | FOwner := AOwner; 68 | FRestriction := dmrNone; 69 | FColorKey := clNone; 70 | end; 71 | 72 | //---------------------------------------------------------------------------------------------------------------------- 73 | 74 | destructor TVTDragImage.Destroy; 75 | begin 76 | EndDrag; 77 | 78 | inherited; 79 | end; 80 | 81 | //---------------------------------------------------------------------------------------------------------------------- 82 | 83 | procedure TVTDragImage.EndDrag; 84 | begin 85 | FStates := FStates - [disInDrag, disPrepared]; 86 | FBackImage.Free; 87 | FBackImage := nil; 88 | FDragImage.Free; 89 | FDragImage := nil; 90 | FAlphaImage.Free; 91 | FAlphaImage := nil; 92 | end; 93 | 94 | //---------------------------------------------------------------------------------------------------------------------- 95 | 96 | procedure TVTDragImage.PrepareDrag(DragImage : TBitmap; HotSpot : TPoint; const DataObject : IDataObject; pColorKey: TColor = clWindow); 97 | // Creates all necessary structures to do alpha blended dragging using the given image. 98 | // ImagePostion and HotSpot are given in screen coordinates. The first determines where to place the drag image while 99 | // the second is the initial mouse position. 100 | // This method also determines whether the system supports drag images natively. If so then only minimal structures 101 | // are created. 102 | 103 | var 104 | Width, Height : Integer; 105 | DragSourceHelper : IDragSourceHelper; 106 | DragInfo : TSHDragImage; 107 | lDragSourceHelper2 : IDragSourceHelper2; // Needed to get Windows Vista+ style drag hints. 108 | lNullPoint : TPoint; 109 | begin 110 | Width := DragImage.Width; 111 | Height := DragImage.Height; 112 | FColorKey := pColorKey; 113 | 114 | // Determine whether the system supports the drag helper interfaces. 115 | if Assigned(DataObject) and Succeeded(CoCreateInstance(CLSID_DragDropHelper, nil, CLSCTX_INPROC_SERVER, IDragSourceHelper, DragSourceHelper)) then 116 | begin 117 | lNullPoint := Point(0, 0); 118 | if Supports(DragSourceHelper, IDragSourceHelper2, lDragSourceHelper2) then 119 | lDragSourceHelper2.SetFlags(DSH_ALLOWDROPDESCRIPTIONTEXT); // Show description texts 120 | // First let the system try to initialze the DragSourceHelper, this works fine for file system objects (CF_HDROP) 121 | StandardOLEFormat.cfFormat := CF_HDROP; 122 | if not Succeeded(DataObject.QueryGetData(StandardOLEFormat)) or not Succeeded(DragSourceHelper.InitializeFromWindow(0, lNullPoint, DataObject)) then 123 | begin 124 | // Supply the drag source helper with our drag image. 125 | DragInfo.sizeDragImage.cx := Width; 126 | DragInfo.sizeDragImage.cy := Height; 127 | DragInfo.ptOffset := HotSpot; 128 | DragInfo.hbmpDragImage := CopyImage(DragImage.Handle, IMAGE_BITMAP, Width, Height, LR_COPYRETURNORG); 129 | DragInfo.crColorKey := ColorToRGB(FColorKey); 130 | if not Succeeded(DragSourceHelper.InitializeFromBitmap(@DragInfo, DataObject)) then 131 | begin 132 | DeleteObject(DragInfo.hbmpDragImage); 133 | end; 134 | end; 135 | end; 136 | end; 137 | 138 | 139 | end. 140 | -------------------------------------------------------------------------------- /Source/VirtualTrees.HeaderPopup.dtx: -------------------------------------------------------------------------------- 1 | 2 | @@TVirtualTreeCast 3 | Necessary to make the header accessible. 4 | 5 | 6 | @@TVTHeaderPopupOption.poAllowHideAll 7 | Allows to hide all columns, including the last one. 8 | 9 | @@TVTHeaderPopupOption.poOriginalOrder 10 | Show menu items in original column order as they were added to the tree. 11 | 12 | @@VTHeaderPopup.pas 13 | The contents of this file are subject to the Mozilla Public License 14 | Version 1.1 (the "License"); you may not use this file except in 15 | compliance with the License. You may obtain a copy of the License at 16 | http://www.mozilla.org/MPL/ 17 | 18 | Alternatively, you may redistribute this library, use and/or modify it under the terms of the 19 | GNU Lesser General Public License as published by the Free Software Foundation; 20 | either version 2.1 of the License, or (at your option) any later version. 21 | You may obtain a copy of the LGPL at http://www.gnu.org/copyleft/. 22 | 23 | Software distributed under the License is distributed on an "AS IS" 24 | basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the 25 | License for the specific language governing rights and limitations 26 | under the License. 27 | 28 | The Original Code is VTHeaderPopup.pas. 29 | 30 | The Initial Developer of the Original Code is Ralf Junker <delphi@zeitungsjunge.de>. All Rights Reserved. 31 | 32 | Modified 14 Sep 2003 by Mike Lischke <public@delphi-gems.com>. 33 | - Renamed event type name to be consistent with other event types (e.g. used in VT). 34 | - Added event for hiding/showing columns. 35 | - DoXXX method are now virtual. 36 | - Conditional code rearrangement to get back Ctrl+Shift+Up/Down navigation back. 37 | Modified 31 Mar 2003 by Mike Lischke <public@delphi-gems.com>. 38 | Added a check for the PopupComponent property before casting it hardly to a Virtual Treeview. People might 39 | (accidentally) misuse the header popup. 40 | 41 | Modified 20 Oct 2002 by Borut Maricic <borut.maricic@pobox.com>. 42 | Added the possibility to use Troy Wolbrink's Unicode aware popup menu. Define the compiler symbol TNT to enable it. 43 | You can get Troy's Unicode controls collection from http://home.ccci.org/wolbrink/tnt/delphi_unicode_controls.htm). 44 | 45 | Modified 24 Feb 2002 by Ralf Junker <delphi@zeitungsjunge.de>. 46 | Fixed a bug where the OnAddHeaderPopupItem would interfere with poAllowHideAll options. 47 | All column indexes now consistently use TColumnIndex (instead of Integer). 48 | 49 | Modified 23 Feb 2002 by Ralf Junker <delphi@zeitungsjunge.de>. 50 | Added option to show menu items in the same order as the columns or in original order. 51 | Added option to prevent the user to hide all columns. 52 | 53 | Modified 17 Feb 2002 by Jim Kueneman <jimdk@mindspring.com>. 54 | Added the event to filter the items as they are added to the menu. 55 | -------------------------------------------------------------------------------- /Source/VirtualTrees.WorkerThread.pas: -------------------------------------------------------------------------------- 1 | unit VirtualTrees.WorkerThread; 2 | 3 | interface 4 | 5 | uses 6 | System.Classes, 7 | VirtualTrees.Types, 8 | VirtualTrees.BaseTree; 9 | 10 | type 11 | // internal worker thread 12 | TWorkerThread = class(TThread) 13 | private 14 | FCurrentTree: TBaseVirtualTree; 15 | FWaiterList: TThreadList; 16 | FRefCount: Integer; 17 | FWorkEvent: THandle; 18 | class procedure EnsureCreated(); 19 | class procedure Dispose(CanBlock: Boolean); 20 | procedure WaitForValidationTermination(Tree: TBaseVirtualTree); 21 | protected 22 | procedure Execute; override; 23 | public 24 | constructor Create(); 25 | destructor Destroy; override; 26 | 27 | /// For lifeteime management of the TWorkerThread 28 | class procedure AddThreadReference; 29 | class procedure ReleaseThreadReference(ACanBlock: Boolean = False); 30 | 31 | class procedure AddTree(Tree: TBaseVirtualTree); 32 | class procedure RemoveTree(pTree: TBaseVirtualTree; pWaitForValidationTermination: Boolean); 33 | end; 34 | 35 | 36 | 37 | 38 | 39 | implementation 40 | 41 | uses 42 | Winapi.Windows, 43 | System.Types, 44 | System.SysUtils; 45 | 46 | type 47 | TBaseVirtualTreeCracker = class(TBaseVirtualTree) 48 | end; 49 | 50 | var 51 | WorkerThread: TWorkerThread = nil; 52 | 53 | //----------------- TWorkerThread -------------------------------------------------------------------------------------- 54 | 55 | class procedure TWorkerThread.EnsureCreated(); 56 | begin 57 | if not Assigned(WorkerThread) then 58 | // Create worker thread, initialize it and send it to its wait loop. 59 | WorkerThread := TWorkerThread.Create(); 60 | end; 61 | 62 | //---------------------------------------------------------------------------------------------------------------------- 63 | 64 | class procedure TWorkerThread.Dispose(CanBlock: Boolean); 65 | var 66 | LRef: TThread; 67 | begin 68 | WorkerThread.FreeOnTerminate := not CanBlock; 69 | WorkerThread.Terminate(); 70 | SetEvent(WorkerThread.FWorkEvent); 71 | LRef := WorkerThread; 72 | WorkerThread := nil; //Will be freed usinf TThread.FreeOnTerminate 73 | if CanBlock then 74 | LRef.Free; 75 | end; 76 | 77 | //---------------------------------------------------------------------------------------------------------------------- 78 | 79 | class procedure TWorkerThread.AddThreadReference; 80 | begin 81 | TWorkerThread.EnsureCreated(); 82 | InterlockedIncrement(WorkerThread.FRefCount); 83 | end; 84 | 85 | //---------------------------------------------------------------------------------------------------------------------- 86 | 87 | class procedure TWorkerThread.ReleaseThreadReference(ACanBlock: Boolean); 88 | begin 89 | if Assigned(WorkerThread) then 90 | begin 91 | if InterlockedDecrement(WorkerThread.FRefCount) = 0 then 92 | begin 93 | WorkerThread.Dispose(ACanBlock); 94 | end; 95 | end; 96 | end; 97 | 98 | //---------------------------------------------------------------------------------------------------------------------- 99 | 100 | constructor TWorkerThread.Create(); 101 | 102 | begin 103 | FWaiterList := TThreadList.Create; 104 | // Create an event used to trigger our worker thread when something is to do. 105 | FWorkEvent := CreateEvent(nil, False, False, nil); 106 | if FWorkEvent = 0 then 107 | RaiseLastOSError; 108 | inherited Create(False); 109 | FreeOnTerminate := True; 110 | end; 111 | 112 | //---------------------------------------------------------------------------------------------------------------------- 113 | 114 | destructor TWorkerThread.Destroy; 115 | 116 | begin 117 | // First let the ancestor stop the thread before freeing our resources. 118 | inherited; 119 | CloseHandle(FWorkEvent); 120 | FWaiterList.Free; 121 | end; 122 | 123 | //---------------------------------------------------------------------------------------------------------------------- 124 | 125 | procedure TWorkerThread.WaitForValidationTermination(Tree: TBaseVirtualTree); 126 | begin 127 | // Wait for any references to this tree to be released. 128 | while FCurrentTree = Tree do 129 | begin 130 | Sleep(1); // Don't do busy waiting, let the OS scheduler give other threads a time slice 131 | CheckSynchronize(); // We need to call CheckSynchronize here because we are using TThread.Synchronize in TBaseVirtualTree.MeasureItemHeight() and ChangeTreeStatesAsync() 132 | end; 133 | end; 134 | 135 | //---------------------------------------------------------------------------------------------------------------------- 136 | 137 | procedure TWorkerThread.Execute(); 138 | 139 | // Does some background tasks, like validating tree caches. 140 | 141 | var 142 | EnterStates: TVirtualTreeStates; 143 | lExceptAddr: Pointer; 144 | lException: TObject; 145 | lCurrentTree: TBaseVirtualTree; 146 | begin 147 | TThread.NameThreadForDebugging('VirtualTrees.TWorkerThread'); 148 | while not Terminated do 149 | try 150 | WaitForSingleObject(FWorkEvent, INFINITE); 151 | if Terminated then 152 | exit; 153 | 154 | // Get the next waiting tree. 155 | with FWaiterList.LockList do 156 | try 157 | if Count > 0 then 158 | begin 159 | lCurrentTree := Items[0]; 160 | // Remove this tree from waiter list. 161 | Delete(0); 162 | // If there is yet another tree to work on then set the work event to keep looping. 163 | if Count > 0 then 164 | SetEvent(FWorkEvent); 165 | end 166 | else 167 | lCurrentTree := nil; 168 | finally 169 | FWaiterList.UnlockList; 170 | end; 171 | 172 | // Something to do? 173 | if Assigned(lCurrentTree) then 174 | begin 175 | try 176 | TBaseVirtualTreeCracker(lCurrentTree).ChangeTreeStatesAsync([tsValidating], [tsUseCache, tsValidationNeeded]); 177 | FCurrentTree := lCurrentTree; 178 | EnterStates := []; 179 | if not (tsStopValidation in FCurrentTree.TreeStates) and TBaseVirtualTreeCracker(FCurrentTree).DoValidateCache then 180 | EnterStates := [tsUseCache]; 181 | finally 182 | FCurrentTree := nil; // Important: Clear variable before calling ChangeTreeStatesAsync() to prevent deadlock in WaitForValidationTermination(). See issue #1001 183 | TBaseVirtualTreeCracker(lCurrentTree).ChangeTreeStatesAsync(EnterStates, [tsValidating, tsStopValidation]); 184 | end; 185 | end; 186 | except 187 | on Exception do 188 | begin 189 | lExceptAddr := ExceptAddr; 190 | lException := AcquireExceptionObject; 191 | TThread.Synchronize(nil, procedure 192 | begin 193 | raise lException at lExceptAddr; 194 | end); 195 | Continue; //the thread should continue to run 196 | end; 197 | end;//while 198 | end; 199 | 200 | //---------------------------------------------------------------------------------------------------------------------- 201 | 202 | class procedure TWorkerThread.AddTree(Tree: TBaseVirtualTree); 203 | 204 | begin 205 | Assert(Assigned(Tree), 'Tree must not be nil.'); 206 | TWorkerThread.EnsureCreated(); 207 | 208 | // Remove validation stop flag, just in case it is still set. 209 | TBaseVirtualTreeCracker(Tree).DoStateChange([], [tsStopValidation]); 210 | with WorkerThread.FWaiterList.LockList do 211 | try 212 | if IndexOf(Tree) = -1 then 213 | Add(Tree); 214 | finally 215 | WorkerThread.FWaiterList.UnlockList; 216 | end; 217 | 218 | SetEvent(WorkerThread.FWorkEvent); 219 | end; 220 | 221 | //---------------------------------------------------------------------------------------------------------------------- 222 | 223 | class procedure TWorkerThread.RemoveTree(pTree: TBaseVirtualTree; pWaitForValidationTermination: Boolean); 224 | begin 225 | if not Assigned(WorkerThread) then 226 | exit; 227 | Assert(Assigned(pTree), 'pTree must not be nil.'); 228 | 229 | with WorkerThread.FWaiterList.LockList do 230 | try 231 | Remove(pTree); 232 | finally 233 | WorkerThread.FWaiterList.UnlockList; // Seen several AVs in this line, was called from TWorkerThrea.Destroy. Joachim Marder. 234 | end; 235 | if pWaitForValidationTermination then 236 | WorkerThread.WaitForValidationTermination(pTree); 237 | end; 238 | 239 | 240 | end. 241 | -------------------------------------------------------------------------------- /Tests/Tests.dpr: -------------------------------------------------------------------------------- 1 | program Tests; 2 | 3 | {$IFNDEF TESTINSIGHT} 4 | {$APPTYPE CONSOLE} 5 | {$ENDIF}{$STRONGLINKTYPES ON} 6 | uses 7 | SysUtils, 8 | {$IFDEF TESTINSIGHT} 9 | TestInsight.DUnitX, 10 | {$ENDIF } 11 | DUnitX.Loggers.Console, 12 | DUnitX.Loggers.Xml.NUnit, 13 | DUnitX.TestFramework, 14 | VirtualTreeTests in 'VirtualTreeTests.pas', 15 | VirtualStringTreeTests in 'VirtualStringTreeTests.pas', 16 | VTWorkerThreadIssue1001Tests in 'VTWorkerThreadIssue1001Tests.pas'; 17 | 18 | var 19 | runner : ITestRunner; 20 | results : IRunResults; 21 | logger : ITestLogger; 22 | nunitLogger : ITestLogger; 23 | begin 24 | {$IFDEF TESTINSIGHT} 25 | TestInsight.DUnitX.RunRegisteredTests; 26 | exit; 27 | {$ENDIF} 28 | try 29 | //Check command line options, will exit if invalid 30 | TDUnitX.CheckCommandLine; 31 | //Create the test runner 32 | runner := TDUnitX.CreateRunner; 33 | //Tell the runner to use RTTI to find Fixtures 34 | runner.UseRTTI := True; 35 | //tell the runner how we will log things 36 | //Log to the console window 37 | logger := TDUnitXConsoleLogger.Create(true); 38 | runner.AddLogger(logger); 39 | //Generate an NUnit compatible XML File 40 | nunitLogger := TDUnitXXMLNUnitFileLogger.Create(TDUnitX.Options.XMLOutputFile); 41 | runner.AddLogger(nunitLogger); 42 | runner.FailsOnNoAsserts := False; //When true, Assertions must be made during tests; 43 | 44 | //Run tests 45 | results := runner.Execute; 46 | if not results.AllPassed then 47 | System.ExitCode := EXIT_ERRORS; 48 | 49 | {$IFNDEF CI} 50 | //We don't want this happening when running under CI. 51 | if TDUnitX.Options.ExitBehavior = TDUnitXExitBehavior.Pause then 52 | begin 53 | System.Write('Done.. press <Enter> key to quit.'); 54 | System.Readln; 55 | end; 56 | {$ENDIF} 57 | except 58 | on E: Exception do 59 | System.Writeln(E.ClassName, ': ', E.Message); 60 | end; 61 | end. 62 | -------------------------------------------------------------------------------- /Tests/Tests.dproj: -------------------------------------------------------------------------------- 1 | <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 2 | <PropertyGroup> 3 | <Base>True</Base> 4 | <AppType>Console</AppType> 5 | <Config Condition="'$(Config)'==''">Debug</Config> 6 | <FrameworkType>VCL</FrameworkType> 7 | <MainSource>Tests.dpr</MainSource> 8 | <Platform Condition="'$(Platform)'==''">Win32</Platform> 9 | <ProjectGuid>{D37CFA56-3B13-4C93-91F7-DDC227C20116}</ProjectGuid> 10 | <ProjectVersion>19.2</ProjectVersion> 11 | <TargetedPlatforms>3</TargetedPlatforms> 12 | </PropertyGroup> 13 | <PropertyGroup Condition="'$(Config)'=='Base' or '$(Base)'!=''"> 14 | <Base>true</Base> 15 | </PropertyGroup> 16 | <PropertyGroup Condition="('$(Platform)'=='Win32' and '$(Base)'=='true') or '$(Base_Win32)'!=''"> 17 | <Base_Win32>true</Base_Win32> 18 | <CfgParent>Base</CfgParent> 19 | <Base>true</Base> 20 | </PropertyGroup> 21 | <PropertyGroup Condition="('$(Platform)'=='Win64' and '$(Base)'=='true') or '$(Base_Win64)'!=''"> 22 | <Base_Win64>true</Base_Win64> 23 | <CfgParent>Base</CfgParent> 24 | <Base>true</Base> 25 | </PropertyGroup> 26 | <PropertyGroup Condition="'$(Config)'=='Debug' or '$(Cfg_1)'!=''"> 27 | <Cfg_1>true</Cfg_1> 28 | <CfgParent>Base</CfgParent> 29 | <Base>true</Base> 30 | </PropertyGroup> 31 | <PropertyGroup Condition="('$(Platform)'=='Win32' and '$(Cfg_1)'=='true') or '$(Cfg_1_Win32)'!=''"> 32 | <Cfg_1_Win32>true</Cfg_1_Win32> 33 | <CfgParent>Cfg_1</CfgParent> 34 | <Cfg_1>true</Cfg_1> 35 | <Base>true</Base> 36 | </PropertyGroup> 37 | <PropertyGroup Condition="('$(Platform)'=='Win64' and '$(Cfg_1)'=='true') or '$(Cfg_1_Win64)'!=''"> 38 | <Cfg_1_Win64>true</Cfg_1_Win64> 39 | <CfgParent>Cfg_1</CfgParent> 40 | <Cfg_1>true</Cfg_1> 41 | <Base>true</Base> 42 | </PropertyGroup> 43 | <PropertyGroup Condition="'$(Config)'=='Release' or '$(Cfg_2)'!=''"> 44 | <Cfg_2>true</Cfg_2> 45 | <CfgParent>Base</CfgParent> 46 | <Base>true</Base> 47 | </PropertyGroup> 48 | <PropertyGroup Condition="'$(Base)'!=''"> 49 | <SanitizedProjectName>Tests</SanitizedProjectName> 50 | <DCC_DcuOutput>DCU\$(Platform)\$(Config)</DCC_DcuOutput> 51 | <DCC_Namespace>System;Xml;Data;Datasnap;Web;Soap;Vcl;Vcl.Imaging;Vcl.Touch;Vcl.Samples;Vcl.Shell;$(DCC_Namespace)</DCC_Namespace> 52 | <DCC_UnitSearchPath>$(DUnitX);..\Source;$(DCC_UnitSearchPath)</DCC_UnitSearchPath> 53 | <Icns_MainIcns>$(BDS)\bin\delphi_PROJECTICNS.icns</Icns_MainIcns> 54 | <Icon_MainIcon>$(BDS)\bin\delphi_PROJECTICON.ico</Icon_MainIcon> 55 | <Manifest_File>$(BDS)\bin\default_app.manifest</Manifest_File> 56 | <VerInfo_Keys>CompanyName=;FileDescription=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=;ProductVersion=1.0.0.0;Comments=</VerInfo_Keys> 57 | <VerInfo_Locale>1031</VerInfo_Locale> 58 | </PropertyGroup> 59 | <PropertyGroup Condition="'$(Base_Win32)'!=''"> 60 | <DCC_Namespace>Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace)</DCC_Namespace> 61 | <DCC_UsePackage>FireDACTDataDriver;FireDACSqliteDriver;FireDACDSDriver;DBXSqliteDriver;FireDACPgDriver;fmx;IndySystem;TeeDB;tethering;DBXInterBaseDriver;DataSnapClient;DataSnapServer;DataSnapCommon;DataSnapProviderClient;DBXSybaseASEDriver;frxe22;DbxCommonDriver;vclimg;DUnitXRuntime;dbxcds;DatasnapConnectorsFreePascal;appanalytics;vcldb;vcldsnap;fmxFireDAC;UIRibbonPackage;DBXDb2Driver;DBXOracleDriver;CustomIPTransport;vclribbon;dsnap;IndyIPServer;fmxase;vcl;IndyCore;DBXMSSQLDriver;IndyIPCommon;CloudService;FmxTeeUI;FireDACIBDriver;DataSnapFireDAC;FireDACDBXDriver;soapserver;inetdbxpress;dsnapxml;FireDACInfxDriver;FireDACDb2Driver;adortl;madBasic_;FireDACASADriver;frx22;bindcompfmx;FireDACODBCDriver;RESTBackendComponents;emsclientfiredac;rtl;dbrtl;DbxClientDriver;FireDACCommon;bindcomp;inetdb;Tee;DBXOdbcDriver;vclFireDAC;madDisAsm_;xmlrtl;DataSnapNativeClient;svnui;IndyProtocols;DBXMySQLDriver;FireDACCommonDriver;bindengine;vclactnband;bindcompdbx;soaprtl;FMXTee;TeeUI;bindcompvcl;vclie;frxDB22;FireDACADSDriver;vcltouch;madExcept_;emsclient;VCLRESTComponents;FireDACMSSQLDriver;FireDAC;VclSmp;DBXInformixDriver;DataSnapConnectors;DataSnapServerMidas;dsnapcon;DBXFirebirdDriver;inet;fmxobj;FireDACMySQLDriver;soapmidas;vclx;svn;DBXSybaseASADriver;FireDACOracleDriver;fmxdae;RESTComponents;VirtualTreesR;FireDACMSAccDriver;dbexpress;DataSnapIndy10ServerTransport;IndyIPClient;$(DCC_UsePackage)</DCC_UsePackage> 62 | <VerInfo_Locale>1033</VerInfo_Locale> 63 | </PropertyGroup> 64 | <PropertyGroup Condition="'$(Base_Win64)'!=''"> 65 | <BT_BuildType>Debug</BT_BuildType> 66 | <DCC_Namespace>Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;$(DCC_Namespace)</DCC_Namespace> 67 | <DCC_UsePackage>FireDACTDataDriver;FireDACSqliteDriver;FireDACDSDriver;DBXSqliteDriver;FireDACPgDriver;fmx;IndySystem;TeeDB;tethering;DBXInterBaseDriver;DataSnapClient;DataSnapServer;DataSnapCommon;DataSnapProviderClient;DBXSybaseASEDriver;DbxCommonDriver;vclimg;dbxcds;DatasnapConnectorsFreePascal;appanalytics;vcldb;vcldsnap;fmxFireDAC;DBXDb2Driver;DBXOracleDriver;CustomIPTransport;vclribbon;dsnap;IndyIPServer;fmxase;vcl;IndyCore;DBXMSSQLDriver;IndyIPCommon;CloudService;FmxTeeUI;FireDACIBDriver;DataSnapFireDAC;FireDACDBXDriver;soapserver;inetdbxpress;dsnapxml;FireDACInfxDriver;FireDACDb2Driver;adortl;FireDACASADriver;bindcompfmx;FireDACODBCDriver;RESTBackendComponents;emsclientfiredac;rtl;dbrtl;DbxClientDriver;FireDACCommon;bindcomp;inetdb;Tee;DBXOdbcDriver;vclFireDAC;xmlrtl;DataSnapNativeClient;IndyProtocols;DBXMySQLDriver;FireDACCommonDriver;bindengine;vclactnband;bindcompdbx;soaprtl;FMXTee;TeeUI;bindcompvcl;vclie;FireDACADSDriver;vcltouch;emsclient;VCLRESTComponents;FireDACMSSQLDriver;FireDAC;VclSmp;DBXInformixDriver;DataSnapConnectors;DataSnapServerMidas;dsnapcon;DBXFirebirdDriver;inet;fmxobj;FireDACMySQLDriver;soapmidas;vclx;DBXSybaseASADriver;FireDACOracleDriver;fmxdae;RESTComponents;VirtualTreesR;FireDACMSAccDriver;dbexpress;DataSnapIndy10ServerTransport;IndyIPClient;$(DCC_UsePackage)</DCC_UsePackage> 68 | <VerInfo_Keys>CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=</VerInfo_Keys> 69 | <VerInfo_Locale>1033</VerInfo_Locale> 70 | </PropertyGroup> 71 | <PropertyGroup Condition="'$(Cfg_1)'!=''"> 72 | <DCC_DebugDCUs>true</DCC_DebugDCUs> 73 | <DCC_DebugInfoInExe>true</DCC_DebugInfoInExe> 74 | <DCC_Define>DEBUG;$(DCC_Define)</DCC_Define> 75 | <DCC_GenerateStackFrames>true</DCC_GenerateStackFrames> 76 | <DCC_Inlining>off</DCC_Inlining> 77 | <DCC_IntegerOverflowCheck>true</DCC_IntegerOverflowCheck> 78 | <DCC_Optimize>false</DCC_Optimize> 79 | <DCC_RangeChecking>true</DCC_RangeChecking> 80 | <DCC_RemoteDebug>true</DCC_RemoteDebug> 81 | </PropertyGroup> 82 | <PropertyGroup Condition="'$(Cfg_1_Win32)'!=''"> 83 | <DCC_Define>madExcept;$(DCC_Define)</DCC_Define> 84 | <DCC_MapFile>3</DCC_MapFile> 85 | <DCC_RemoteDebug>false</DCC_RemoteDebug> 86 | </PropertyGroup> 87 | <PropertyGroup Condition="'$(Cfg_1_Win64)'!=''"> 88 | <DCC_MapFile>3</DCC_MapFile> 89 | </PropertyGroup> 90 | <PropertyGroup Condition="'$(Cfg_2)'!=''"> 91 | <DCC_DebugInformation>0</DCC_DebugInformation> 92 | <DCC_Define>RELEASE;$(DCC_Define)</DCC_Define> 93 | <DCC_LocalDebugSymbols>false</DCC_LocalDebugSymbols> 94 | <DCC_SymbolReferenceInfo>0</DCC_SymbolReferenceInfo> 95 | </PropertyGroup> 96 | <ItemGroup> 97 | <DelphiCompile Include="$(MainSource)"> 98 | <MainSource>MainSource</MainSource> 99 | </DelphiCompile> 100 | <DCCReference Include="VirtualTreeTests.pas"/> 101 | <DCCReference Include="VirtualStringTreeTests.pas"/> 102 | <DCCReference Include="VTWorkerThreadIssue1001Tests.pas"/> 103 | <BuildConfiguration Include="Base"> 104 | <Key>Base</Key> 105 | </BuildConfiguration> 106 | <BuildConfiguration Include="Debug"> 107 | <Key>Cfg_1</Key> 108 | <CfgParent>Base</CfgParent> 109 | </BuildConfiguration> 110 | <BuildConfiguration Include="Release"> 111 | <Key>Cfg_2</Key> 112 | <CfgParent>Base</CfgParent> 113 | </BuildConfiguration> 114 | </ItemGroup> 115 | <ProjectExtensions> 116 | <Borland.Personality>Delphi.Personality.12</Borland.Personality> 117 | <Borland.ProjectType>Console</Borland.ProjectType> 118 | <BorlandProject> 119 | <Delphi.Personality> 120 | <Source> 121 | <Source Name="MainSource">Tests.dpr</Source> 122 | </Source> 123 | <Excluded_Packages/> 124 | </Delphi.Personality> 125 | <Platforms> 126 | <Platform value="Win32">True</Platform> 127 | <Platform value="Win64">True</Platform> 128 | </Platforms> 129 | </BorlandProject> 130 | <ProjectFileVersion>12</ProjectFileVersion> 131 | </ProjectExtensions> 132 | <Import Project="$(BDS)\Bin\CodeGear.Delphi.Targets" Condition="Exists('$(BDS)\Bin\CodeGear.Delphi.Targets')"/> 133 | <Import Project="$(APPDATA)\Embarcadero\$(BDSAPPDATABASEDIR)\$(PRODUCTVERSION)\UserTools.proj" Condition="Exists('$(APPDATA)\Embarcadero\$(BDSAPPDATABASEDIR)\$(PRODUCTVERSION)\UserTools.proj')"/> 134 | <Import Project="$(MSBuildProjectName).deployproj" Condition="Exists('$(MSBuildProjectName).deployproj')"/> 135 | </Project> 136 | -------------------------------------------------------------------------------- /Tests/VTWorkerThreadIssue1001Tests.pas: -------------------------------------------------------------------------------- 1 | unit VTWorkerThreadIssue1001Tests; 2 | 3 | interface 4 | 5 | uses 6 | DUnitX.TestFramework, 7 | Classes, 8 | Vcl.Forms, 9 | VirtualTrees; 10 | 11 | type 12 | TTestBaseVirtualTree = class(TBaseVirtualTree) 13 | public 14 | property OnCompareNodes; 15 | end; 16 | 17 | [TestFixture] 18 | TVTWorkerThreadIssue1001Tests = class 19 | strict private 20 | fTree: TTestBaseVirtualTree; 21 | fForm: TForm; 22 | procedure TreeCompareNodes(Sender: TBaseVirtualTree; Node1, Node2: PVirtualNode; 23 | Column: TColumnIndex; var Result: Integer); 24 | public 25 | [Setup] 26 | procedure Setup; 27 | [TearDown] 28 | procedure TearDown; 29 | 30 | /// Test for CheckSynchronize when tree is destroyed 31 | /// repeated 50 times because AVs are not realiable 32 | [Test, RepeatTestAttribute(100)] 33 | procedure TestDestroyWhileWorkerThreadBusy; 34 | end; 35 | 36 | implementation 37 | 38 | uses 39 | VirtualTrees.WorkerThread, 40 | SysUtils; 41 | 42 | procedure TVTWorkerThreadIssue1001Tests.Setup; 43 | begin 44 | TThread.Synchronize(nil, procedure 45 | begin 46 | fForm := TForm.Create(nil); 47 | fTree := TTestBaseVirtualTree.Create(fForm); 48 | fTree.TreeOptions.AutoOptions:= fTree.TreeOptions.AutoOptions - [toAutoSort]; 49 | fTree.OnCompareNodes:= TreeCompareNodes; 50 | end); 51 | end; 52 | 53 | procedure TVTWorkerThreadIssue1001Tests.TearDown; 54 | begin 55 | TThread.Synchronize(nil, procedure 56 | begin 57 | FreeAndNil(fForm); 58 | end); 59 | end; 60 | 61 | procedure TVTWorkerThreadIssue1001Tests.TestDestroyWhileWorkerThreadBusy; 62 | begin 63 | TThread.Synchronize(nil, procedure 64 | begin 65 | fTree.BeginUpdate; 66 | try 67 | fTree.SetChildCount(fTree.RootNode, 10000); 68 | Assert.AreEqual(fTree.RootNode.ChildCount + 1, fTree.RootNode.TotalCount, 'TotalCount <> ChildCount + 1'); 69 | //fTree.SortTree(-1, sdAscending, false); 70 | finally 71 | fTree.EndUpdate; 72 | end; 73 | FreeAndNil(fTree); 74 | FreeAndNil(fForm); 75 | end); 76 | end; 77 | 78 | procedure TVTWorkerThreadIssue1001Tests.TreeCompareNodes( 79 | Sender: TBaseVirtualTree; Node1, Node2: PVirtualNode; Column: TColumnIndex; 80 | var Result: Integer); 81 | begin 82 | if Random(10) > 5 then 83 | Result:= 1 else 84 | Result:= -1; 85 | end; 86 | 87 | initialization 88 | Randomize; 89 | TDUnitX.RegisterTestFixture(TVTWorkerThreadIssue1001Tests); 90 | 91 | end. 92 | -------------------------------------------------------------------------------- /Tests/VirtualStringTreeTests.pas: -------------------------------------------------------------------------------- 1 | unit VirtualStringTreeTests; 2 | 3 | interface 4 | 5 | uses 6 | DUnitX.TestFramework, 7 | Vcl.Forms, 8 | VirtualTrees; 9 | 10 | type 11 | 12 | [TestFixture] 13 | TVirtualStringTreeTests = class(TObject) 14 | strict private 15 | fTree: TVirtualStringTree; 16 | fForm: TForm; 17 | procedure FreeNode(Sender: TBaseVirtualTree; Node: PVirtualNode); 18 | public 19 | [Setup] 20 | procedure Setup; 21 | [TearDown] 22 | procedure TearDown; 23 | /// Test for helper function VirtualTrees.Utils.OrderRect() 24 | [Test] 25 | procedure TestNodeData; 26 | end; 27 | 28 | implementation 29 | 30 | uses 31 | Vcl.Controls; 32 | 33 | type 34 | TMyObject = class 35 | public 36 | Value : String; 37 | end; 38 | 39 | { TVirtualStringTreeTests } 40 | 41 | procedure TVirtualStringTreeTests.FreeNode(Sender: TBaseVirtualTree; Node: PVirtualNode); 42 | begin 43 | Node.GetData<TMyObject>.Free(); 44 | end; 45 | 46 | procedure TVirtualStringTreeTests.Setup; 47 | begin 48 | fForm := TForm.Create(nil); 49 | fTree := TVirtualStringTree.Create(fForm); 50 | fTree.OnFreeNode := FreeNode; 51 | fTree.Parent := fForm; 52 | fTree.Align := alClient; 53 | end; 54 | 55 | procedure TVirtualStringTreeTests.TearDown; 56 | begin 57 | fForm.Release(); 58 | fForm := nil; 59 | Application.ProcessMessages; 60 | end; 61 | 62 | procedure TVirtualStringTreeTests.TestNodeData; 63 | var 64 | pL_Node : PVirtualNode; 65 | lMyObj1, 66 | lMyObj2 : TMyObject; 67 | begin 68 | Assert.IsNotNull(fTree, 'The Virtual TreeView controls was not created successfully'); 69 | fTree.BeginUpdate; 70 | try 71 | lMyObj1 := TMyObject.Create(); 72 | lMyObj1.Value := 'Hello World'; 73 | 74 | pL_Node := fTree.AddChild(nil, lMyObj1); 75 | finally 76 | fTree.EndUpdate; 77 | end; 78 | 79 | lMyObj2 := TMyObject(pL_Node.GetData()^); 80 | Assert.AreEqual(lMyObj1, lMyObj2, 'The object that was set as node data should equal the object that was retrieved from the node using TVirtualNode.GetData()'); 81 | Assert.AreEqual(lMyObj1.Value, lMyObj2.Value, 'The object''s vlaue which was set as node data should equal the object that was retrieved from the node using TVirtualNode.GetData()'); 82 | lMyObj2 := TMyObject(fTree.GetNodeData(pL_Node)^); 83 | Assert.AreEqual(lMyObj1, lMyObj2, 'The object that was set as node data should equal the object that was retrieved from the node using TBaseVirtualTree.GetNodeData()'); 84 | Assert.AreEqual(lMyObj1.Value, lMyObj2.Value, 'The object''s value which was set as node data should equal the object that was retrieved from the node using TBaseVirtualTree.GetNodeData()'); 85 | lMyObj2 := pL_Node.GetData<TMyObject>(); 86 | Assert.AreEqual(lMyObj1, lMyObj2, 'The object that was set as node data should equal the object that was retrieved from the node using TVirtualNode.GetData<T>()'); 87 | Assert.AreEqual(lMyObj1.Value, lMyObj2.Value, 'The object''s value which was set as node data should equal the object that was retrieved from the node using TVirtualNode.GetData<T>()'); 88 | end; 89 | 90 | initialization 91 | TDUnitX.RegisterTestFixture(TVirtualStringTreeTests); 92 | 93 | end. 94 | -------------------------------------------------------------------------------- /Tests/VirtualTreeTests.pas: -------------------------------------------------------------------------------- 1 | unit VirtualTreeTests; 2 | 3 | interface 4 | 5 | uses 6 | DUnitX.TestFramework, 7 | WinApi.Windows, 8 | VirtualTrees, 9 | VirtualTrees.Utils, Vcl.Graphics; 10 | 11 | type 12 | 13 | [TestFixture] 14 | TVirtualTreeUtilsTests = class(TObject) 15 | strict private 16 | fBitmap: TBitmap; 17 | function GetHDC(): HDC; 18 | public 19 | [Setup] 20 | procedure Setup; 21 | [TearDown] 22 | procedure TearDown; 23 | /// Test for helper function VirtualTrees.Utils.OrderRect() 24 | [Test] 25 | procedure TestOrderRect; 26 | /// Test for helper function VirtualTrees.Utils.ShortenString() 27 | /// <param name="pLongString">The string that should be shortened.</param> 28 | /// <param name="pWidth">The width in pixels that is availbale, based on 96dpi == 100% dpi scaling.</param> 29 | /// <param name="pShortString">The expected shortened string.</param> 30 | [Test] 31 | [TestCase('Test1', 'Abc,20,A...')] 32 | [TestCase('Test2', 'Abc,100,Abc')] 33 | [TestCase('Test3', 'Abc,10,')] 34 | [TestCase('Test4', 'A,100,A')] 35 | [TestCase('Test5', 'ii,16,ii')] 36 | procedure TestShortenString(const pLongString : string; const pWidth: Integer; const pShortString: string); 37 | end; 38 | 39 | 40 | 41 | implementation 42 | 43 | uses 44 | System.Types, 45 | System.SysUtils; 46 | 47 | type 48 | TRectHelper = record helper for TRect 49 | function ToString(): string; 50 | end; 51 | 52 | function TRectHelper.ToString: string; 53 | begin 54 | Result := Format('(%d,%d,%d,%d)', [Left, Top, Right, Bottom]); 55 | end; 56 | 57 | 58 | { TVirtualTreeUtilsTests } 59 | 60 | function TVirtualTreeUtilsTests.GetHDC: HDC; 61 | begin 62 | Exit(fBitmap.Canvas.Handle); 63 | end; 64 | 65 | procedure TVirtualTreeUtilsTests.Setup; 66 | begin 67 | fBitmap := TBitmap.Create; 68 | fBitmap.Canvas.Font.Name := 'Tahoma'; 69 | fBitmap.Canvas.Font.Size := 8; 70 | Assert.AreEqual(fBitmap.Canvas.Font.PixelsPerInch, 96, 'PixelsPerInch of font does not have th expected value of 96 dpi') 71 | end; 72 | 73 | procedure TVirtualTreeUtilsTests.TearDown; 74 | begin 75 | FreeAndNil(fBitmap); 76 | end; 77 | 78 | procedure TVirtualTreeUtilsTests.TestOrderRect; 79 | var 80 | lRectUnordered: TRect; 81 | lRectOrderedExpected: TRect; 82 | lRectOrdered: TRect; 83 | begin 84 | lRectUnordered := Rect(1,2,3,4); 85 | lRectOrderedExpected := lRectUnordered; 86 | lRectOrdered := OrderRect(lRectUnordered); 87 | Assert.AreEqual<TRect>(lRectOrderedExpected, lRectOrdered, lRectUnordered.ToString + ' should be ordered to ' + lRectOrderedExpected.ToString + ' but was ' + lRectOrdered.ToString); 88 | lRectUnordered := Rect(4,3,2,1); 89 | lRectOrderedExpected := Rect(2,1,4,3); 90 | lRectOrdered := OrderRect(lRectUnordered); 91 | Assert.AreEqual<TRect>(lRectOrderedExpected, lRectOrdered, lRectUnordered.ToString + ' should be ordered to ' + lRectOrderedExpected.ToString + ' but was ' + lRectOrdered.ToString); 92 | end; 93 | 94 | procedure TVirtualTreeUtilsTests.TestShortenString(const pLongString : string; const pWidth: Integer; const pShortString: string); 95 | var 96 | lShortenedString: string; 97 | lShortenedWidth: Integer; 98 | begin 99 | lShortenedString := ShortenString(GetHDC, pLongString, pWidth); 100 | lShortenedWidth := fBitmap.Canvas.TextWidth(lShortenedString); 101 | Assert.IsTrue(lShortenedWidth <= pWidth, Format('The shortened string "%s" has a width of %d and so does not fit into the requested %d pixles.', [lShortenedString, lShortenedWidth, pWidth])); 102 | Assert.AreEqual(lShortenedString, pShortString); 103 | end; 104 | 105 | initialization 106 | TDUnitX.RegisterTestFixture(TVirtualTreeUtilsTests); 107 | end. 108 | --------------------------------------------------------------------------------