diff --git a/.gitignore b/.gitignore
index 6bf745683..3b7621d64 100644
--- a/.gitignore
+++ b/.gitignore
@@ -9,6 +9,8 @@
*.rsm
*.stat
*.map
+*.d
+*.o
# Generated source #
###################
@@ -43,3 +45,10 @@ VirtualTreeView.zip
*.#00
*.pch
*.skincfg
+*.a
+Packages/RAD Studio XE3/VirtualTreesR.lib
+*.lib
+
+# Folder with repro projects #
+##############################
+/#*
\ No newline at end of file
diff --git a/CHANGES.txt b/CHANGES.txt
index 28830aaa4..8d2e5fc10 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -1,4 +1,4 @@
-V7.1 and later:
+V7.x:
https://github.com/JAM-Software/Virtual-TreeView/milestones?state=closed
V7.0: (22 Jul 2018)
diff --git a/Demos/Advanced/Advanced.dproj b/Demos/Advanced/Advanced.dproj
index 53943e182..2eb9107cf 100644
--- a/Demos/Advanced/Advanced.dproj
+++ b/Demos/Advanced/Advanced.dproj
@@ -7,7 +7,7 @@
Advanced.dpr
Win32
{E5FD8257-AE07-4A8D-AB79-44170493F9A2}
- 19.2
+ 19.5
1
diff --git a/Demos/Advanced/Advanced.dsv b/Demos/Advanced/Advanced.dsv
new file mode 100644
index 000000000..5751759b5
--- /dev/null
+++ b/Demos/Advanced/Advanced.dsv
@@ -0,0 +1,10 @@
+[ClosedView_RDpcUHJvamVjdHNcVmlydHVhbC1UcmVlVmlld1xTb3VyY2VcVmlydHVhbFRyZWVzLnBhcw==]
+Module=D:\Projects\Virtual-TreeView\Source\VirtualTrees.pas
+CursorX=42
+CursorY=667
+TopLine=611
+LeftCol=1
+Elisions=
+Bookmarks=
+EditViewName=D:\Projects\Virtual-TreeView\Source\VirtualTrees.pas
+
diff --git a/Demos/Advanced/DrawTreeDemo.dfm b/Demos/Advanced/DrawTreeDemo.dfm
index a19e169e7..7b909b4a4 100644
--- a/Demos/Advanced/DrawTreeDemo.dfm
+++ b/Demos/Advanced/DrawTreeDemo.dfm
@@ -1,25 +1,24 @@
object DrawTreeForm: TDrawTreeForm
Left = 544
Top = 320
- Width = 726
- Height = 513
+ ClientHeight = 475
+ ClientWidth = 714
Color = clBtnFace
Font.Charset = ANSI_CHARSET
Font.Color = clWindowText
Font.Height = -13
Font.Name = 'Trebuchet MS'
Font.Style = []
- OldCreateOrder = False
OnCreate = FormCreate
+ OnDestroy = FormDestroy
DesignSize = (
- 710
+ 714
475)
- PixelsPerInch = 96
TextHeight = 18
object Label7: TLabel
Left = 0
Top = 0
- Width = 710
+ Width = 714
Height = 61
Align = alTop
AutoSize = False
@@ -32,7 +31,7 @@ object DrawTreeForm: TDrawTreeForm
end
object Label1: TLabel
Left = 4
- Top = 381
+ Top = 390
Width = 247
Height = 18
Anchors = [akLeft, akBottom]
@@ -40,7 +39,7 @@ object DrawTreeForm: TDrawTreeForm
end
object Label3: TLabel
Left = 424
- Top = 381
+ Top = 390
Width = 22
Height = 18
Anchors = [akLeft, akBottom]
@@ -49,8 +48,8 @@ object DrawTreeForm: TDrawTreeForm
object VDT1: TVirtualDrawTree
Left = 10
Top = 84
- Width = 684
- Height = 278
+ Width = 690
+ Height = 287
Anchors = [akLeft, akTop, akRight, akBottom]
AutoExpandDelay = 200
AutoScrollDelay = 200
@@ -92,6 +91,8 @@ object DrawTreeForm: TDrawTreeForm
OnInitChildren = VDT1InitChildren
OnInitNode = VDT1InitNode
OnStateChange = VDT1StateChange
+ Touch.InteractiveGestures = [igPan, igPressAndTap]
+ Touch.InteractiveGestureOptions = [igoPanSingleFingerHorizontal, igoPanSingleFingerVertical, igoPanInertia, igoPanGutter, igoParentPassthrough]
Columns = <
item
BiDiMode = bdLeftToRight
@@ -113,7 +114,7 @@ object DrawTreeForm: TDrawTreeForm
end
object TrackBar1: TTrackBar
Left = 264
- Top = 379
+ Top = 388
Width = 157
Height = 21
Anchors = [akLeft, akBottom]
diff --git a/Demos/Advanced/DrawTreeDemo.pas b/Demos/Advanced/DrawTreeDemo.pas
index 90e37972c..7bd1006dc 100644
--- a/Demos/Advanced/DrawTreeDemo.pas
+++ b/Demos/Advanced/DrawTreeDemo.pas
@@ -26,7 +26,7 @@ interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
VirtualTrees, StdCtrls, {$ifdef GraphicEx} GraphicEx, {$else} JPEG, {$endif}
- ImgList, ComCtrls, UITypes;
+ ImgList, ComCtrls, UITypes, System.ImageList;
type
TDrawTreeForm = class(TForm)
@@ -53,6 +53,7 @@ TDrawTreeForm = class(TForm)
var InitialStates: TVirtualNodeInitStates);
procedure TrackBar1Change(Sender: TObject);
procedure VDT1StateChange(Sender: TBaseVirtualTree; Enter, Leave: TVirtualTreeStates);
+ procedure FormDestroy(Sender: TObject);
private
FThumbSize: Integer;
FExtensionsInitialized: Boolean;
@@ -189,6 +190,11 @@ procedure TDrawTreeForm.FormCreate(Sender: TObject);
FThumbSize := 200;
end;
+procedure TDrawTreeForm.FormDestroy(Sender: TObject);
+begin
+ FreeAndNil(FExtensionList);
+end;
+
//----------------------------------------------------------------------------------------------------------------------
function TDrawTreeForm.CanDisplay(const Name: string): Boolean;
@@ -334,58 +340,60 @@ procedure TDrawTreeForm.VDT1InitNode(Sender: TBaseVirtualTree; ParentNode, Node:
end
else
begin
- Picture := TPicture.Create;
Data.Display := ExtractFileName(ExcludeTrailingBackslash(Data.FullPath));
if (Data.Attributes and SFGAO_FOLDER) = 0 then
- try
+ begin
+ Picture := TPicture.Create;
try
- Data.Image := TBitmap.Create;
- Picture.LoadFromFile(Data.FullPath);
- if not (Picture.Graphic is TBitmap) then
- begin
- // Some extra steps needed to keep non TBitmap descentants alive when
- // scaling. This is needed because when accessing Picture.Bitmap all
- // non-TBitmap content will simply be erased (definitly the wrong
- // action, but we can't do anything to prevent this). Hence we
- // must explicitly draw the graphic to a bitmap.
- with Data.Image do
+ try
+ Data.Image := TBitmap.Create;
+ Picture.LoadFromFile(Data.FullPath);
+ if not (Picture.Graphic is TBitmap) then
begin
- Width := Picture.Width;
- Height := Picture.Height;
- Canvas.Draw(0, 0, Picture.Graphic);
+ // Some extra steps needed to keep non TBitmap descentants alive when
+ // scaling. This is needed because when accessing Picture.Bitmap all
+ // non-TBitmap content will simply be erased (definitly the wrong
+ // action, but we can't do anything to prevent this). Hence we
+ // must explicitly draw the graphic to a bitmap.
+ with Data.Image do
+ begin
+ Width := Picture.Width;
+ Height := Picture.Height;
+ Canvas.Draw(0, 0, Picture.Graphic);
+ end;
+ Picture.Bitmap.Assign(Data.Image);
end;
- Picture.Bitmap.Assign(Data.Image);
- end;
- RescaleImage(Picture.Bitmap, Data.Image);
-
- // Collect some additional image properties.
- Data.Properties := Data.Properties + Format('%d x %d pixels', [Picture.Width, Picture.Height]);
- case Picture.Bitmap.PixelFormat of
- pf1bit:
- Data.Properties := Data.Properties + ', 2 colors';
- pf4bit:
- Data.Properties := Data.Properties + ', 16 colors';
- pf8bit:
- Data.Properties := Data.Properties + ', 256 colors';
- pf15bit:
- Data.Properties := Data.Properties + ', 32K colors';
- pf16bit:
- Data.Properties := Data.Properties + ', 64K colors';
- pf24bit:
- Data.Properties := Data.Properties + ', 16M colors';
- pf32bit:
- Data.Properties := Data.Properties + ', 16M+ colors';
+ RescaleImage(Picture.Bitmap, Data.Image);
+
+ // Collect some additional image properties.
+ Data.Properties := Data.Properties + Format('%d x %d pixels', [Picture.Width, Picture.Height]);
+ case Picture.Bitmap.PixelFormat of
+ pf1bit:
+ Data.Properties := Data.Properties + ', 2 colors';
+ pf4bit:
+ Data.Properties := Data.Properties + ', 16 colors';
+ pf8bit:
+ Data.Properties := Data.Properties + ', 256 colors';
+ pf15bit:
+ Data.Properties := Data.Properties + ', 32K colors';
+ pf16bit:
+ Data.Properties := Data.Properties + ', 64K colors';
+ pf24bit:
+ Data.Properties := Data.Properties + ', 16M colors';
+ pf32bit:
+ Data.Properties := Data.Properties + ', 16M+ colors';
+ end;
+ if Cardinal(Data.Image.Height) + 4 > TVirtualDrawTree(Sender).DefaultNodeHeight then
+ Sender.NodeHeight[Node] := Data.Image.Height + 4;
+ except
+ Data.Image.Free;
+ Data.Image := nil;
end;
- if Cardinal(Data.Image.Height) + 4 > TVirtualDrawTree(Sender).DefaultNodeHeight then
- Sender.NodeHeight[Node] := Data.Image.Height + 4;
- except
- Data.Image.Free;
- Data.Image := nil;
- end;
- finally
- Picture.Free;
- end;
- end;
+ finally
+ Picture.Free;
+ end;// try..finally
+ end;// if
+ end;// else
Data.Attributes := ReadAttributes(Data.FullPath);
if ((Data.Attributes and SFGAO_HASSUBFOLDER) <> 0) or
(((Data.Attributes and SFGAO_FOLDER) <> 0) and HasChildren(Data.FullPath)) then
@@ -543,10 +551,10 @@ procedure TDrawTreeForm.VDT1InitChildren(Sender: TBaseVirtualTree; Node: PVirtua
GetOpenAndClosedIcons(ChildData.FullPath, ChildData.OpenIndex, ChildData.CloseIndex);
Sender.ValidateNode(Node, False);
+ Inc(ChildCount);
end;
end;
until FindNext(SR) <> 0;
- ChildCount := Sender.ChildCount[Node];
// finally sort node
if ChildCount > 0 then
diff --git a/Demos/Advanced/GeneralAbilitiesDemo.dfm b/Demos/Advanced/GeneralAbilitiesDemo.dfm
index ba8211dca..f2efde679 100644
--- a/Demos/Advanced/GeneralAbilitiesDemo.dfm
+++ b/Demos/Advanced/GeneralAbilitiesDemo.dfm
@@ -58,7 +58,7 @@ object GeneralForm: TGeneralForm
ScrollBarOptions.VerticalIncrement = 19
TabOrder = 0
TreeOptions.AnimationOptions = [toAnimatedToggle]
- TreeOptions.AutoOptions = [toAutoDropExpand, toAutoScroll, toAutoSpanColumns, toAutoTristateTracking, toAutoHideButtons, toDisableAutoscrollOnFocus, toAutoChangeScale]
+ TreeOptions.AutoOptions = [toAutoDropExpand, toAutoScroll, toAutoSpanColumns, toAutoTristateTracking, toAutoHideButtons, toAutoChangeScale]
TreeOptions.MiscOptions = [toAcceptOLEDrop, toCheckSupport, toEditable, toInitOnSave, toToggleOnDblClick, toWheelPanning, toEditOnClick]
TreeOptions.PaintOptions = [toHideSelection, toHotTrack, toShowButtons, toShowDropmark, toShowRoot, toShowTreeLines, toShowVertGridLines, toThemeAware, toUseBlendedImages, toFullVertGridLines, toUseBlendedSelection]
TreeOptions.SelectionOptions = [toExtendedFocus, toMiddleClickSelect, toMultiSelect, toRightClickSelect]
diff --git a/Demos/Advanced/GridDemo.dfm b/Demos/Advanced/GridDemo.dfm
index ae3e577da..41c6937eb 100644
--- a/Demos/Advanced/GridDemo.dfm
+++ b/Demos/Advanced/GridDemo.dfm
@@ -99,7 +99,7 @@ object GridForm: TGridForm
TreeOptions.AutoOptions = [toAutoDropExpand, toAutoScroll, toAutoScrollOnExpand, toAutoTristateTracking, toAutoChangeScale]
TreeOptions.MiscOptions = [toAcceptOLEDrop, toEditable, toGridExtensions, toInitOnSave, toToggleOnDblClick, toWheelPanning]
TreeOptions.PaintOptions = [toHotTrack, toShowButtons, toShowDropmark, toShowHorzGridLines, toShowVertGridLines, toUseBlendedImages]
- TreeOptions.SelectionOptions = [toDisableDrawSelection, toExtendedFocus, toMiddleClickSelect, toMultiSelect, toRightClickSelect, toCenterScrollIntoView]
+ TreeOptions.SelectionOptions = [toDisableDrawSelection, toExtendedFocus, toMiddleClickSelect, toMultiSelect, toRightClickSelect, toCenterScrollIntoView, toExtendedFocus]
WantTabs = True
OnAfterCellPaint = VST5AfterCellPaint
OnBeforeCellPaint = VST5BeforeCellPaint
diff --git a/Demos/Interfaces/charityevents.dsv b/Demos/Interfaces/charityevents.dsv
new file mode 100644
index 000000000..1dc475e91
--- /dev/null
+++ b/Demos/Interfaces/charityevents.dsv
@@ -0,0 +1,30 @@
+[ClosedView_RDpcUHJvamVjdHNcVmlydHVhbC1UcmVlVmlld1xTb3VyY2VcVmlydHVhbFRyZWVzLnBhcw==]
+Module=D:\Projects\Virtual-TreeView\Source\VirtualTrees.pas
+CursorX=47
+CursorY=246
+TopLine=223
+LeftCol=1
+Elisions=
+Bookmarks=
+EditViewName=D:\Projects\Virtual-TreeView\Source\VirtualTrees.pas
+[ClosedView_RDpcUHJvamVjdHNcVmlydHVhbC1UcmVlVmlld1xEZW1vc1xJbnRlcmZhY2VzXG15ZXZlbnRzLnBh
+cw==]
+Module=D:\Projects\Virtual-TreeView\Demos\Interfaces\myevents.pas
+CursorX=6
+CursorY=26
+TopLine=13
+LeftCol=1
+Elisions=
+Bookmarks=
+EditViewName=D:\Projects\Virtual-TreeView\Demos\Interfaces\myevents.pas
+
+[ClosedView_RDpcUHJvamVjdHNcVmlydHVhbC1UcmVlVmlld1xEZW1vc1xPYmplY3RzXE1WQ1BhbmVsLnBhcw==]
+Module=D:\Projects\Virtual-TreeView\Demos\Objects\MVCPanel.pas
+CursorX=21
+CursorY=74
+TopLine=52
+LeftCol=1
+Elisions=
+Bookmarks=
+EditViewName=D:\Projects\Virtual-TreeView\Demos\Objects\MVCPanel.pas
+
diff --git a/Demos/Minimal/Minimal.dsv b/Demos/Minimal/Minimal.dsv
new file mode 100644
index 000000000..6a4237da6
--- /dev/null
+++ b/Demos/Minimal/Minimal.dsv
@@ -0,0 +1,20 @@
+[ClosedView_RDpcUHJvamVjdHNcVmlydHVhbC1UcmVlVmlld1xTb3VyY2VcVmlydHVhbFRyZWVzLnBhcw==]
+Module=D:\Projects\Virtual-TreeView\Source\VirtualTrees.pas
+CursorX=42
+CursorY=667
+TopLine=626
+LeftCol=1
+Elisions=
+Bookmarks=
+EditViewName=D:\Projects\Virtual-TreeView\Source\VirtualTrees.pas
+
+[ClosedView_RDpcUHJvamVjdHNcVmlydHVhbC1UcmVlVmlld1xEZW1vc1xNaW5pbWFsXE1haW4ucGFz]
+Module=D:\Projects\Virtual-TreeView\Demos\Minimal\Main.pas
+CursorX=1
+CursorY=1
+TopLine=1
+LeftCol=1
+Elisions=
+Bookmarks=
+EditViewName=
+
diff --git a/Demos/OLE/OLE.dsv b/Demos/OLE/OLE.dsv
new file mode 100644
index 000000000..68f02fe96
--- /dev/null
+++ b/Demos/OLE/OLE.dsv
@@ -0,0 +1,10 @@
+[ClosedView_RDpcUHJvamVjdHNcVmlydHVhbC1UcmVlVmlld1xEZW1vc1xPTEVcTWFpbi5wYXM=]
+Module=D:\Projects\Virtual-TreeView\Demos\OLE\Main.pas
+CursorX=1
+CursorY=1
+TopLine=1
+LeftCol=1
+Elisions=
+Bookmarks=
+EditViewName=
+
diff --git a/Demos/Objects/MVCDemo.dsv b/Demos/Objects/MVCDemo.dsv
new file mode 100644
index 000000000..e1eb2caf7
--- /dev/null
+++ b/Demos/Objects/MVCDemo.dsv
@@ -0,0 +1,10 @@
+[ClosedView_RDpcUHJvamVjdHNcVmlydHVhbC1UcmVlVmlld1xTb3VyY2VcVmlydHVhbFRyZWVzLnBhcw==]
+Module=D:\Projects\Virtual-TreeView\Source\VirtualTrees.pas
+CursorX=42
+CursorY=667
+TopLine=626
+LeftCol=1
+Elisions=
+Bookmarks=
+EditViewName=D:\Projects\Virtual-TreeView\Source\VirtualTrees.pas
+
diff --git a/MAKEFILE b/MAKEFILE
index e10d02941..aba6f01c9 100644
--- a/MAKEFILE
+++ b/MAKEFILE
@@ -3,6 +3,9 @@ EMBARCADERO = $(PROGRAMFILES)\Embarcadero\RAD Studio
STUDIO = $(PROGRAMFILES)\Embarcadero\Studio
BDSCOMMONDIRMAIN = %PUBLIC%\Documents\Embarcadero\Studio
# Default MS Build version
+!IF EXIST("$(PROGRAMFILESX64)\Microsoft Visual Studio\2022\Enterprise\MSBuild\Current\Bin\msbuild.exe")
+BUILDEXE = "$(PROGRAMFILESX64)\Microsoft Visual Studio\2022\Enterprise\MSBuild\Current\Bin\msbuild.exe"
+!ELSE
!IF EXIST("$(PROGRAMFILES)\Microsoft Visual Studio\2019\Enterprise\MSBuild\Current\Bin\msbuild.exe")
BUILDEXE = "$(PROGRAMFILES)\Microsoft Visual Studio\2019\Enterprise\MSBuild\Current\Bin\msbuild.exe"
!ELSE
@@ -12,6 +15,7 @@ BUILDEXE = "$(PROGRAMFILES)\Microsoft Visual Studio\2019\Professional\MSBuild\Cu
BUILDEXE = "$(PROGRAMFILES)\Microsoft Visual Studio\2017\BuildTools\MSBuild\15.0\Bin\msbuild.exe"
!ENDIF
!ENDIF
+!ENDIF
BUILD = $(BUILDEXE) /t:Rebuild
clean:
@@ -50,7 +54,6 @@ _release:
#Download e.g. from: ftp://ftp.info-zip.org/pub/infozip/win32/
ZIP -9 -r .\VirtualTreeView.zip INSTALL.txt Changes.txt Source Design Packages Demos Contributions Help\VirtualTreeview.chm -i *.pas -i *.dpk -i *.groupproj -i *.dproj -i *.cbproj -i *.hlp -i *.rc -i *.res -i *.cfg -i *.dpr -i *.dof -i *.bpr -i *.dfm -i *.cpp -i *.inc -i *.dcr -i *.chm -i *.png -i *.js -i *.txt -i *.bmp -i *.uni
ECHO Source code zip archive "VirtualTreeView.zip" created.
- ECHO !!! Please ensure that the const TVTVersion is correct or remove const!!!
ECHO !!! Please add version number to ZIP file name!!!
ECHO !!! Please create release at: https://github.com/Virtual-TreeView/Virtual-TreeView/releases
ECHO !!! Let JAM web-team upload the file to our server at https://www.jam-software.com/virtual-treeview
diff --git a/Packages/CBuilder 10.X/VirtualTreeView.groupproj b/Packages/CBuilder 10.1/VirtualTreeView.groupproj
similarity index 100%
rename from Packages/CBuilder 10.X/VirtualTreeView.groupproj
rename to Packages/CBuilder 10.1/VirtualTreeView.groupproj
diff --git a/Packages/CBuilder 10.X/VirtualTreesCD.cbproj b/Packages/CBuilder 10.1/VirtualTreesCD.cbproj
similarity index 88%
rename from Packages/CBuilder 10.X/VirtualTreesCD.cbproj
rename to Packages/CBuilder 10.1/VirtualTreesCD.cbproj
index 02f94c868..7a9a8af02 100644
--- a/Packages/CBuilder 10.X/VirtualTreesCD.cbproj
+++ b/Packages/CBuilder 10.1/VirtualTreesCD.cbproj
@@ -4,7 +4,7 @@
VirtualTreesCD.cpp
18.4
Release
- None
+ VCL
True
Win32
1
@@ -51,7 +51,7 @@
$(BDSCOMMONDIR)\hpp\$(Platform)\
VirtualTreesCD
true
- ..\..\source;$(DCC_UnitSearchPath)
+ ..\..\Source;$(DCC_UnitSearchPath)
4108
System;Xml;Data;Datasnap;Web;Soap;Vcl;$(DCC_Namespace)
true
@@ -67,7 +67,7 @@
All
true
..\..\Source\;..\..\Design\;$(BDS)\include;$(BDS)\include\windows;$(BDS)\include\windows\rtl;$(BDS)\include\windows\vcl;$(BDS)\include\windows\crtl;$(BDS)\include\windows\sdk;$(IncludePath)
- ..\..\Design\;$(BDS)\lib;$(BDS)\lib\obj;$(BDS)\lib\psdk;..\..\source;$(ILINK_LibraryPath)
+ ..\..\Design\;$(BDS)\lib;$(BDS)\lib\$(Platform)\$(Config);$(BDS)\lib\$(Platform)\release\psdk;..\..\Source;$(ILINK_LibraryPath)
false
true
true
@@ -85,19 +85,16 @@
Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;$(DCC_Namespace)
- Debug\;$(IncludePath)
false
true
false
true
false
- Debug
None
DEBUG
true
true
true
- $(BDS)\lib\debug;$(ILINK_LibraryPath)
true
Full
true
@@ -106,9 +103,6 @@
_DEBUG;$(Defines)
- Release\;$(IncludePath)
- Release
- $(BDS)\lib\release;$(ILINK_LibraryPath)
None
@@ -228,12 +222,7 @@
True
False
-
- Embarcadero C++Builder Office 2000 Servers Package
- Embarcadero C++Builder Office XP Servers Package
- Microsoft Office 2000 Sample Automation Server Wrapper Components
- Microsoft Office XP Sample Automation Server Wrapper Components
-
+
False
True
diff --git a/Packages/CBuilder 10.X/VirtualTreesCD.cpp b/Packages/CBuilder 10.1/VirtualTreesCD.cpp
similarity index 100%
rename from Packages/CBuilder 10.X/VirtualTreesCD.cpp
rename to Packages/CBuilder 10.1/VirtualTreesCD.cpp
diff --git a/Packages/CBuilder 10.1/VirtualTreesCR.cbproj b/Packages/CBuilder 10.1/VirtualTreesCR.cbproj
new file mode 100644
index 000000000..6fb981d57
--- /dev/null
+++ b/Packages/CBuilder 10.1/VirtualTreesCR.cbproj
@@ -0,0 +1,295 @@
+
+
+ {FE6B0D67-74B6-4E30-8AED-CB2B3E77A51F}
+ VirtualTreesCR.cpp
+ 18.4
+ Release
+ VCL
+ True
+ Win64
+ 3
+ Package
+
+
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Cfg_1
+ true
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Cfg_2
+ true
+ true
+
+
+ true
+ Cfg_2
+ true
+ true
+
+
+ 240
+ true
+ VirtualTree CBuilder runtime package
+ $(BDSCOMMONDIR)\hpp\$(Platform)
+ VirtualTreesCR
+ Shell32.dll;uxtheme.dll;$(ILINK_DelayLoadDll)
+ $(BDS)\lib;$(BDS)\lib\$(Platform);$(BDS)\lib\$(Platform)\$(Config);$(DCC_UnitSearchPath)
+ true
+ 4108
+ System;Xml;Data;Datasnap;Web;Soap;Vcl;Vcl.Imaging;Vcl.Touch;Vcl.Samples;Vcl.Shell;$(DCC_Namespace)
+ true
+ CompanyName=;FileDescription=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=;ProductVersion=1.0.0.0;Comments=
+ 6
+ bpl
+ CppPackage
+ true
+ true
+ true
+ All
+ true
+ ..\..\Source\;$(BDS)\include;$(BDS)\include\windows;$(BDS)\include\windows\rtl;$(BDS)\include\windows\vcl;$(BDS)\include\windows\crtl;$(BDS)\include\windows\sdk;$(IncludePath)
+ ..\..\Source\;$(BDS)\lib;$(BDS)\lib\$(Platform)\$(Config);$(BDS)\lib\$(Platform)\release\psdk;$(ILINK_LibraryPath)
+ false
+ true
+ true
+ 128
+ .\$(Platform)\$(Config)
+ .\$(Platform)\$(Config)
+
+
+ $(BDS)\Bin\BDS.EXE
+ true
+ $(BDSINCLUDE)\windows\vcl;$(IncludePath)
+ true
+ $(BDS)\bin\default_app.manifest
+ 1033
+ Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace)
+
+
+ $(BDSINCLUDE)\windows\vcl;$(IncludePath)
+ 1033
+ Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;$(DCC_Namespace)
+
+
+ false
+ true
+ false
+ true
+ false
+ None
+ DEBUG
+ true
+ true
+ true
+ true
+ Full
+ true
+
+
+ _DEBUG;$(Defines)
+
+
+ None
+
+
+ 1033
+ NDEBUG;$(Defines)
+
+
+ 1033
+
+
+
+ 9
+ true
+
+
+ 9
+ true
+
+
+ 3
+
+
+ 4
+
+
+ 0
+
+
+ 14
+
+
+ 15
+
+
+ 16
+
+
+ 16
+
+
+ 16
+
+
+ 17
+
+
+ 16
+
+
+ 17
+
+
+ 17
+
+
+ 13
+
+
+ 17
+
+
+ 17
+
+
+ 18
+ true
+
+
+ 18
+ true
+
+
+ Cfg_2
+ Base
+
+
+ Base
+
+
+ Cfg_1
+ Base
+
+
+
+
+ CPlusPlusBuilder.Personality.12
+ CppPackage
+
+
+
+ VirtualTreesCR.cpp
+
+
+ False
+ False
+ 1
+ 0
+ 0
+ 0
+ False
+ False
+ False
+ False
+ False
+ 4108
+ 1252
+
+
+
+
+ 1.0.0.0
+
+
+
+
+
+ 1.0.0.0
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ False
+
+
+
+
+
+
+ False
+
+ False
+
+ True
+ False
+
+
+
+ False
+ True
+ True
+ False
+
+
+
+ True
+ True
+
+
+ 12
+
+
+
diff --git a/Packages/CBuilder 10.X/VirtualTreesCR.cpp b/Packages/CBuilder 10.1/VirtualTreesCR.cpp
similarity index 100%
rename from Packages/CBuilder 10.X/VirtualTreesCR.cpp
rename to Packages/CBuilder 10.1/VirtualTreesCR.cpp
diff --git a/Packages/CBuilder 10.2/VirtualTreeView.groupproj b/Packages/CBuilder 10.2/VirtualTreeView.groupproj
new file mode 100644
index 000000000..1250e4780
--- /dev/null
+++ b/Packages/CBuilder 10.2/VirtualTreeView.groupproj
@@ -0,0 +1,48 @@
+
+
+ {85AC5363-0DD3-4B39-8709-5987A7DA817E}
+
+
+
+
+
+
+
+
+
+
+ Default.Personality.12
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Packages/CBuilder 10.2/VirtualTreesCD.cbproj b/Packages/CBuilder 10.2/VirtualTreesCD.cbproj
new file mode 100644
index 000000000..dbdaf74e5
--- /dev/null
+++ b/Packages/CBuilder 10.2/VirtualTreesCD.cbproj
@@ -0,0 +1,245 @@
+
+
+ {DE1FB54C-6852-4F59-B4A5-7718E6069FE8}
+ VirtualTreesCD.cpp
+ 18.4
+ Release
+ VCL
+ True
+ Win32
+ 1
+ Package
+
+
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Cfg_1
+ true
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Cfg_2
+ true
+ true
+
+
+ 250
+ VirtualTree CBuilder designtime package
+ $(BDSCOMMONDIR)\hpp\$(Platform)\
+ VirtualTreesCD
+ true
+ ..\..\Source;$(DCC_UnitSearchPath)
+ 4108
+ System;Xml;Data;Datasnap;Web;Soap;Vcl;$(DCC_Namespace)
+ true
+ CompanyName=;FileDescription=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=;ProductVersion=1.0.0.0;Comments=
+ 6
+ -LUDesignIDE
+ true
+ bpl
+ CppPackage
+ true
+ true
+ true
+ All
+ true
+ ..\..\Source\;..\..\Design\;$(BDS)\include;$(BDS)\include\windows;$(BDS)\include\windows\rtl;$(BDS)\include\windows\vcl;$(BDS)\include\windows\crtl;$(BDS)\include\windows\sdk;$(IncludePath)
+ ..\..\Design\;$(BDS)\lib;$(BDS)\lib\$(Platform)\$(Config);$(BDS)\lib\$(Platform)\release\psdk;..\..\Source;$(ILINK_LibraryPath)
+ false
+ true
+ true
+ 128
+ None
+ .\$(Platform)\$(Config)
+ true
+ .\$(Platform)\$(Config)
+
+
+ true
+ $(BDS)\bin\default_app.manifest
+ 1033
+ Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace)
+
+
+ 1033
+ Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;$(DCC_Namespace)
+
+
+ false
+ true
+ false
+ true
+ false
+ None
+ DEBUG
+ true
+ true
+ true
+ true
+ Full
+ true
+
+
+ _DEBUG;$(Defines)
+ 1033
+
+
+ None
+
+
+ 1033
+ NDEBUG;$(Defines)
+
+
+
+ 3
+
+
+ 10
+
+
+ 5
+
+
+ 1
+
+
+ 4
+
+
+ 0
+
+
+ 9
+
+
+ Cfg_2
+ Base
+
+
+ Base
+
+
+ Cfg_1
+ Base
+
+
+
+
+ CPlusPlusBuilder.Personality.12
+ CppPackage
+
+
+
+ VirtualTreesCD.cpp
+
+
+ False
+ False
+ 1
+ 0
+ 0
+ 0
+ False
+ False
+ False
+ False
+ False
+ 4108
+ 1252
+
+
+
+
+ 1.0.0.0
+
+
+
+
+
+ 1.0.0.0
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ False
+
+
+
+
+
+
+ False
+
+ False
+
+ True
+ False
+
+
+
+ False
+ True
+ True
+ False
+
+
+
+ True
+ False
+
+
+ 12
+
+
+
diff --git a/Packages/CBuilder 10.2/VirtualTreesCD.cpp b/Packages/CBuilder 10.2/VirtualTreesCD.cpp
new file mode 100644
index 000000000..9b654ce81
--- /dev/null
+++ b/Packages/CBuilder 10.2/VirtualTreesCD.cpp
@@ -0,0 +1,17 @@
+//---------------------------------------------------------------------------
+
+#include
+#pragma hdrstop
+#pragma package(smart_init)
+//---------------------------------------------------------------------------
+
+// Package source.
+//---------------------------------------------------------------------------
+
+
+#pragma argsused
+int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void*)
+{
+ return 1;
+}
+//---------------------------------------------------------------------------
diff --git a/Packages/CBuilder 10.2/VirtualTreesCR.cbproj b/Packages/CBuilder 10.2/VirtualTreesCR.cbproj
new file mode 100644
index 000000000..7f1e3c5cc
--- /dev/null
+++ b/Packages/CBuilder 10.2/VirtualTreesCR.cbproj
@@ -0,0 +1,306 @@
+
+
+ {FE6B0D67-74B6-4E30-8AED-CB2B3E77A51F}
+ VirtualTreesCR.cpp
+ 18.4
+ Release
+ VCL
+ True
+ Win32
+ 3
+ Package
+
+
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Cfg_1
+ true
+ true
+
+
+ true
+ Cfg_1
+ true
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Cfg_2
+ true
+ true
+
+
+ true
+ Cfg_2
+ true
+ true
+
+
+ 250
+ true
+ VirtualTree CBuilder runtime package
+ $(BDSCOMMONDIR)\hpp\$(Platform)
+ VirtualTreesCR
+ Shell32.dll;uxtheme.dll;$(ILINK_DelayLoadDll)
+ $(BDS)\lib;$(BDS)\lib\$(Platform);$(BDS)\lib\$(Platform)\$(Config);$(DCC_UnitSearchPath)
+ true
+ 4108
+ System;Xml;Data;Datasnap;Web;Soap;Vcl;Vcl.Imaging;Vcl.Touch;Vcl.Samples;Vcl.Shell;$(DCC_Namespace)
+ true
+ CompanyName=;FileDescription=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=;ProductVersion=1.0.0.0;Comments=
+ 6
+ bpl
+ CppPackage
+ true
+ true
+ true
+ All
+ true
+ ..\..\Source\;$(BDS)\include;$(BDS)\include\windows;$(BDS)\include\windows\rtl;$(BDS)\include\windows\vcl;$(BDS)\include\windows\crtl;$(BDS)\include\windows\sdk;$(IncludePath)
+ ..\..\Source\;$(BDS)\lib;$(BDS)\lib\$(Platform)\$(Config);$(BDS)\lib\$(Platform)\release\psdk;$(ILINK_LibraryPath)
+ false
+ true
+ true
+ 128
+ None
+ .\$(Platform)\$(Config)
+ true
+ .\$(Platform)\$(Config)
+
+
+ $(BDS)\Bin\BDS.EXE
+ true
+ $(BDSINCLUDE)\windows\vcl;$(IncludePath)
+ $(BDS)\bin\default_app.manifest
+ 1033
+ Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace)
+
+
+ $(BDSINCLUDE)\windows\vcl;$(IncludePath)
+ 1033
+ Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;$(DCC_Namespace)
+
+
+ false
+ true
+ false
+ true
+ false
+ None
+ DEBUG
+ true
+ true
+ true
+ true
+ Full
+ true
+
+
+ _DEBUG;$(Defines)
+ 1033
+
+
+ 1033
+
+
+ None
+
+
+ 1033
+ NDEBUG;$(Defines)
+
+
+ 1033
+
+
+
+ 3
+
+
+ 9
+ true
+
+
+ 9
+ true
+
+
+ 18
+ true
+
+
+ 18
+ true
+
+
+ 4
+
+
+ 0
+
+
+ 14
+
+
+ 15
+
+
+ 16
+
+
+ 16
+
+
+ 16
+
+
+ 17
+
+
+ 16
+
+
+ 17
+
+
+ 17
+
+
+ 13
+
+
+ 17
+
+
+ 17
+
+
+ Cfg_2
+ Base
+
+
+ Base
+
+
+ Cfg_1
+ Base
+
+
+
+
+ CPlusPlusBuilder.Personality.12
+ CppPackage
+
+
+
+ VirtualTreesCR.cpp
+
+
+ False
+ False
+ 1
+ 0
+ 0
+ 0
+ False
+ False
+ False
+ False
+ False
+ 4108
+ 1252
+
+
+
+
+ 1.0.0.0
+
+
+
+
+
+ 1.0.0.0
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ False
+
+
+
+
+
+
+ False
+
+ False
+
+ True
+ False
+
+
+
+ False
+ True
+ True
+ False
+
+
+
+ True
+ True
+
+
+ 12
+
+
+
diff --git a/Packages/CBuilder 10.2/VirtualTreesCR.cpp b/Packages/CBuilder 10.2/VirtualTreesCR.cpp
new file mode 100644
index 000000000..9b654ce81
--- /dev/null
+++ b/Packages/CBuilder 10.2/VirtualTreesCR.cpp
@@ -0,0 +1,17 @@
+//---------------------------------------------------------------------------
+
+#include
+#pragma hdrstop
+#pragma package(smart_init)
+//---------------------------------------------------------------------------
+
+// Package source.
+//---------------------------------------------------------------------------
+
+
+#pragma argsused
+int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void*)
+{
+ return 1;
+}
+//---------------------------------------------------------------------------
diff --git a/Packages/CBuilder 10.3/VirtualTreeView.groupproj b/Packages/CBuilder 10.3/VirtualTreeView.groupproj
new file mode 100644
index 000000000..1250e4780
--- /dev/null
+++ b/Packages/CBuilder 10.3/VirtualTreeView.groupproj
@@ -0,0 +1,48 @@
+
+
+ {85AC5363-0DD3-4B39-8709-5987A7DA817E}
+
+
+
+
+
+
+
+
+
+
+ Default.Personality.12
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Packages/CBuilder 10.3/VirtualTreesCD.cbproj b/Packages/CBuilder 10.3/VirtualTreesCD.cbproj
new file mode 100644
index 000000000..bb04917c5
--- /dev/null
+++ b/Packages/CBuilder 10.3/VirtualTreesCD.cbproj
@@ -0,0 +1,245 @@
+
+
+ {DE1FB54C-6852-4F59-B4A5-7718E6069FE8}
+ VirtualTreesCD.cpp
+ 18.5
+ Release
+ VCL
+ True
+ Win32
+ 1
+ Package
+
+
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Cfg_1
+ true
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Cfg_2
+ true
+ true
+
+
+ 260
+ VirtualTree CBuilder designtime package
+ $(BDSCOMMONDIR)\hpp\$(Platform)\
+ VirtualTreesCD
+ true
+ ..\..\Source;$(DCC_UnitSearchPath)
+ 4108
+ System;Xml;Data;Datasnap;Web;Soap;Vcl;$(DCC_Namespace)
+ true
+ CompanyName=;FileDescription=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=;ProductVersion=1.0.0.0;Comments=
+ 6
+ -LUDesignIDE
+ true
+ bpl
+ CppPackage
+ true
+ true
+ true
+ All
+ true
+ ..\..\Source\;..\..\Design\;$(BDS)\include;$(BDS)\include\windows;$(BDS)\include\windows\rtl;$(BDS)\include\windows\vcl;$(BDS)\include\windows\crtl;$(BDS)\include\windows\sdk;$(IncludePath)
+ ..\..\Design\;$(BDS)\lib;$(BDS)\lib\$(Platform)\$(Config);$(BDS)\lib\$(Platform)\release\psdk;..\..\Source;$(ILINK_LibraryPath)
+ false
+ true
+ true
+ 128
+ None
+ .\$(Platform)\$(Config)
+ true
+ .\$(Platform)\$(Config)
+
+
+ true
+ $(BDS)\bin\default_app.manifest
+ 1033
+ Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace)
+
+
+ 1033
+ Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;$(DCC_Namespace)
+
+
+ false
+ true
+ false
+ true
+ false
+ None
+ DEBUG
+ true
+ true
+ true
+ true
+ Full
+ true
+
+
+ _DEBUG;$(Defines)
+ 1033
+
+
+ None
+
+
+ 1033
+ NDEBUG;$(Defines)
+
+
+
+ 3
+
+
+ 10
+
+
+ 5
+
+
+ 1
+
+
+ 4
+
+
+ 0
+
+
+ 9
+
+
+ Cfg_2
+ Base
+
+
+ Base
+
+
+ Cfg_1
+ Base
+
+
+
+
+ CPlusPlusBuilder.Personality.12
+ CppPackage
+
+
+
+ VirtualTreesCD.cpp
+
+
+ False
+ False
+ 1
+ 0
+ 0
+ 0
+ False
+ False
+ False
+ False
+ False
+ 4108
+ 1252
+
+
+
+
+ 1.0.0.0
+
+
+
+
+
+ 1.0.0.0
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ False
+
+
+
+
+
+
+ False
+
+ False
+
+ True
+ False
+
+
+
+ False
+ True
+ True
+ False
+
+
+
+ True
+ False
+
+
+ 12
+
+
+
diff --git a/Packages/CBuilder 10.3/VirtualTreesCD.cpp b/Packages/CBuilder 10.3/VirtualTreesCD.cpp
new file mode 100644
index 000000000..9b654ce81
--- /dev/null
+++ b/Packages/CBuilder 10.3/VirtualTreesCD.cpp
@@ -0,0 +1,17 @@
+//---------------------------------------------------------------------------
+
+#include
+#pragma hdrstop
+#pragma package(smart_init)
+//---------------------------------------------------------------------------
+
+// Package source.
+//---------------------------------------------------------------------------
+
+
+#pragma argsused
+int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void*)
+{
+ return 1;
+}
+//---------------------------------------------------------------------------
diff --git a/Packages/CBuilder 10.3/VirtualTreesCR.cbproj b/Packages/CBuilder 10.3/VirtualTreesCR.cbproj
new file mode 100644
index 000000000..41ca80796
--- /dev/null
+++ b/Packages/CBuilder 10.3/VirtualTreesCR.cbproj
@@ -0,0 +1,306 @@
+
+
+ {FE6B0D67-74B6-4E30-8AED-CB2B3E77A51F}
+ VirtualTreesCR.cpp
+ 18.5
+ Release
+ VCL
+ True
+ Win32
+ 3
+ Package
+
+
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Cfg_1
+ true
+ true
+
+
+ true
+ Cfg_1
+ true
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Cfg_2
+ true
+ true
+
+
+ true
+ Cfg_2
+ true
+ true
+
+
+ 260
+ true
+ VirtualTree CBuilder runtime package
+ $(BDSCOMMONDIR)\hpp\$(Platform)
+ VirtualTreesCR
+ Shell32.dll;uxtheme.dll;$(ILINK_DelayLoadDll)
+ $(BDS)\lib;$(BDS)\lib\$(Platform);$(BDS)\lib\$(Platform)\$(Config);$(DCC_UnitSearchPath)
+ true
+ 4108
+ System;Xml;Data;Datasnap;Web;Soap;Vcl;Vcl.Imaging;Vcl.Touch;Vcl.Samples;Vcl.Shell;$(DCC_Namespace)
+ true
+ CompanyName=;FileDescription=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=;ProductVersion=1.0.0.0;Comments=
+ 6
+ bpl
+ CppPackage
+ true
+ true
+ true
+ All
+ true
+ ..\..\Source\;$(BDS)\include;$(BDS)\include\windows;$(BDS)\include\windows\rtl;$(BDS)\include\windows\vcl;$(BDS)\include\windows\crtl;$(BDS)\include\windows\sdk;$(IncludePath)
+ ..\..\Source\;$(BDS)\lib;$(BDS)\lib\$(Platform)\$(Config);$(BDS)\lib\$(Platform)\release\psdk;$(ILINK_LibraryPath)
+ false
+ true
+ true
+ 128
+ None
+ .\$(Platform)\$(Config)
+ true
+ .\$(Platform)\$(Config)
+
+
+ $(BDS)\Bin\BDS.EXE
+ true
+ $(BDSINCLUDE)\windows\vcl;$(IncludePath)
+ $(BDS)\bin\default_app.manifest
+ 1033
+ Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace)
+
+
+ $(BDSINCLUDE)\windows\vcl;$(IncludePath)
+ 1033
+ Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;$(DCC_Namespace)
+
+
+ false
+ true
+ false
+ true
+ false
+ None
+ DEBUG
+ true
+ true
+ true
+ true
+ Full
+ true
+
+
+ _DEBUG;$(Defines)
+ 1033
+
+
+ 1033
+
+
+ None
+
+
+ 1033
+ NDEBUG;$(Defines)
+
+
+ 1033
+
+
+
+ 3
+
+
+ 9
+ true
+
+
+ 9
+ true
+
+
+ 18
+ true
+
+
+ 18
+ true
+
+
+ 4
+
+
+ 0
+
+
+ 14
+
+
+ 15
+
+
+ 16
+
+
+ 16
+
+
+ 16
+
+
+ 17
+
+
+ 16
+
+
+ 17
+
+
+ 17
+
+
+ 13
+
+
+ 17
+
+
+ 17
+
+
+ Cfg_2
+ Base
+
+
+ Base
+
+
+ Cfg_1
+ Base
+
+
+
+
+ CPlusPlusBuilder.Personality.12
+ CppPackage
+
+
+
+ VirtualTreesCR.cpp
+
+
+ False
+ False
+ 1
+ 0
+ 0
+ 0
+ False
+ False
+ False
+ False
+ False
+ 4108
+ 1252
+
+
+
+
+ 1.0.0.0
+
+
+
+
+
+ 1.0.0.0
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ False
+
+
+
+
+
+
+ False
+
+ False
+
+ True
+ False
+
+
+
+ False
+ True
+ True
+ False
+
+
+
+ True
+ True
+
+
+ 12
+
+
+
diff --git a/Packages/CBuilder 10.3/VirtualTreesCR.cpp b/Packages/CBuilder 10.3/VirtualTreesCR.cpp
new file mode 100644
index 000000000..9b654ce81
--- /dev/null
+++ b/Packages/CBuilder 10.3/VirtualTreesCR.cpp
@@ -0,0 +1,17 @@
+//---------------------------------------------------------------------------
+
+#include
+#pragma hdrstop
+#pragma package(smart_init)
+//---------------------------------------------------------------------------
+
+// Package source.
+//---------------------------------------------------------------------------
+
+
+#pragma argsused
+int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void*)
+{
+ return 1;
+}
+//---------------------------------------------------------------------------
diff --git a/Packages/CBuilder 10.4/VirtualTreeView.groupproj b/Packages/CBuilder 10.4/VirtualTreeView.groupproj
new file mode 100644
index 000000000..1250e4780
--- /dev/null
+++ b/Packages/CBuilder 10.4/VirtualTreeView.groupproj
@@ -0,0 +1,48 @@
+
+
+ {85AC5363-0DD3-4B39-8709-5987A7DA817E}
+
+
+
+
+
+
+
+
+
+
+ Default.Personality.12
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Packages/CBuilder 10.4/VirtualTreesCD.cbproj b/Packages/CBuilder 10.4/VirtualTreesCD.cbproj
new file mode 100644
index 000000000..49f917699
--- /dev/null
+++ b/Packages/CBuilder 10.4/VirtualTreesCD.cbproj
@@ -0,0 +1,245 @@
+
+
+ {DE1FB54C-6852-4F59-B4A5-7718E6069FE8}
+ VirtualTreesCD.cpp
+ 19.2
+ Release
+ VCL
+ True
+ Win32
+ 1
+ Package
+
+
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Cfg_1
+ true
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Cfg_2
+ true
+ true
+
+
+ 270
+ VirtualTree CBuilder designtime package
+ $(BDSCOMMONDIR)\hpp\$(Platform)\
+ VirtualTreesCD
+ true
+ ..\..\Source;$(DCC_UnitSearchPath)
+ 4108
+ System;Xml;Data;Datasnap;Web;Soap;Vcl;$(DCC_Namespace)
+ true
+ CompanyName=;FileDescription=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=;ProductVersion=1.0.0.0;Comments=
+ 6
+ -LUDesignIDE
+ true
+ bpl
+ CppPackage
+ true
+ true
+ true
+ All
+ true
+ ..\..\Source\;..\..\Design\;$(BDS)\include;$(BDS)\include\windows;$(BDS)\include\windows\rtl;$(BDS)\include\windows\vcl;$(BDS)\include\windows\crtl;$(BDS)\include\windows\sdk;$(IncludePath)
+ ..\..\Design\;$(BDS)\lib;$(BDS)\lib\$(Platform)\$(Config);$(BDS)\lib\$(Platform)\release\psdk;..\..\Source;$(ILINK_LibraryPath)
+ false
+ true
+ true
+ 128
+ None
+ .\$(Platform)\$(Config)
+ true
+ .\$(Platform)\$(Config)
+
+
+ true
+ $(BDS)\bin\default_app.manifest
+ 1033
+ Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace)
+
+
+ 1033
+ Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;$(DCC_Namespace)
+
+
+ false
+ true
+ false
+ true
+ false
+ None
+ DEBUG
+ true
+ true
+ true
+ true
+ Full
+ true
+
+
+ _DEBUG;$(Defines)
+ 1033
+
+
+ None
+
+
+ 1033
+ NDEBUG;$(Defines)
+
+
+
+ 3
+
+
+ 10
+
+
+ 5
+
+
+ 1
+
+
+ 4
+
+
+ 0
+
+
+ 9
+
+
+ Cfg_2
+ Base
+
+
+ Base
+
+
+ Cfg_1
+ Base
+
+
+
+
+ CPlusPlusBuilder.Personality.12
+ CppPackage
+
+
+
+ VirtualTreesCD.cpp
+
+
+ False
+ False
+ 1
+ 0
+ 0
+ 0
+ False
+ False
+ False
+ False
+ False
+ 4108
+ 1252
+
+
+
+
+ 1.0.0.0
+
+
+
+
+
+ 1.0.0.0
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ False
+
+
+
+
+
+
+ False
+
+ False
+
+ True
+ False
+
+
+
+ False
+ True
+ True
+ False
+
+
+
+ True
+ False
+
+
+ 12
+
+
+
diff --git a/Packages/CBuilder 10.4/VirtualTreesCD.cpp b/Packages/CBuilder 10.4/VirtualTreesCD.cpp
new file mode 100644
index 000000000..9b654ce81
--- /dev/null
+++ b/Packages/CBuilder 10.4/VirtualTreesCD.cpp
@@ -0,0 +1,17 @@
+//---------------------------------------------------------------------------
+
+#include
+#pragma hdrstop
+#pragma package(smart_init)
+//---------------------------------------------------------------------------
+
+// Package source.
+//---------------------------------------------------------------------------
+
+
+#pragma argsused
+int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void*)
+{
+ return 1;
+}
+//---------------------------------------------------------------------------
diff --git a/Packages/CBuilder 10.4/VirtualTreesCR.cbproj b/Packages/CBuilder 10.4/VirtualTreesCR.cbproj
new file mode 100644
index 000000000..831025114
--- /dev/null
+++ b/Packages/CBuilder 10.4/VirtualTreesCR.cbproj
@@ -0,0 +1,306 @@
+
+
+ {FE6B0D67-74B6-4E30-8AED-CB2B3E77A51F}
+ VirtualTreesCR.cpp
+ 19.2
+ Release
+ VCL
+ True
+ Win32
+ 3
+ Package
+
+
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Cfg_1
+ true
+ true
+
+
+ true
+ Cfg_1
+ true
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Cfg_2
+ true
+ true
+
+
+ true
+ Cfg_2
+ true
+ true
+
+
+ 270
+ true
+ VirtualTree CBuilder runtime package
+ $(BDSCOMMONDIR)\hpp\$(Platform)
+ VirtualTreesCR
+ Shell32.dll;uxtheme.dll;$(ILINK_DelayLoadDll)
+ $(BDS)\lib;$(BDS)\lib\$(Platform);$(BDS)\lib\$(Platform)\$(Config);$(DCC_UnitSearchPath)
+ true
+ 4108
+ System;Xml;Data;Datasnap;Web;Soap;Vcl;Vcl.Imaging;Vcl.Touch;Vcl.Samples;Vcl.Shell;$(DCC_Namespace)
+ true
+ CompanyName=;FileDescription=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=;ProductVersion=1.0.0.0;Comments=
+ 6
+ bpl
+ CppPackage
+ true
+ true
+ true
+ All
+ true
+ ..\..\Source\;$(BDS)\include;$(BDS)\include\windows;$(BDS)\include\windows\rtl;$(BDS)\include\windows\vcl;$(BDS)\include\windows\crtl;$(BDS)\include\windows\sdk;$(IncludePath)
+ ..\..\Source\;$(BDS)\lib;$(BDS)\lib\$(Platform)\$(Config);$(BDS)\lib\$(Platform)\release\psdk;$(ILINK_LibraryPath)
+ false
+ true
+ true
+ 128
+ None
+ .\$(Platform)\$(Config)
+ true
+ .\$(Platform)\$(Config)
+
+
+ $(BDS)\Bin\BDS.EXE
+ true
+ $(BDSINCLUDE)\windows\vcl;$(IncludePath)
+ $(BDS)\bin\default_app.manifest
+ 1033
+ Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace)
+
+
+ $(BDSINCLUDE)\windows\vcl;$(IncludePath)
+ 1033
+ Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;$(DCC_Namespace)
+
+
+ false
+ true
+ false
+ true
+ false
+ None
+ DEBUG
+ true
+ true
+ true
+ true
+ Full
+ true
+
+
+ _DEBUG;$(Defines)
+ 1033
+
+
+ 1033
+
+
+ None
+
+
+ 1033
+ NDEBUG;$(Defines)
+
+
+ 1033
+
+
+
+ 3
+
+
+ 9
+ true
+
+
+ 9
+ true
+
+
+ 18
+ true
+
+
+ 18
+ true
+
+
+ 4
+
+
+ 0
+
+
+ 14
+
+
+ 15
+
+
+ 16
+
+
+ 16
+
+
+ 16
+
+
+ 17
+
+
+ 16
+
+
+ 17
+
+
+ 17
+
+
+ 13
+
+
+ 17
+
+
+ 17
+
+
+ Cfg_2
+ Base
+
+
+ Base
+
+
+ Cfg_1
+ Base
+
+
+
+
+ CPlusPlusBuilder.Personality.12
+ CppPackage
+
+
+
+ VirtualTreesCR.cpp
+
+
+ False
+ False
+ 1
+ 0
+ 0
+ 0
+ False
+ False
+ False
+ False
+ False
+ 4108
+ 1252
+
+
+
+
+ 1.0.0.0
+
+
+
+
+
+ 1.0.0.0
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ False
+
+
+
+
+
+
+ False
+
+ False
+
+ True
+ False
+
+
+
+ False
+ True
+ True
+ False
+
+
+
+ True
+ True
+
+
+ 12
+
+
+
diff --git a/Packages/CBuilder 10.4/VirtualTreesCR.cpp b/Packages/CBuilder 10.4/VirtualTreesCR.cpp
new file mode 100644
index 000000000..9b654ce81
--- /dev/null
+++ b/Packages/CBuilder 10.4/VirtualTreesCR.cpp
@@ -0,0 +1,17 @@
+//---------------------------------------------------------------------------
+
+#include
+#pragma hdrstop
+#pragma package(smart_init)
+//---------------------------------------------------------------------------
+
+// Package source.
+//---------------------------------------------------------------------------
+
+
+#pragma argsused
+int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void*)
+{
+ return 1;
+}
+//---------------------------------------------------------------------------
diff --git a/Packages/CBuilder 10.X/VirtualTreesCR.cbproj b/Packages/CBuilder 10.X/VirtualTreesCR.cbproj
deleted file mode 100644
index 88d5a9ce2..000000000
--- a/Packages/CBuilder 10.X/VirtualTreesCR.cbproj
+++ /dev/null
@@ -1,814 +0,0 @@
-
-
- {FE6B0D67-74B6-4E30-8AED-CB2B3E77A51F}
- VirtualTreesCR.cpp
- 18.4
- Release
- VCL
- True
- Win64
- 3
- Package
-
-
- true
-
-
- true
- Base
- true
-
-
- true
- Base
- true
-
-
- true
- Base
- true
-
-
- true
- Cfg_1
- true
- true
-
-
- true
- Base
- true
-
-
- true
- Cfg_2
- true
- true
-
-
- true
- Cfg_2
- true
- true
-
-
- 240
- true
- VirtualTree CBuilder runtime package
- $(BDSCOMMONDIR)\hpp\$(Platform)
- VirtualTreesCR
- Shell32.dll;uxtheme.dll;$(ILINK_DelayLoadDll)
- $(BDS)\lib;$(BDS)\lib\$(Platform);$(BDS)\lib\$(Platform)\$(Config);$(DCC_UnitSearchPath)
- true
- 4108
- System;Xml;Data;Datasnap;Web;Soap;Vcl;Vcl.Imaging;Vcl.Touch;Vcl.Samples;Vcl.Shell;$(DCC_Namespace)
- true
- CompanyName=;FileDescription=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=;ProductVersion=1.0.0.0;Comments=
- 6
- bpl
- CppPackage
- true
- true
- true
- All
- true
- ..\..\Source\;$(BDS)\include;$(BDS)\include\windows;$(BDS)\include\windows\rtl;$(BDS)\include\windows\vcl;$(BDS)\include\windows\crtl;$(BDS)\include\windows\sdk;$(IncludePath)
- ..\..\Source\;$(BDS)\lib;$(BDS)\lib\$(platform);$(BDS)\lib\$(Platform)\$(Config);$(ILINK_LibraryPath)
- false
- true
- true
- 128
-
-
- $(BDS)\Bin\BDS.EXE
- true
- $(BDSINCLUDE)\windows\vcl;$(IncludePath)
- C:\Program Files (x86)\Embarcadero\DelphiXE5\lib\win32\release\psdk\;$(ILINK_LibraryPath)
- true
- $(BDS)\bin\default_app.manifest
- 1033
- Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace)
- vclwinx;$(PackageImports)
-
-
- $(BDSINCLUDE)\windows\vcl;$(IncludePath)
- 1033
- Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;$(DCC_Namespace)
- vclwinx;$(PackageImports)
-
-
- Debug\;$(IncludePath)
- false
- true
- false
- true
- false
- Debug
- None
- DEBUG
- true
- true
- true
- $(BDS)\lib\debug;$(ILINK_LibraryPath)
- true
- Full
- true
-
-
- _DEBUG;$(Defines)
-
-
- Release\;$(IncludePath)
- Release
- $(BDS)\lib\release;$(ILINK_LibraryPath)
- None
-
-
- 1033
- NDEBUG;$(Defines)
-
-
- 1033
-
-
-
- 9
- true
-
-
- 9
- true
-
-
- 3
-
-
- 4
-
-
- 0
-
-
- 13
-
-
- 14
-
-
- 15
-
-
- 16
-
-
- 16
-
-
- 16
-
-
- 17
-
-
- 16
-
-
- 17
-
-
- 17
-
-
- 17
-
-
- 17
-
-
- 18
- true
-
-
- 18
- true
-
-
- Cfg_2
- Base
-
-
- Base
-
-
- Cfg_1
- Base
-
-
-
-
- CPlusPlusBuilder.Personality.12
- CppPackage
-
-
-
- VirtualTreesCR.cpp
-
-
- False
- False
- 1
- 0
- 0
- 0
- False
- False
- False
- False
- False
- 4108
- 1252
-
-
-
-
- 1.0.0.0
-
-
-
-
-
- 1.0.0.0
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- False
-
-
-
-
-
-
- False
-
- False
-
- True
- False
-
-
- Embarcadero C++Builder Office 2000 Servers Package
- Embarcadero C++Builder Office XP Servers Package
- Microsoft Office 2000 Sample Automation Server Wrapper Components
- Microsoft Office XP Sample Automation Server Wrapper Components
-
-
- False
- True
- True
- False
-
-
-
- True
- True
-
-
-
-
- true
-
-
-
-
- true
-
-
-
-
- true
-
-
-
-
- true
-
-
-
-
- true
-
-
-
-
- true
-
-
-
-
- true
-
-
-
-
- true
-
-
-
-
- true
-
-
-
-
- true
-
-
-
-
- true
-
-
-
-
- VirtualTreesCR.bpl
- true
-
-
-
-
- true
-
-
-
-
- true
-
-
-
-
- true
-
-
-
-
- true
-
-
-
-
- true
-
-
-
-
- true
-
-
-
-
- true
-
-
-
-
- true
-
-
-
-
- true
-
-
-
-
- true
-
-
-
-
- true
-
-
-
-
- true
-
-
-
-
- true
-
-
-
-
- true
-
-
-
-
- true
-
-
-
-
- true
-
-
-
-
- true
-
-
-
-
- 1
-
-
- Contents\MacOS
- 0
-
-
-
-
- classes
- 1
-
-
-
-
- library\lib\armeabi-v7a
- 1
-
-
-
-
- library\lib\armeabi
- 1
-
-
-
-
- library\lib\mips
- 1
-
-
-
-
-
- library\lib\armeabi-v7a
- 1
-
-
-
-
- res\drawable
- 1
-
-
-
-
- res\values
- 1
-
-
-
-
- res\drawable
- 1
-
-
-
-
- res\drawable-xxhdpi
- 1
-
-
-
-
- res\drawable-ldpi
- 1
-
-
-
-
- res\drawable-mdpi
- 1
-
-
-
-
- res\drawable-hdpi
- 1
-
-
-
-
- res\drawable-xhdpi
- 1
-
-
-
-
- res\drawable-small
- 1
-
-
-
-
- res\drawable-normal
- 1
-
-
-
-
- res\drawable-large
- 1
-
-
-
-
- res\drawable-xlarge
- 1
-
-
-
-
- 1
-
-
- 1
-
-
- 0
-
-
-
-
- 1
- .framework
-
-
- 0
-
-
-
-
- 1
- .dylib
-
-
- 0
- .dll;.bpl
-
-
-
-
- 1
- .dylib
-
-
- 1
- .dylib
-
-
- 1
- .dylib
-
-
- 1
- .dylib
-
-
- 0
- .bpl
-
-
-
-
- 0
-
-
- 0
-
-
- 0
-
-
- 0
-
-
- 0
-
-
- 0
-
-
-
-
- 1
-
-
- 1
-
-
- 1
-
-
-
-
- 1
-
-
- 1
-
-
- 1
-
-
-
-
- 1
-
-
- 1
-
-
- 1
-
-
-
-
- 1
-
-
- 1
-
-
- 1
-
-
-
-
- 1
-
-
- 1
-
-
- 1
-
-
-
-
- 1
-
-
- 1
-
-
- 1
-
-
-
-
- 1
-
-
- 1
-
-
- 1
-
-
-
-
- 1
-
-
-
-
- ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF
- 1
-
-
- ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF
- 1
-
-
-
-
-
-
-
- 1
-
-
- 1
-
-
- 1
-
-
-
-
-
-
- Contents\Resources
- 1
-
-
-
-
- library\lib\armeabi-v7a
- 1
-
-
- 1
-
-
- 1
-
-
- 1
-
-
- 1
-
-
- 1
-
-
- 0
-
-
-
-
- 1
-
-
- 1
-
-
-
-
- Assets
- 1
-
-
- Assets
- 1
-
-
-
-
- Assets
- 1
-
-
- Assets
- 1
-
-
-
-
-
-
-
-
-
-
-
-
- 12
-
-
-
-
diff --git a/Packages/CBuilder 10/VirtualTreesCD.cbproj b/Packages/CBuilder 10/VirtualTreesCD.cbproj
index d05aaceff..c4a8b5eb7 100644
--- a/Packages/CBuilder 10/VirtualTreesCD.cbproj
+++ b/Packages/CBuilder 10/VirtualTreesCD.cbproj
@@ -4,7 +4,7 @@
VirtualTreesCD.cpp
18.0
Release
- None
+ VCL
True
Win32
1
@@ -13,21 +13,6 @@
true
-
- true
- Base
- true
-
-
- true
- Base
- true
-
-
- true
- Base
- true
-
true
Base
@@ -43,18 +28,6 @@
Base
true
-
- true
- Cfg_1
- true
- true
-
-
- true
- Cfg_1
- true
- true
-
true
Cfg_1
@@ -66,18 +39,6 @@
Base
true
-
- true
- Cfg_2
- true
- true
-
-
- true
- Cfg_2
- true
- true
-
true
Cfg_2
@@ -87,10 +48,10 @@
230
VirtualTree CBuilder designtime package
- ..\..\source\hpp\$(Platform)\$(Config)
+ $(BDSCOMMONDIR)\hpp\$(Platform)\
VirtualTreesCD
true
- ..\..\source;$(DCC_UnitSearchPath)
+ ..\..\Source;$(DCC_UnitSearchPath)
4108
System;Xml;Data;Datasnap;Web;Soap;Vcl;$(DCC_Namespace)
true
@@ -106,29 +67,11 @@
All
true
..\..\Source\;..\..\Design\;$(BDS)\include;$(BDS)\include\windows;$(BDS)\include\windows\rtl;$(BDS)\include\windows\vcl;$(BDS)\include\windows\crtl;$(BDS)\include\windows\sdk;$(IncludePath)
- ..\RAD Studio XE5\;..\..\Design\;$(BDS)\lib;$(BDS)\lib\obj;$(BDS)\lib\psdk;..\..\source;$(ILINK_LibraryPath)
+ ..\..\Design\;$(BDS)\lib;$(BDS)\lib\$(Platform)\$(Config);$(BDS)\lib\$(Platform)\release\psdk;..\..\Source;$(ILINK_LibraryPath)
false
true
true
-
- android-support-v4.dex.jar;apk-expansion.dex.jar;cloud-messaging.dex.jar;fmx.dex.jar;google-analytics-v2.dex.jar;google-play-billing.dex.jar;google-play-licensing.dex.jar;google-play-services.dex.jar
- Debug
- package=com.embarcadero.$(MSBuildProjectName);label=$(MSBuildProjectName);versionCode=1;versionName=1.0.0;persistent=False;restoreAnyVersion=False;installLocation=preferExternal;largeHeap=False;theme=TitleBar;hardwareAccelerated=true
- false
-
-
- $(MSBuildProjectName)
- iPhoneAndiPad
- CFBundleName=$(MSBuildProjectName);CFBundleDevelopmentRegion=en;CFBundleDisplayName=$(MSBuildProjectName);CFBundleIdentifier=$(MSBuildProjectName);CFBundleInfoDictionaryVersion=7.1;CFBundleVersion=1.0.0.0;CFBundlePackageType=APPL;CFBundleSignature=????;LSRequiresIPhoneOS=true;CFBundleAllowMixedLocalizations=YES;CFBundleExecutable=$(MSBuildProjectName);UIDeviceFamily=iPhone & iPad;CFBundleResourceSpecification=ResourceRules.plist;NSLocationAlwaysUsageDescription=The reason for accessing the location information of the user;NSLocationWhenInUseUsageDescription=The reason for accessing the location information of the user
- Debug
-
-
- $(MSBuildProjectName)
- iPhoneAndiPad
- CFBundleName=$(MSBuildProjectName);CFBundleDevelopmentRegion=en;CFBundleDisplayName=$(MSBuildProjectName);CFBundleIdentifier=$(MSBuildProjectName);CFBundleInfoDictionaryVersion=7.1;CFBundleVersion=1.0.0.0;CFBundlePackageType=APPL;CFBundleSignature=????;LSRequiresIPhoneOS=true;CFBundleAllowMixedLocalizations=YES;CFBundleExecutable=$(MSBuildProjectName);UIDeviceFamily=iPhone & iPad;CFBundleResourceSpecification=ResourceRules.plist;NSLocationAlwaysUsageDescription=The reason for accessing the location information of the user;NSLocationWhenInUseUsageDescription=The reason for accessing the location information of the user
- Debug
-
true
true
@@ -141,44 +84,26 @@
Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;$(DCC_Namespace)
- Debug\;$(IncludePath)
false
true
false
true
false
- Debug
None
DEBUG
true
true
true
- $(BDS)\lib\debug;$(ILINK_LibraryPath)
true
Full
true
-
- true
-
-
- true
-
_DEBUG;$(Defines)
- Release\;$(IncludePath)
- Release
- $(BDS)\lib\release;$(ILINK_LibraryPath)
None
-
- true
-
-
- true
-
1033
NDEBUG;$(Defines)
@@ -199,21 +124,12 @@
4
-
- 7
-
-
- 8
-
0
9
-
- 6
-
Cfg_2
Base
@@ -305,12 +221,7 @@
True
False
-
- Embarcadero C++Builder-Package für Office 2000-Server
- Embarcadero C++Builder-Package für Office XP-Server
- Microsoft Office 2000 Beispiele für gekapselte Komponenten für Automatisierungsserver
- Microsoft Office XP Beispiele für gekapselte Komponenten für Automation Server
-
+
False
True
@@ -319,10 +230,6 @@
- False
- False
- False
- False
True
False
diff --git a/Packages/CBuilder 10/VirtualTreesCD.cpp b/Packages/CBuilder 10/VirtualTreesCD.cpp
index d4fbb1610..37aacb559 100644
--- a/Packages/CBuilder 10/VirtualTreesCD.cpp
+++ b/Packages/CBuilder 10/VirtualTreesCD.cpp
@@ -1,7 +1,7 @@
//---------------------------------------------------------------------------
-#pragma hdrstop
#include
+#pragma hdrstop
#pragma package(smart_init)
//---------------------------------------------------------------------------
diff --git a/Packages/CBuilder 10/VirtualTreesCR.cbproj b/Packages/CBuilder 10/VirtualTreesCR.cbproj
index 44d09d510..e63865818 100644
--- a/Packages/CBuilder 10/VirtualTreesCR.cbproj
+++ b/Packages/CBuilder 10/VirtualTreesCR.cbproj
@@ -13,21 +13,6 @@
true
-
- true
- Base
- true
-
-
- true
- Base
- true
-
-
- true
- Base
- true
-
true
Base
@@ -43,18 +28,6 @@
Base
true
-
- true
- Cfg_1
- true
- true
-
-
- true
- Cfg_1
- true
- true
-
true
Cfg_1
@@ -66,18 +39,6 @@
Base
true
-
- true
- Cfg_2
- true
- true
-
-
- true
- Cfg_2
- true
- true
-
true
Cfg_2
@@ -112,33 +73,16 @@
All
true
..\..\Source\;$(BDS)\include;$(BDS)\include\windows;$(BDS)\include\windows\rtl;$(BDS)\include\windows\vcl;$(BDS)\include\windows\crtl;$(BDS)\include\windows\sdk;$(IncludePath)
- ..\..\Source\;$(BDS)\lib;$(BDS)\lib\$(platform);$(BDS)\lib\$(Platform)\$(Config);$(ILINK_LibraryPath)
+ ..\..\Source\;$(BDS)\lib;$(BDS)\lib\$(Platform)\$(Config);$(BDS)\lib\$(Platform)\release\psdk;$(ILINK_LibraryPath)
false
true
true
-
-
- android-support-v4.dex.jar;apk-expansion.dex.jar;cloud-messaging.dex.jar;fmx.dex.jar;google-analytics-v2.dex.jar;google-play-billing.dex.jar;google-play-licensing.dex.jar;google-play-services.dex.jar
- Debug
- package=com.embarcadero.$(MSBuildProjectName);label=$(MSBuildProjectName);versionCode=1;versionName=1.0.0;persistent=False;restoreAnyVersion=False;installLocation=preferExternal;largeHeap=False;theme=TitleBar;hardwareAccelerated=true
- false
-
-
- $(MSBuildProjectName)
- iPhoneAndiPad
- CFBundleName=$(MSBuildProjectName);CFBundleDevelopmentRegion=en;CFBundleDisplayName=$(MSBuildProjectName);CFBundleIdentifier=$(MSBuildProjectName);CFBundleInfoDictionaryVersion=7.1;CFBundleVersion=1.0.0.0;CFBundlePackageType=APPL;CFBundleSignature=????;LSRequiresIPhoneOS=true;CFBundleAllowMixedLocalizations=YES;CFBundleExecutable=$(MSBuildProjectName);UIDeviceFamily=iPhone & iPad;CFBundleResourceSpecification=ResourceRules.plist;NSLocationAlwaysUsageDescription=The reason for accessing the location information of the user;NSLocationWhenInUseUsageDescription=The reason for accessing the location information of the user
- Debug
-
-
- $(MSBuildProjectName)
- iPhoneAndiPad
- CFBundleName=$(MSBuildProjectName);CFBundleDevelopmentRegion=en;CFBundleDisplayName=$(MSBuildProjectName);CFBundleIdentifier=$(MSBuildProjectName);CFBundleInfoDictionaryVersion=7.1;CFBundleVersion=1.0.0.0;CFBundlePackageType=APPL;CFBundleSignature=????;LSRequiresIPhoneOS=true;CFBundleAllowMixedLocalizations=YES;CFBundleExecutable=$(MSBuildProjectName);UIDeviceFamily=iPhone & iPad;CFBundleResourceSpecification=ResourceRules.plist;NSLocationAlwaysUsageDescription=The reason for accessing the location information of the user;NSLocationWhenInUseUsageDescription=The reason for accessing the location information of the user
- Debug
+ .\$(Platform)\$(Config)
+ .\$(Platform)\$(Config)
true
$(BDSINCLUDE)\windows\vcl;$(IncludePath)
- C:\Program Files (x86)\Embarcadero\DelphiXE5\lib\win32\release\psdk\;$(ILINK_LibraryPath)
true
$(BDS)\bin\default_app.manifest
1033
@@ -150,44 +94,26 @@
Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;$(DCC_Namespace)
- Debug\;$(IncludePath)
false
true
false
true
false
- Debug
None
DEBUG
true
true
true
- $(BDS)\lib\debug;$(ILINK_LibraryPath)
true
Full
true
-
- true
-
-
- true
-
_DEBUG;$(Defines)
- Release\;$(IncludePath)
- Release
- $(BDS)\lib\release;$(ILINK_LibraryPath)
None
-
- true
-
-
- true
-
1033
NDEBUG;$(Defines)
@@ -206,18 +132,15 @@
4
-
- 7
-
-
- 8
-
0
-
- 6
-
+
+ 14
+
+
+ 15
+
16
@@ -230,27 +153,24 @@
17
+
+ 16
+
17
17
+
+ 13
+
17
17
-
- 17
-
-
- 17
-
-
- 17
-
Cfg_2
Base
@@ -342,12 +262,7 @@
True
False
-
- Embarcadero C++Builder-Package für Office 2000-Server
- Embarcadero C++Builder-Package für Office XP-Server
- Microsoft Office 2000 Beispiele für gekapselte Komponenten für Automatisierungsserver
- Microsoft Office XP Beispiele für gekapselte Komponenten für Automation Server
-
+
False
True
@@ -356,435 +271,11 @@
- False
- False
- False
- False
True
True
-
-
-
- true
-
-
-
-
- true
-
-
-
-
- true
-
-
-
-
- true
-
-
-
-
- true
-
-
-
-
- true
-
-
-
-
- true
-
-
-
-
- true
-
-
-
-
- true
-
-
-
-
- true
-
-
-
-
- true
-
-
-
-
- VirtualTreesCR.bpl
- true
-
-
-
-
- true
-
-
-
-
- true
-
-
-
-
- true
-
-
-
-
- true
-
-
-
-
- true
-
-
-
-
-
- Contents\Resources
- 1
-
-
-
-
- classes
- 1
-
-
-
-
- res\drawable-xxhdpi
- 1
-
-
-
-
- Contents\MacOS
- 0
-
-
- 1
-
-
-
-
- library\lib\mips
- 1
-
-
-
-
- 1
-
-
- 1
-
-
- 1
-
-
-
-
- 0
-
-
- 1
-
-
- 1
-
-
- 1
-
-
- library\lib\armeabi-v7a
- 1
-
-
- 1
-
-
-
-
- 0
-
-
- 1
- .framework
-
-
-
-
- 1
-
-
- 1
-
-
- 1
-
-
-
-
- library\lib\x86
- 1
-
-
-
-
- ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF
- 1
-
-
- ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF
- 1
-
-
-
-
- 1
-
-
- 1
-
-
- 1
-
-
-
-
- 1
-
-
- 1
-
-
- 1
-
-
-
-
-
- library\lib\armeabi
- 1
-
-
-
-
- 0
-
-
- 1
-
-
- 1
-
-
-
-
- 1
-
-
- 1
-
-
- 1
-
-
-
-
- res\drawable-normal
- 1
-
-
-
-
- res\drawable-xhdpi
- 1
-
-
-
-
- res\drawable-large
- 1
-
-
-
-
- 1
-
-
- 1
-
-
- 1
-
-
-
-
-
- library\lib\armeabi-v7a
- 1
-
-
-
-
- res\drawable-hdpi
- 1
-
-
-
-
-
-
- 1
-
-
- 1
-
-
- 1
-
-
-
-
- res\values
- 1
-
-
-
-
- res\drawable-small
- 1
-
-
-
-
- res\drawable
- 1
-
-
-
-
- 1
-
-
- 1
-
-
- 1
-
-
-
-
- 1
-
-
-
-
- res\drawable
- 1
-
-
-
-
- 0
-
-
- 0
-
-
- 0
-
-
- 0
-
-
- 0
-
-
- 0
-
-
-
-
- library\lib\armeabi-v7a
- 1
-
-
-
-
- 0
- .bpl
-
-
- 1
- .dylib
-
-
- 1
- .dylib
-
-
- 1
- .dylib
-
-
- 1
- .dylib
-
-
-
-
- res\drawable-mdpi
- 1
-
-
-
-
- res\drawable-xlarge
- 1
-
-
-
-
- res\drawable-ldpi
- 1
-
-
-
-
- 0
- .dll;.bpl
-
-
- 1
- .dylib
-
-
-
-
-
-
-
-
-
-
12
-
diff --git a/Packages/CBuilder 10/VirtualTreesCR.cpp b/Packages/CBuilder 10/VirtualTreesCR.cpp
index d4fbb1610..37aacb559 100644
--- a/Packages/CBuilder 10/VirtualTreesCR.cpp
+++ b/Packages/CBuilder 10/VirtualTreesCR.cpp
@@ -1,7 +1,7 @@
//---------------------------------------------------------------------------
-#pragma hdrstop
#include
+#pragma hdrstop
#pragma package(smart_init)
//---------------------------------------------------------------------------
diff --git a/Packages/CBuilder 11/VirtualTreeView.groupproj b/Packages/CBuilder 11/VirtualTreeView.groupproj
new file mode 100644
index 000000000..1250e4780
--- /dev/null
+++ b/Packages/CBuilder 11/VirtualTreeView.groupproj
@@ -0,0 +1,48 @@
+
+
+ {85AC5363-0DD3-4B39-8709-5987A7DA817E}
+
+
+
+
+
+
+
+
+
+
+ Default.Personality.12
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Packages/CBuilder 11/VirtualTreesCD.cbproj b/Packages/CBuilder 11/VirtualTreesCD.cbproj
new file mode 100644
index 000000000..5977ac6c0
--- /dev/null
+++ b/Packages/CBuilder 11/VirtualTreesCD.cbproj
@@ -0,0 +1,245 @@
+
+
+ {DE1FB54C-6852-4F59-B4A5-7718E6069FE8}
+ VirtualTreesCD.cpp
+ 19.5
+ Release
+ VCL
+ True
+ Win32
+ 1
+ Package
+
+
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Cfg_1
+ true
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Cfg_2
+ true
+ true
+
+
+ 280
+ VirtualTree CBuilder designtime package
+ $(BDSCOMMONDIR)\hpp\$(Platform)\
+ VirtualTreesCD
+ true
+ ..\..\Source;$(DCC_UnitSearchPath)
+ 4108
+ System;Xml;Data;Datasnap;Web;Soap;Vcl;$(DCC_Namespace)
+ true
+ CompanyName=;FileDescription=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=;ProductVersion=1.0.0.0;Comments=
+ 6
+ -LUDesignIDE
+ true
+ bpl
+ CppPackage
+ true
+ true
+ true
+ All
+ true
+ ..\..\Source\;..\..\Design\;$(BDS)\include;$(BDS)\include\windows;$(BDS)\include\windows\rtl;$(BDS)\include\windows\vcl;$(BDS)\include\windows\crtl;$(BDS)\include\windows\sdk;$(IncludePath)
+ ..\..\Design\;$(BDS)\lib;$(BDS)\lib\$(Platform)\$(Config);$(BDS)\lib\$(Platform)\release\psdk;..\..\Source;$(ILINK_LibraryPath)
+ false
+ true
+ true
+ 128
+ None
+ .\$(Platform)\$(Config)
+ true
+ .\$(Platform)\$(Config)
+
+
+ true
+ $(BDS)\bin\default_app.manifest
+ 1033
+ Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace)
+
+
+ 1033
+ Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;$(DCC_Namespace)
+
+
+ false
+ true
+ false
+ true
+ false
+ None
+ DEBUG
+ true
+ true
+ true
+ true
+ Full
+ true
+
+
+ _DEBUG;$(Defines)
+ 1033
+
+
+ None
+
+
+ 1033
+ NDEBUG;$(Defines)
+
+
+
+ 3
+
+
+ 10
+
+
+ 5
+
+
+ 1
+
+
+ 4
+
+
+ 0
+
+
+ 9
+
+
+ Base
+
+
+ Cfg_1
+ Base
+
+
+ Cfg_2
+ Base
+
+
+
+
+ CPlusPlusBuilder.Personality.12
+ CppPackage
+
+
+
+ VirtualTreesCD.cpp
+
+
+ False
+ False
+ 1
+ 0
+ 0
+ 0
+ False
+ False
+ False
+ False
+ False
+ 4108
+ 1252
+
+
+
+
+ 1.0.0.0
+
+
+
+
+
+ 1.0.0.0
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ False
+
+
+
+
+
+
+ False
+
+ False
+
+ True
+ False
+
+
+
+ False
+ True
+ True
+ False
+
+
+
+ True
+ False
+
+
+ 12
+
+
+
diff --git a/Packages/CBuilder 11/VirtualTreesCD.cpp b/Packages/CBuilder 11/VirtualTreesCD.cpp
new file mode 100644
index 000000000..9b654ce81
--- /dev/null
+++ b/Packages/CBuilder 11/VirtualTreesCD.cpp
@@ -0,0 +1,17 @@
+//---------------------------------------------------------------------------
+
+#include
+#pragma hdrstop
+#pragma package(smart_init)
+//---------------------------------------------------------------------------
+
+// Package source.
+//---------------------------------------------------------------------------
+
+
+#pragma argsused
+int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void*)
+{
+ return 1;
+}
+//---------------------------------------------------------------------------
diff --git a/Packages/CBuilder 11/VirtualTreesCR.cbproj b/Packages/CBuilder 11/VirtualTreesCR.cbproj
new file mode 100644
index 000000000..9e0bea586
--- /dev/null
+++ b/Packages/CBuilder 11/VirtualTreesCR.cbproj
@@ -0,0 +1,306 @@
+
+
+ {FE6B0D67-74B6-4E30-8AED-CB2B3E77A51F}
+ VirtualTreesCR.cpp
+ 19.5
+ Release
+ VCL
+ True
+ Win32
+ 3
+ Package
+
+
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Cfg_1
+ true
+ true
+
+
+ true
+ Cfg_1
+ true
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Cfg_2
+ true
+ true
+
+
+ true
+ Cfg_2
+ true
+ true
+
+
+ 280
+ true
+ VirtualTree CBuilder runtime package
+ $(BDSCOMMONDIR)\hpp\$(Platform)
+ VirtualTreesCR
+ Shell32.dll;uxtheme.dll;$(ILINK_DelayLoadDll)
+ $(BDS)\lib;$(BDS)\lib\$(Platform);$(BDS)\lib\$(Platform)\$(Config);$(DCC_UnitSearchPath)
+ true
+ 4108
+ System;Xml;Data;Datasnap;Web;Soap;Vcl;Vcl.Imaging;Vcl.Touch;Vcl.Samples;Vcl.Shell;$(DCC_Namespace)
+ true
+ CompanyName=;FileDescription=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=;ProductVersion=1.0.0.0;Comments=
+ 6
+ bpl
+ CppPackage
+ true
+ true
+ true
+ All
+ true
+ ..\..\Source\;$(BDS)\include;$(BDS)\include\windows;$(BDS)\include\windows\rtl;$(BDS)\include\windows\vcl;$(BDS)\include\windows\crtl;$(BDS)\include\windows\sdk;$(IncludePath)
+ ..\..\Source\;$(BDS)\lib;$(BDS)\lib\$(Platform)\$(Config);$(BDS)\lib\$(Platform)\release\psdk;$(ILINK_LibraryPath)
+ false
+ true
+ true
+ 128
+ None
+ .\$(Platform)\$(Config)
+ true
+ .\$(Platform)\$(Config)
+
+
+ $(BDS)\Bin\BDS.EXE
+ true
+ $(BDSINCLUDE)\windows\vcl;$(IncludePath)
+ $(BDS)\bin\default_app.manifest
+ 1033
+ Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace)
+
+
+ $(BDSINCLUDE)\windows\vcl;$(IncludePath)
+ 1033
+ Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;$(DCC_Namespace)
+
+
+ false
+ true
+ false
+ true
+ false
+ None
+ DEBUG
+ true
+ true
+ true
+ true
+ Full
+ true
+
+
+ _DEBUG;$(Defines)
+ 1033
+
+
+ 1033
+
+
+ None
+
+
+ 1033
+ NDEBUG;$(Defines)
+
+
+ 1033
+
+
+
+ 3
+
+
+ 9
+ true
+
+
+ 9
+ true
+
+
+ 18
+ true
+
+
+ 18
+ true
+
+
+ 4
+
+
+ 0
+
+
+ 14
+
+
+ 15
+
+
+ 16
+
+
+ 16
+
+
+ 16
+
+
+ 17
+
+
+ 16
+
+
+ 17
+
+
+ 17
+
+
+ 13
+
+
+ 17
+
+
+ 17
+
+
+ Base
+
+
+ Cfg_1
+ Base
+
+
+ Cfg_2
+ Base
+
+
+
+
+ CPlusPlusBuilder.Personality.12
+ CppPackage
+
+
+
+ VirtualTreesCR.cpp
+
+
+ False
+ False
+ 1
+ 0
+ 0
+ 0
+ False
+ False
+ False
+ False
+ False
+ 4108
+ 1252
+
+
+
+
+ 1.0.0.0
+
+
+
+
+
+ 1.0.0.0
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ False
+
+
+
+
+
+
+ False
+
+ False
+
+ True
+ False
+
+
+
+ False
+ True
+ True
+ False
+
+
+
+ True
+ True
+
+
+ 12
+
+
+
diff --git a/Packages/CBuilder 11/VirtualTreesCR.cpp b/Packages/CBuilder 11/VirtualTreesCR.cpp
new file mode 100644
index 000000000..9b654ce81
--- /dev/null
+++ b/Packages/CBuilder 11/VirtualTreesCR.cpp
@@ -0,0 +1,17 @@
+//---------------------------------------------------------------------------
+
+#include
+#pragma hdrstop
+#pragma package(smart_init)
+//---------------------------------------------------------------------------
+
+// Package source.
+//---------------------------------------------------------------------------
+
+
+#pragma argsused
+int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void*)
+{
+ return 1;
+}
+//---------------------------------------------------------------------------
diff --git a/Packages/CBuilder XE5/VirtualTreesCD.cbproj b/Packages/CBuilder XE5/VirtualTreesCD.cbproj
index 5968e74ba..abe0aaf46 100644
--- a/Packages/CBuilder XE5/VirtualTreesCD.cbproj
+++ b/Packages/CBuilder XE5/VirtualTreesCD.cbproj
@@ -13,11 +13,6 @@
true
-
- true
- Base
- true
-
true
Base
@@ -51,11 +46,12 @@
true
+ 190
VirtualTree CBuilder designtime package
- ..\..\source
+ $(BDSCOMMONDIR)\hpp\$(Platform)\
VirtualTreesCD
true
- ..\..\source;$(DCC_UnitSearchPath)
+ ..\..\Source;$(DCC_UnitSearchPath)
4108
System;Xml;Data;Datasnap;Web;Soap;Vcl;Vcl.Imaging;Vcl.Touch;Vcl.Samples;Vcl.Shell;$(DCC_Namespace)
true
@@ -70,43 +66,33 @@
true
All
true
- ..\..\..\..\EMBT\VirtualTree\Design\;..\..\..\..\SourceForge\VirtualTree\Packages\CBuilder XE7\;..\..\Source\;..\RAD Studio XE5\;..\..\Design\;..\..\Common\;$(CG_BOOST_ROOT)\boost\tr1\tr1;$(BDS)\include;$(BDS)\include\windows;$(BDS)\include\windows\rtl;$(BDS)\include\windows\vcl;$(BDS)\include\windows\crtl;$(BDS)\include\windows\sdk;$(CG_BOOST_ROOT);$(IncludePath)
- ..\..\..\..\EMBT\VirtualTree\Design\;..\..\..\..\SourceForge\VirtualTree\Packages\CBuilder XE7\;..\RAD Studio XE5\;..\..\Design\;$(BDS)\lib;$(BDS)\lib\obj;$(BDS)\lib\psdk;..\..\source;$(ILINK_LibraryPath)
+ ..\..\Source\;..\..\Design\;$(BDS)\include;$(BDS)\include\windows;$(BDS)\include\windows\rtl;$(BDS)\include\windows\vcl;$(BDS)\include\windows\crtl;$(BDS)\include\windows\sdk;$(IncludePath)
+ ..\..\Design\;$(BDS)\lib;$(BDS)\lib\$(Platform)\$(Config);$(BDS)\lib\$(Platform)\release\psdk;..\..\Source;$(ILINK_LibraryPath)
false
true
true
-
- Debug
- package=com.embarcadero.$(MSBuildProjectName);label=$(MSBuildProjectName);versionCode=1;versionName=1.0.0;persistent=False;restoreAnyVersion=False;installLocation=preferExternal;largeHeap=False;theme=TitleBar;hardwareAccelerated=true
- false
-
- $(BDSINCLUDE)\windows\vcl;$(IncludePath)
true
$(BDS)\bin\default_app.manifest
1033
Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace)
- $(BDSINCLUDE)\windows\vcl;$(IncludePath)
1033
Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;$(DCC_Namespace)
- Debug\;$(IncludePath)
false
true
false
true
false
- Debug
None
DEBUG
true
true
true
- $(BDS)\lib\debug;$(ILINK_LibraryPath)
true
Full
true
@@ -115,9 +101,6 @@
_DEBUG;$(Defines)
- Release\;$(IncludePath)
- Release
- $(BDS)\lib\release;$(ILINK_LibraryPath)
None
@@ -140,24 +123,12 @@
4
-
- 7
-
-
- 10
-
-
- 8
-
0
9
-
- 6
-
Cfg_2
Base
@@ -249,12 +220,7 @@
True
False
-
- Embarcadero C++Builder-Package für Office 2000-Server
- Embarcadero C++Builder-Package für Office XP-Server
- Microsoft Office 2000 Beispiele für gekapselte Komponenten für Automatisierungsserver
- Microsoft Office XP Beispiele für gekapselte Komponenten für Automation Server
-
+
False
True
@@ -263,357 +229,11 @@
- False
- False
- False
True
False
-
-
-
- true
-
-
-
-
- true
-
-
- true
-
-
-
-
- true
-
-
-
-
- VirtualTreesCD.bpl
- true
-
-
-
-
- true
-
-
-
-
- true
-
-
-
-
- true
-
-
-
-
- true
-
-
-
-
- true
-
-
-
-
- true
-
-
-
-
- 1
- .dylib
-
-
- 0
- .bpl
-
-
- 1
- .dylib
-
-
- 1
- .dylib
-
-
-
-
- 1
- .dylib
-
-
- 0
- .dll;.bpl
-
-
-
-
- 1
-
-
- 1
-
-
-
-
-
- ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF
- 1
-
-
-
-
- res\drawable-normal
- 1
-
-
-
-
- library\lib\x86
- 1
-
-
-
-
- 1
-
-
- 1
-
-
-
-
-
- library\lib\armeabi-v7a
- 1
-
-
-
-
- 1
-
-
- 1
-
-
-
-
- res\drawable-xlarge
- 1
-
-
-
-
- res\drawable-xhdpi
- 1
-
-
-
-
- 1
-
-
- 1
-
-
-
-
- res\drawable-xxhdpi
- 1
-
-
-
-
- library\lib\mips
- 1
-
-
-
-
- res\drawable
- 1
-
-
-
-
- 1
-
-
- 1
-
-
- 0
-
-
-
-
- 1
- .framework
-
-
- 0
-
-
-
-
- res\drawable-small
- 1
-
-
-
-
-
- 1
-
-
- Contents\MacOS
- 0
-
-
-
-
- classes
- 1
-
-
-
-
-
- 1
-
-
- 1
-
-
-
-
- res\drawable
- 1
-
-
-
-
- Contents\Resources
- 1
-
-
-
-
-
- 1
-
-
- 1
-
-
-
-
- 1
-
-
- library\lib\armeabi-v7a
- 1
-
-
- 0
-
-
- 1
-
-
- 1
-
-
-
-
- library\lib\armeabi
- 1
-
-
-
-
- res\drawable-large
- 1
-
-
-
-
- 0
-
-
- 0
-
-
- 0
-
-
- 0
-
-
- 0
-
-
-
-
- 1
-
-
- 1
-
-
-
-
- res\drawable-ldpi
- 1
-
-
-
-
- res\values
- 1
-
-
-
-
- 1
-
-
- 1
-
-
-
-
- res\drawable-mdpi
- 1
-
-
-
-
- res\drawable-hdpi
- 1
-
-
-
-
- 1
-
-
-
-
-
-
-
-
-
12
-
diff --git a/Packages/CBuilder XE5/VirtualTreesCR.cbproj b/Packages/CBuilder XE5/VirtualTreesCR.cbproj
index 40983eb57..617c28d6c 100644
--- a/Packages/CBuilder XE5/VirtualTreesCR.cbproj
+++ b/Packages/CBuilder XE5/VirtualTreesCR.cbproj
@@ -52,9 +52,10 @@
true
+ 190
true
VirtualTree CBuilder runtime package
- ..\..\source
+ $(BDSCOMMONDIR)\hpp\$(Platform)
VirtualTreesCR
Shell32.dll;$(ILINK_DelayLoadDll)
$(BDS)\lib;$(BDS)\lib\$(Platform);$(BDS)\lib\$(Platform)\$(Config);$(DCC_UnitSearchPath)
@@ -71,15 +72,16 @@
true
All
true
- $(CG_BOOST_ROOT);$(CG_BOOST_ROOT)\boost\tr1\tr1;..\..\Source\;$(BDS)\include;$(BDS)\include\windows;$(BDS)\include\windows\rtl;$(BDS)\include\windows\vcl;$(BDS)\include\windows\crtl;$(BDS)\include\windows\sdk;$(IncludePath)
- ..\..\Source\;$(BDS)\lib;$(BDS)\lib\$(platform);$(BDS)\lib\$(Platform)\$(Config);$(ILINK_LibraryPath)
+ ..\..\Source\;$(BDS)\include;$(BDS)\include\windows;$(BDS)\include\windows\rtl;$(BDS)\include\windows\vcl;$(BDS)\include\windows\crtl;$(BDS)\include\windows\sdk;$(IncludePath)
+ ..\..\Source\;$(BDS)\lib;$(BDS)\lib\$(Platform)\$(Config);$(BDS)\lib\$(Platform)\release\psdk;$(ILINK_LibraryPath)
false
true
true
+ .\$(Platform)\$(Config)
+ .\$(Platform)\$(Config)
$(BDSINCLUDE)\windows\vcl;$(IncludePath)
- C:\Program Files (x86)\Embarcadero\DelphiXE5\lib\win32\release\psdk\;$(ILINK_LibraryPath)
true
$(BDS)\bin\default_app.manifest
1033
@@ -91,19 +93,16 @@
Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;$(DCC_Namespace)
- Debug\;$(IncludePath)
false
true
false
true
false
- Debug
None
DEBUG
true
true
true
- $(BDS)\lib\debug;$(ILINK_LibraryPath)
true
Full
true
@@ -112,9 +111,6 @@
_DEBUG;$(Defines)
- Release\;$(IncludePath)
- Release
- $(BDS)\lib\release;$(ILINK_LibraryPath)
None
@@ -125,7 +121,7 @@
1033
-
+
17
true
@@ -135,18 +131,15 @@
4
-
- 7
-
-
- 8
-
0
-
- 6
-
+
+ 8
+
+
+ 9
+
15
@@ -159,27 +152,24 @@
16
+
+ 17
+
9
12
+
+ 13
+
13
14
-
- 8
-
-
- 9
-
-
- 17
-
Cfg_2
Base
@@ -271,13 +261,7 @@
True
False
-
- Embarcadero C++Builder-Package für Office 2000-Server
- Embarcadero C++Builder-Package für Office XP-Server
- Microsoft Office 2000 Beispiele für gekapselte Komponenten für Automatisierungsserver
- Microsoft Office XP Beispiele für gekapselte Komponenten für Automation Server
- Datei C:\Program Files (x86)\Raize\CS5\Bin\CodeSiteExpressPkg_Design210.bpl nicht gefunden
-
+
False
True
@@ -286,331 +270,11 @@
- False
- False
True
True
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- VirtualTreesCR.bpl
-
-
-
-
-
-
-
- 1
- .dylib
-
-
- 0
- .bpl
-
-
- 1
- .dylib
-
-
- 1
- .dylib
-
-
-
-
- 1
- .dylib
-
-
- 0
- .dll;.bpl
-
-
-
-
- 1
-
-
- 1
-
-
-
-
-
- ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF
- 1
-
-
-
-
- res\drawable-normal
- 1
-
-
-
-
- library\lib\x86
- 1
-
-
-
-
- 1
-
-
- 1
-
-
-
-
-
- library\lib\armeabi-v7a
- 1
-
-
-
-
- 1
-
-
- 1
-
-
-
-
- res\drawable-xlarge
- 1
-
-
-
-
- res\drawable-xhdpi
- 1
-
-
-
-
- 1
-
-
- 1
-
-
-
-
- res\drawable-xxhdpi
- 1
-
-
-
-
- library\lib\mips
- 1
-
-
-
-
- res\drawable
- 1
-
-
-
-
- 1
-
-
- 1
-
-
- 0
-
-
-
-
- 1
- .framework
-
-
- 0
-
-
-
-
- res\drawable-small
- 1
-
-
-
-
-
- 1
-
-
- Contents\MacOS
- 0
-
-
-
-
- classes
- 1
-
-
-
-
-
- 1
-
-
- 1
-
-
-
-
- res\drawable
- 1
-
-
-
-
- Contents\Resources
- 1
-
-
-
-
-
- 1
-
-
- 1
-
-
-
-
- 1
-
-
- library\lib\armeabi-v7a
- 1
-
-
- 0
-
-
- 1
-
-
- 1
-
-
-
-
- library\lib\armeabi
- 1
-
-
-
-
- res\drawable-large
- 1
-
-
-
-
- 0
-
-
- 0
-
-
- 0
-
-
- 0
-
-
- 0
-
-
-
-
- 1
-
-
- 1
-
-
-
-
- res\drawable-ldpi
- 1
-
-
-
-
- res\values
- 1
-
-
-
-
- 1
-
-
- 1
-
-
-
-
- res\drawable-mdpi
- 1
-
-
-
-
- res\drawable-hdpi
- 1
-
-
-
-
- 1
-
-
-
-
-
-
-
-
-
12
-
diff --git a/Packages/CBuilder XE6/VirtualTreeView.groupproj b/Packages/CBuilder XE6/VirtualTreeView.groupproj
new file mode 100644
index 000000000..b7a78ae36
--- /dev/null
+++ b/Packages/CBuilder XE6/VirtualTreeView.groupproj
@@ -0,0 +1,48 @@
+
+
+ {90943296-FDFA-4C80-A99D-237F570C4F54}
+
+
+
+
+
+
+ VirtualTreesCR.cbproj
+
+
+
+ Default.Personality.12
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Packages/CBuilder XE6/VirtualTreesCD.cbproj b/Packages/CBuilder XE6/VirtualTreesCD.cbproj
new file mode 100644
index 000000000..5d0c47450
--- /dev/null
+++ b/Packages/CBuilder XE6/VirtualTreesCD.cbproj
@@ -0,0 +1,239 @@
+
+
+ {DE1FB54C-6852-4F59-B4A5-7718E6069FE8}
+ VirtualTreesCD.cpp
+ 15.4
+ Release
+ VCL
+ True
+ Win32
+ 1
+ Package
+
+
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Cfg_1
+ true
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Cfg_2
+ true
+ true
+
+
+ 200
+ VirtualTree CBuilder designtime package
+ $(BDSCOMMONDIR)\hpp\$(Platform)\
+ VirtualTreesCD
+ true
+ ..\..\Source;$(DCC_UnitSearchPath)
+ 4108
+ System;Xml;Data;Datasnap;Web;Soap;Vcl;Vcl.Imaging;Vcl.Touch;Vcl.Samples;Vcl.Shell;$(DCC_Namespace)
+ true
+ CompanyName=;FileDescription=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=;ProductVersion=1.0.0.0;Comments=
+ 6
+ -LUDesignIDE
+ true
+ bpl
+ CppPackage
+ true
+ true
+ true
+ All
+ true
+ ..\..\Source\;..\..\Design\;$(BDS)\include;$(BDS)\include\windows;$(BDS)\include\windows\rtl;$(BDS)\include\windows\vcl;$(BDS)\include\windows\crtl;$(BDS)\include\windows\sdk;$(IncludePath)
+ ..\..\Design\;$(BDS)\lib;$(BDS)\lib\$(Platform)\$(Config);$(BDS)\lib\$(Platform)\release\psdk;..\..\Source;$(ILINK_LibraryPath)
+ false
+ true
+ true
+
+
+ true
+ $(BDS)\bin\default_app.manifest
+ 1033
+ Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace)
+
+
+ 1033
+ Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;$(DCC_Namespace)
+
+
+ false
+ true
+ false
+ true
+ false
+ None
+ DEBUG
+ true
+ true
+ true
+ true
+ Full
+ true
+
+
+ _DEBUG;$(Defines)
+
+
+ None
+
+
+ 1033
+ NDEBUG;$(Defines)
+
+
+
+ 9
+
+
+ 10
+
+
+ 5
+
+
+ 1
+
+
+ 4
+
+
+ 0
+
+
+ 9
+
+
+ Cfg_2
+ Base
+
+
+ Base
+
+
+ Cfg_1
+ Base
+
+
+
+
+ CPlusPlusBuilder.Personality.12
+ CppPackage
+
+
+
+ VirtualTreesCD.cpp
+
+
+ False
+ False
+ 1
+ 0
+ 0
+ 0
+ False
+ False
+ False
+ False
+ False
+ 4108
+ 1252
+
+
+
+
+ 1.0.0.0
+
+
+
+
+
+ 1.0.0.0
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ False
+
+
+
+
+
+
+ False
+
+ False
+
+ True
+ False
+
+
+
+ False
+ True
+ True
+ False
+
+
+
+ True
+ False
+
+
+ 12
+
+
+
diff --git a/Packages/CBuilder XE6/VirtualTreesCD.cpp b/Packages/CBuilder XE6/VirtualTreesCD.cpp
new file mode 100644
index 000000000..9b654ce81
--- /dev/null
+++ b/Packages/CBuilder XE6/VirtualTreesCD.cpp
@@ -0,0 +1,17 @@
+//---------------------------------------------------------------------------
+
+#include
+#pragma hdrstop
+#pragma package(smart_init)
+//---------------------------------------------------------------------------
+
+// Package source.
+//---------------------------------------------------------------------------
+
+
+#pragma argsused
+int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void*)
+{
+ return 1;
+}
+//---------------------------------------------------------------------------
diff --git a/Packages/CBuilder XE6/VirtualTreesCR.cbproj b/Packages/CBuilder XE6/VirtualTreesCR.cbproj
new file mode 100644
index 000000000..4927f88c3
--- /dev/null
+++ b/Packages/CBuilder XE6/VirtualTreesCR.cbproj
@@ -0,0 +1,280 @@
+
+
+ {FE6B0D67-74B6-4E30-8AED-CB2B3E77A51F}
+ VirtualTreesCR.cpp
+ 15.4
+ Release
+ VCL
+ True
+ Win32
+ 3
+ Package
+
+
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Cfg_1
+ true
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Cfg_2
+ true
+ true
+
+
+ true
+ Cfg_2
+ true
+ true
+
+
+ 200
+ true
+ VirtualTree CBuilder runtime package
+ $(BDSCOMMONDIR)\hpp\$(Platform)
+ VirtualTreesCR
+ Shell32.dll;$(ILINK_DelayLoadDll)
+ $(BDS)\lib;$(BDS)\lib\$(Platform);$(BDS)\lib\$(Platform)\$(Config);$(DCC_UnitSearchPath)
+ true
+ 4108
+ System;Xml;Data;Datasnap;Web;Soap;Vcl;Vcl.Imaging;Vcl.Touch;Vcl.Samples;Vcl.Shell;$(DCC_Namespace)
+ true
+ CompanyName=;FileDescription=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=;ProductVersion=1.0.0.0;Comments=
+ 6
+ bpl
+ CppPackage
+ true
+ true
+ true
+ All
+ true
+ ..\..\Source\;$(BDS)\include;$(BDS)\include\windows;$(BDS)\include\windows\rtl;$(BDS)\include\windows\vcl;$(BDS)\include\windows\crtl;$(BDS)\include\windows\sdk;$(IncludePath)
+ ..\..\Source\;$(BDS)\lib;$(BDS)\lib\$(Platform)\$(Config);$(BDS)\lib\$(Platform)\release\psdk;$(ILINK_LibraryPath)
+ false
+ true
+ true
+ .\$(Platform)\$(Config)
+ .\$(Platform)\$(Config)
+
+
+ $(BDSINCLUDE)\windows\vcl;$(IncludePath)
+ true
+ $(BDS)\bin\default_app.manifest
+ 1033
+ Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace)
+
+
+ $(BDSINCLUDE)\windows\vcl;$(IncludePath)
+ 1033
+ Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;$(DCC_Namespace)
+
+
+ false
+ true
+ false
+ true
+ false
+ None
+ DEBUG
+ true
+ true
+ true
+ true
+ Full
+ true
+
+
+ _DEBUG;$(Defines)
+
+
+ None
+
+
+ 1033
+ NDEBUG;$(Defines)
+
+
+ 1033
+
+
+
+ 17
+ true
+
+
+ 1
+
+
+ 4
+
+
+ 0
+
+
+ 8
+
+
+ 9
+
+
+ 15
+
+
+ 10
+
+
+ 11
+
+
+ 16
+
+
+ 17
+
+
+ 9
+
+
+ 12
+
+
+ 13
+
+
+ 13
+
+
+ 14
+
+
+ Cfg_2
+ Base
+
+
+ Base
+
+
+ Cfg_1
+ Base
+
+
+
+
+ CPlusPlusBuilder.Personality.12
+ CppPackage
+
+
+
+ VirtualTreesCR.cpp
+
+
+ False
+ False
+ 1
+ 0
+ 0
+ 0
+ False
+ False
+ False
+ False
+ False
+ 4108
+ 1252
+
+
+
+
+ 1.0.0.0
+
+
+
+
+
+ 1.0.0.0
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ False
+
+
+
+
+
+
+ False
+
+ False
+
+ True
+ False
+
+
+
+ False
+ True
+ True
+ False
+
+
+
+ True
+ True
+
+
+ 12
+
+
+
diff --git a/Packages/CBuilder XE6/VirtualTreesCR.cpp b/Packages/CBuilder XE6/VirtualTreesCR.cpp
new file mode 100644
index 000000000..9b654ce81
--- /dev/null
+++ b/Packages/CBuilder XE6/VirtualTreesCR.cpp
@@ -0,0 +1,17 @@
+//---------------------------------------------------------------------------
+
+#include
+#pragma hdrstop
+#pragma package(smart_init)
+//---------------------------------------------------------------------------
+
+// Package source.
+//---------------------------------------------------------------------------
+
+
+#pragma argsused
+int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void*)
+{
+ return 1;
+}
+//---------------------------------------------------------------------------
diff --git a/Packages/CBuilder XE7/VirtualTreesCD.cbproj b/Packages/CBuilder XE7/VirtualTreesCD.cbproj
index a022c44ff..2499563f1 100644
--- a/Packages/CBuilder XE7/VirtualTreesCD.cbproj
+++ b/Packages/CBuilder XE7/VirtualTreesCD.cbproj
@@ -46,11 +46,12 @@
true
+ 210
VirtualTree CBuilder designtime package
- ..\..\Source
+ $(BDSCOMMONDIR)\hpp\$(Platform)\
VirtualTreesCD
true
- ..\..\source;$(DCC_UnitSearchPath)
+ ..\..\Source;$(DCC_UnitSearchPath)
4108
System;Xml;Data;Datasnap;Web;Soap;Vcl;Vcl.Imaging;Vcl.Touch;Vcl.Samples;Vcl.Shell;$(DCC_Namespace)
true
@@ -66,14 +67,12 @@
All
true
..\..\Source\;..\..\Design\;$(BDS)\include;$(BDS)\include\windows;$(BDS)\include\windows\rtl;$(BDS)\include\windows\vcl;$(BDS)\include\windows\crtl;$(BDS)\include\windows\sdk;$(IncludePath)
- ..\..\Source\;..\RAD Studio XE5\;..\..\Design\;$(BDS)\lib;$(BDS)\lib\obj;$(BDS)\lib\psdk;..\..\source;$(ILINK_LibraryPath)
+ ..\..\Design\;$(BDS)\lib;$(BDS)\lib\$(Platform)\$(Config);$(BDS)\lib\$(Platform)\release\psdk;..\..\Source;$(ILINK_LibraryPath)
false
true
true
- C:\Program Files (x86)\Embarcadero\Studio\16.0\lib\win32\release\psdk\;$(ILINK_LibraryPath)
- $(BDSINCLUDE)\windows\vcl;$(IncludePath)
true
true
$(BDS)\bin\default_app.manifest
@@ -81,7 +80,6 @@
Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace)
- $(BDSINCLUDE)\windows\vcl;$(IncludePath)
1033
Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;$(DCC_Namespace)
@@ -91,19 +89,16 @@
true
true
off
- Debug\;$(IncludePath)
false
true
false
true
false
- Debug
None
DEBUG
true
true
true
- $(BDS)\lib\debug;$(ILINK_LibraryPath)
true
Full
true
@@ -119,9 +114,6 @@
_DEBUG;$(Defines)
- Release\;$(IncludePath)
- Release
- $(BDS)\lib\release;$(ILINK_LibraryPath)
None
@@ -129,7 +121,7 @@
NDEBUG;$(Defines)
-
+
16
true
@@ -148,39 +140,9 @@
0
-
- 5
-
-
- 6
-
-
- 7
-
-
- 8
-
-
- 10
-
-
- 11
-
-
- 12
-
-
- 13
-
-
- 14
-
-
- 15
-
-
- 16
-
+
+ 9
+
Cfg_2
Base
@@ -272,12 +234,7 @@
True
False
-
- Microsoft Office 2000 Sample Automation Server Wrapper Components
- Microsoft Office XP Sample Automation Server Wrapper Components
- Embarcadero C++Builder Office 2000 Servers Package
- Embarcadero C++Builder Office XP Servers Package
-
+
False
True
@@ -289,381 +246,8 @@
True
False
-
-
-
- true
-
-
-
-
- true
-
-
-
-
- true
-
-
-
-
- true
-
-
-
-
- true
-
-
-
-
- true
-
-
-
-
- true
-
-
-
-
- true
-
-
-
-
- true
-
-
-
-
- true
-
-
-
-
- true
-
-
-
-
- true
-
-
-
-
- VirtualTreesCD.tds
- true
-
-
-
-
- true
-
-
-
-
- VirtualTreesCD.bpl
- true
-
-
-
-
- true
-
-
-
-
- 1
- .dylib
-
-
- 0
- .bpl
-
-
- 1
- .dylib
-
-
- 1
- .dylib
-
-
-
-
- 1
- .dylib
-
-
- 0
- .dll;.bpl
-
-
-
-
- 1
-
-
- 1
-
-
-
-
-
- ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF
- 1
-
-
-
-
- res\drawable-normal
- 1
-
-
-
-
- library\lib\x86
- 1
-
-
-
-
- 1
-
-
- 1
-
-
-
-
-
- library\lib\armeabi-v7a
- 1
-
-
-
-
- 1
-
-
- 1
-
-
-
-
- res\drawable-xlarge
- 1
-
-
-
-
- res\drawable-xhdpi
- 1
-
-
-
-
- 1
-
-
- 1
-
-
-
-
- res\drawable-xxhdpi
- 1
-
-
-
-
- library\lib\mips
- 1
-
-
-
-
- res\drawable
- 1
-
-
-
-
- 1
-
-
- 1
-
-
- 0
-
-
-
-
- 1
- .framework
-
-
- 0
-
-
-
-
- res\drawable-small
- 1
-
-
-
-
-
- 1
-
-
- Contents\MacOS
- 0
-
-
-
-
- classes
- 1
-
-
-
-
-
- 1
-
-
- 1
-
-
-
-
- res\drawable
- 1
-
-
-
-
- Contents\Resources
- 1
-
-
-
-
-
- 1
-
-
- 1
-
-
-
-
- 1
-
-
- library\lib\armeabi-v7a
- 1
-
-
- 0
-
-
- 1
-
-
- 1
-
-
-
-
- library\lib\armeabi
- 1
-
-
-
-
- res\drawable-large
- 1
-
-
-
-
- 0
-
-
- 0
-
-
- 0
-
-
- 0
-
-
- 0
-
-
-
-
- 1
-
-
- 1
-
-
-
-
- res\drawable-ldpi
- 1
-
-
-
-
- res\values
- 1
-
-
-
-
- 1
-
-
- 1
-
-
-
-
- res\drawable-mdpi
- 1
-
-
-
-
- res\drawable-hdpi
- 1
-
-
-
-
- 1
-
-
-
-
-
-
-
-
-
-
-
12
-
diff --git a/Packages/CBuilder XE7/VirtualTreesCR.cbproj b/Packages/CBuilder XE7/VirtualTreesCR.cbproj
index 10a0ae752..e5dae0462 100644
--- a/Packages/CBuilder XE7/VirtualTreesCR.cbproj
+++ b/Packages/CBuilder XE7/VirtualTreesCR.cbproj
@@ -58,9 +58,10 @@
true
+ 210
true
VirtualTree CBuilder runtime package
- ..\..\Source
+ $(BDSCOMMONDIR)\hpp\$(Platform)
VirtualTreesCR
Shell32.dll;$(ILINK_DelayLoadDll)
$(BDS)\lib;$(BDS)\lib\$(Platform);$(BDS)\lib\$(Platform)\$(Config);$(DCC_UnitSearchPath)
@@ -78,23 +79,23 @@
All
true
..\..\Source\;$(BDS)\include;$(BDS)\include\windows;$(BDS)\include\windows\rtl;$(BDS)\include\windows\vcl;$(BDS)\include\windows\crtl;$(BDS)\include\windows\sdk;$(IncludePath)
- ..\..\Source\;$(BDS)\lib;$(BDS)\lib\$(platform);$(BDS)\lib\$(Platform)\$(Config);$(ILINK_LibraryPath)
+ ..\..\Source\;$(BDS)\lib;$(BDS)\lib\$(Platform)\$(Config);$(BDS)\lib\$(Platform)\release\psdk;$(ILINK_LibraryPath)
false
true
true
+ .\$(Platform)\$(Config)
+ .\$(Platform)\$(Config)
$(BDS)\Bin\BDS.EXE
true
$(BDSINCLUDE)\windows\vcl;$(IncludePath)
- C:\Program Files (x86)\Embarcadero\DelphiXE5\lib\win32\release\psdk\;$(ILINK_LibraryPath)
true
$(BDS)\bin\default_app.manifest
1033
Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace)
- ..\..\Source
$(BDSINCLUDE)\windows\vcl;$(IncludePath)
1033
Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;$(DCC_Namespace)
@@ -105,19 +106,16 @@
true
true
off
- Debug\;$(IncludePath)
false
true
false
true
false
- Debug
None
DEBUG
true
true
true
- $(BDS)\lib\debug;$(ILINK_LibraryPath)
true
Full
true
@@ -126,7 +124,6 @@
true
true
true
- ..\..\Source
off
1033
true
@@ -136,10 +133,6 @@
1033
- ..\..\Source
- Release\;$(IncludePath)
- Release
- $(BDS)\lib\release;$(ILINK_LibraryPath)
None
@@ -150,7 +143,7 @@
1033
-
+
9
true
@@ -160,18 +153,15 @@
4
-
- 7
-
-
- 8
-
0
-
- 6
-
+
+ 14
+
+
+ 15
+
16
@@ -184,27 +174,24 @@
17
+
+ 16
+
17
17
+
+ 13
+
17
17
-
- 17
-
-
- 17
-
-
- 17
-
Cfg_2
Base
@@ -296,10 +283,7 @@
True
False
-
- (untitled)
- (untitled)
-
+
False
True
@@ -311,391 +295,8 @@
True
True
-
-
-
- true
-
-
-
-
- true
-
-
-
-
- true
-
-
-
-
- true
-
-
-
-
- VirtualTreesCR.bpl
- true
-
-
-
-
- true
-
-
-
-
- true
-
-
-
-
- true
-
-
-
-
- true
-
-
-
-
- true
-
-
-
-
- true
-
-
-
-
- true
-
-
-
-
- true
-
-
-
-
- true
-
-
-
-
- true
-
-
-
-
- true
-
-
-
-
- true
-
-
-
-
- res\drawable-normal
- 1
-
-
-
-
-
- 1
-
-
- 1
-
-
-
-
- ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF
- 1
-
-
-
-
- 1
- .dylib
-
-
- 0
- .bpl
-
-
- 1
- .dylib
-
-
- 1
- .dylib
-
-
-
-
- library\lib\mips
- 1
-
-
-
-
- library\lib\x86
- 1
-
-
-
-
- library\lib\armeabi-v7a
- 1
-
-
-
-
-
- 1
-
-
- 1
-
-
-
-
- 1
-
-
- 1
-
-
-
-
- res\drawable-xlarge
- 1
-
-
-
-
- res\drawable-xhdpi
- 1
-
-
-
-
- res\drawable-xxhdpi
- 1
-
-
-
-
- 1
-
-
- 1
-
-
-
-
- 1
- .dylib
-
-
- 0
- .dll;.bpl
-
-
-
-
- res\drawable
- 1
-
-
-
-
- 1
- .framework
-
-
- 0
-
-
-
-
- 1
-
-
- 1
-
-
- 0
-
-
-
-
- res\drawable-small
- 1
-
-
-
-
-
- 1
-
-
- Contents\MacOS
- 0
-
-
-
-
- classes
- 1
-
-
-
-
-
- 1
-
-
- 1
-
-
-
-
- library\lib\armeabi-v7a
- 1
-
-
-
-
- res\drawable
- 1
-
-
-
-
-
- Contents\Resources
- 1
-
-
-
-
- 1
-
-
- 1
-
-
-
-
- 1
-
-
- library\lib\armeabi-v7a
- 1
-
-
- 0
-
-
- 1
-
-
- 1
-
-
-
-
- library\lib\armeabi
- 1
-
-
-
-
- res\drawable-large
- 1
-
-
-
-
- 1
-
-
- 1
-
-
-
-
- 0
-
-
- 0
-
-
- 0
-
-
- 0
-
-
- 0
-
-
-
-
- res\values
- 1
-
-
-
-
- res\drawable-ldpi
- 1
-
-
-
-
- 1
-
-
- 1
-
-
-
-
- res\drawable-hdpi
- 1
-
-
-
-
- res\drawable-mdpi
- 1
-
-
-
-
- 1
-
-
-
-
-
-
-
-
-
-
-
12
-
diff --git a/Packages/CBuilder XE8/VirtualTreesCD.cbproj b/Packages/CBuilder XE8/VirtualTreesCD.cbproj
index d6a132138..b79a3427d 100644
--- a/Packages/CBuilder XE8/VirtualTreesCD.cbproj
+++ b/Packages/CBuilder XE8/VirtualTreesCD.cbproj
@@ -46,11 +46,12 @@
true
+ 220
VirtualTree CBuilder designtime package
- ..\..\Source
+ $(BDSCOMMONDIR)\hpp\$(Platform)\
VirtualTreesCD
true
- ..\..\source;$(DCC_UnitSearchPath)
+ ..\..\Source;$(DCC_UnitSearchPath)
4108
System;Xml;Data;Datasnap;Web;Soap;Vcl;Vcl.Imaging;Vcl.Touch;Vcl.Samples;Vcl.Shell;$(DCC_Namespace)
true
@@ -66,14 +67,12 @@
All
true
..\..\Source\;..\..\Design\;$(BDS)\include;$(BDS)\include\windows;$(BDS)\include\windows\rtl;$(BDS)\include\windows\vcl;$(BDS)\include\windows\crtl;$(BDS)\include\windows\sdk;$(IncludePath)
- ..\..\Source\;..\RAD Studio XE5\;..\..\Design\;$(BDS)\lib;$(BDS)\lib\obj;$(BDS)\lib\psdk;..\..\source;$(ILINK_LibraryPath)
+ ..\..\Design\;$(BDS)\lib;$(BDS)\lib\$(Platform)\$(Config);$(BDS)\lib\$(Platform)\release\psdk;..\..\Source;$(ILINK_LibraryPath)
false
true
true
- C:\Program Files (x86)\Embarcadero\Studio\16.0\lib\win32\release\psdk\;$(ILINK_LibraryPath)
- $(BDSINCLUDE)\windows\vcl;$(IncludePath)
true
true
$(BDS)\bin\default_app.manifest
@@ -81,7 +80,6 @@
Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace)
- $(BDSINCLUDE)\windows\vcl;$(IncludePath)
1033
Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;$(DCC_Namespace)
@@ -91,19 +89,16 @@
true
true
off
- Debug\;$(IncludePath)
false
true
false
true
false
- Debug
None
DEBUG
true
true
true
- $(BDS)\lib\debug;$(ILINK_LibraryPath)
true
Full
true
@@ -119,9 +114,6 @@
_DEBUG;$(Defines)
- Release\;$(IncludePath)
- Release
- $(BDS)\lib\release;$(ILINK_LibraryPath)
None
@@ -129,7 +121,7 @@
NDEBUG;$(Defines)
-
+
16
true
@@ -148,39 +140,9 @@
0
-
- 5
-
-
- 6
-
-
- 7
-
-
- 8
-
-
- 10
-
-
- 11
-
-
- 12
-
-
- 13
-
-
- 14
-
-
- 15
-
-
- 16
-
+
+ 9
+
Cfg_2
Base
@@ -272,12 +234,7 @@
True
False
-
- Microsoft Office 2000 Sample Automation Server Wrapper Components
- Microsoft Office XP Sample Automation Server Wrapper Components
- Embarcadero C++Builder Office 2000 Servers Package
- Embarcadero C++Builder Office XP Servers Package
-
+
False
True
@@ -289,419 +246,8 @@
True
False
-
-
-
- true
-
-
-
-
- true
-
-
-
-
- true
-
-
-
-
- true
-
-
-
-
- true
-
-
-
-
- true
-
-
-
-
- true
-
-
-
-
- true
-
-
-
-
- true
-
-
-
-
- true
-
-
-
-
- true
-
-
-
-
- true
-
-
-
-
- VirtualTreesCD.tds
- true
-
-
-
-
- true
-
-
-
-
- VirtualTreesCD.bpl
- true
-
-
-
-
- true
-
-
-
-
- 1
- .dylib
-
-
- 0
- .bpl
-
-
- 1
- .dylib
-
-
- 1
- .dylib
-
-
- 1
- .dylib
-
-
-
-
- 1
- .dylib
-
-
- 0
- .dll;.bpl
-
-
-
-
- 1
-
-
- 1
-
-
- 1
-
-
-
-
-
- ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF
- 1
-
-
- ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF
- 1
-
-
-
-
- res\drawable-normal
- 1
-
-
-
-
- library\lib\x86
- 1
-
-
-
-
- 1
-
-
- 1
-
-
- 1
-
-
-
-
-
- library\lib\armeabi-v7a
- 1
-
-
-
-
- 1
-
-
- 1
-
-
- 1
-
-
-
-
- res\drawable-xlarge
- 1
-
-
-
-
- res\drawable-xhdpi
- 1
-
-
-
-
- 1
-
-
- 1
-
-
- 1
-
-
-
-
- res\drawable-xxhdpi
- 1
-
-
-
-
- library\lib\mips
- 1
-
-
-
-
- res\drawable
- 1
-
-
-
-
- 1
-
-
- 1
-
-
- 0
-
-
-
-
- 1
- .framework
-
-
- 0
-
-
-
-
- res\drawable-small
- 1
-
-
-
-
-
- 1
-
-
- Contents\MacOS
- 0
-
-
-
-
- classes
- 1
-
-
-
-
-
- 1
-
-
- 1
-
-
- 1
-
-
-
-
- res\drawable
- 1
-
-
-
-
- Contents\Resources
- 1
-
-
-
-
-
- 1
-
-
- 1
-
-
- 1
-
-
-
-
- library\lib\armeabi-v7a
- 1
-
-
- 1
-
-
- 0
-
-
- 1
-
-
- 1
-
-
- 1
-
-
-
-
- library\lib\armeabi
- 1
-
-
-
-
- res\drawable-large
- 1
-
-
-
-
- 0
-
-
- 0
-
-
- 0
-
-
- 0
-
-
- 0
-
-
- 0
-
-
-
-
- 1
-
-
- 1
-
-
- 1
-
-
-
-
- res\drawable-ldpi
- 1
-
-
-
-
- res\values
- 1
-
-
-
-
- 1
-
-
- 1
-
-
- 1
-
-
-
-
- res\drawable-mdpi
- 1
-
-
-
-
- res\drawable-hdpi
- 1
-
-
-
-
- 1
-
-
-
-
-
-
-
-
-
-
-
12
-
diff --git a/Packages/CBuilder XE8/VirtualTreesCR.cbproj b/Packages/CBuilder XE8/VirtualTreesCR.cbproj
index ff8f87f71..c3d04a999 100644
--- a/Packages/CBuilder XE8/VirtualTreesCR.cbproj
+++ b/Packages/CBuilder XE8/VirtualTreesCR.cbproj
@@ -58,9 +58,10 @@
true
+ 220
true
VirtualTree CBuilder runtime package
- ..\..\Source
+ $(BDSCOMMONDIR)\hpp\$(Platform)
VirtualTreesCR
Shell32.dll;$(ILINK_DelayLoadDll)
$(BDS)\lib;$(BDS)\lib\$(Platform);$(BDS)\lib\$(Platform)\$(Config);$(DCC_UnitSearchPath)
@@ -78,24 +79,23 @@
All
true
..\..\Source\;$(BDS)\include;$(BDS)\include\windows;$(BDS)\include\windows\rtl;$(BDS)\include\windows\vcl;$(BDS)\include\windows\crtl;$(BDS)\include\windows\sdk;$(IncludePath)
- ..\..\Source\;$(BDS)\lib;$(BDS)\lib\$(platform);$(BDS)\lib\$(Platform)\$(Config);$(ILINK_LibraryPath)
+ ..\..\Source\;$(BDS)\lib;$(BDS)\lib\$(Platform)\$(Config);$(BDS)\lib\$(Platform)\release\psdk;$(ILINK_LibraryPath)
false
true
true
+ .\$(Platform)\$(Config)
+ .\$(Platform)\$(Config)
$(BDS)\Bin\BDS.EXE
true
$(BDSINCLUDE)\windows\vcl;$(IncludePath)
- C:\Program Files (x86)\Embarcadero\DelphiXE5\lib\win32\release\psdk\;$(ILINK_LibraryPath)
true
$(BDS)\bin\default_app.manifest
1033
Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace)
- $(BDSCOMMONDIR)\DCP\$(Platform)
- $(BdsCommponDir)\Dcp\$(Platform)
$(BDSINCLUDE)\windows\vcl;$(IncludePath)
1033
Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;$(DCC_Namespace)
@@ -106,19 +106,16 @@
true
true
off
- Debug\;$(IncludePath)
false
true
false
true
false
- Debug
None
DEBUG
true
true
true
- $(BDS)\lib\debug;$(ILINK_LibraryPath)
true
Full
true
@@ -127,7 +124,6 @@
true
true
true
- ..\..\Source
off
1033
true
@@ -137,10 +133,6 @@
1033
- ..\..\Source
- Release\;$(IncludePath)
- Release
- $(BDS)\lib\release;$(ILINK_LibraryPath)
None
@@ -151,7 +143,7 @@
1033
-
+
9
true
@@ -161,18 +153,15 @@
4
-
- 7
-
-
- 8
-
0
-
- 6
-
+
+ 14
+
+
+ 15
+
16
@@ -185,27 +174,24 @@
17
+
+ 16
+
17
17
+
+ 13
+
17
17
-
- 17
-
-
- 17
-
-
- 17
-
Cfg_2
Base
@@ -297,12 +283,7 @@
True
False
-
- Microsoft Office 2000 Sample Automation Server Wrapper Components
- Microsoft Office XP Sample Automation Server Wrapper Components
- Embarcadero C++Builder Office 2000 Servers Package
- Embarcadero C++Builder Office XP Servers Package
-
+
False
True
@@ -314,429 +295,8 @@
True
True
-
-
-
- true
-
-
-
-
- true
-
-
-
-
- true
-
-
-
-
- true
-
-
-
-
- true
-
-
-
-
- VirtualTreesCR.bpl
- true
-
-
-
-
- true
-
-
-
-
- true
-
-
-
-
- true
-
-
-
-
- true
-
-
-
-
- true
-
-
-
-
- true
-
-
-
-
- true
-
-
-
-
- true
-
-
-
-
- true
-
-
-
-
- true
-
-
-
-
- true
-
-
-
-
- res\drawable-normal
- 1
-
-
-
-
-
- 1
-
-
- 1
-
-
- 1
-
-
-
-
- ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF
- 1
-
-
- ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF
- 1
-
-
-
-
- 1
- .dylib
-
-
- 0
- .bpl
-
-
- 1
- .dylib
-
-
- 1
- .dylib
-
-
- 1
- .dylib
-
-
-
-
- library\lib\mips
- 1
-
-
-
-
- library\lib\x86
- 1
-
-
-
-
- library\lib\armeabi-v7a
- 1
-
-
-
-
-
- 1
-
-
- 1
-
-
- 1
-
-
-
-
- 1
-
-
- 1
-
-
- 1
-
-
-
-
- res\drawable-xlarge
- 1
-
-
-
-
- res\drawable-xhdpi
- 1
-
-
-
-
- res\drawable-xxhdpi
- 1
-
-
-
-
- 1
-
-
- 1
-
-
- 1
-
-
-
-
- 1
- .dylib
-
-
- 0
- .dll;.bpl
-
-
-
-
- res\drawable
- 1
-
-
-
-
- 1
- .framework
-
-
- 0
-
-
-
-
- 1
-
-
- 1
-
-
- 0
-
-
-
-
- res\drawable-small
- 1
-
-
-
-
-
- 1
-
-
- Contents\MacOS
- 0
-
-
-
-
- classes
- 1
-
-
-
-
-
- 1
-
-
- 1
-
-
- 1
-
-
-
-
- library\lib\armeabi-v7a
- 1
-
-
-
-
- res\drawable
- 1
-
-
-
-
-
- Contents\Resources
- 1
-
-
-
-
- 1
-
-
- 1
-
-
- 1
-
-
-
-
- library\lib\armeabi-v7a
- 1
-
-
- 1
-
-
- 0
-
-
- 1
-
-
- 1
-
-
- 1
-
-
-
-
- library\lib\armeabi
- 1
-
-
-
-
- res\drawable-large
- 1
-
-
-
-
- 1
-
-
- 1
-
-
- 1
-
-
-
-
- 0
-
-
- 0
-
-
- 0
-
-
- 0
-
-
- 0
-
-
- 0
-
-
-
-
- res\values
- 1
-
-
-
-
- res\drawable-ldpi
- 1
-
-
-
-
- 1
-
-
- 1
-
-
- 1
-
-
-
-
- res\drawable-hdpi
- 1
-
-
-
-
- res\drawable-mdpi
- 1
-
-
-
-
- 1
-
-
-
-
-
-
-
-
-
-
-
12
-
diff --git a/Packages/RAD Studio 10.4+/VirtualTreesR.dpk b/Packages/RAD Studio 10.4+/VirtualTreesR.dpk
index 803b984d9..5a4ddd6a1 100644
--- a/Packages/RAD Studio 10.4+/VirtualTreesR.dpk
+++ b/Packages/RAD Studio 10.4+/VirtualTreesR.dpk
@@ -44,6 +44,7 @@ contains
VirtualTrees.ClipBoard in '..\..\Source\VirtualTrees.ClipBoard.pas',
VirtualTrees.Actions in '..\..\Source\VirtualTrees.Actions.pas',
VirtualTrees.Export in '..\..\Source\VirtualTrees.Export.pas',
- VirtualTrees.Utils in '..\..\Source\VirtualTrees.Utils.pas';
+ VirtualTrees.Utils in '..\..\Source\VirtualTrees.Utils.pas',
+ VirtualTrees.Types in '..\..\Source\VirtualTrees.Types.pas';
end.
diff --git a/Packages/RAD Studio 10.4+/VirtualTreesR.dproj b/Packages/RAD Studio 10.4+/VirtualTreesR.dproj
index 8ab954a0e..cca88a0ee 100644
--- a/Packages/RAD Studio 10.4+/VirtualTreesR.dproj
+++ b/Packages/RAD Studio 10.4+/VirtualTreesR.dproj
@@ -76,6 +76,7 @@
+
Base
diff --git a/Packages/RAD Studio 10.4+/VirtualTreesR.dsv b/Packages/RAD Studio 10.4+/VirtualTreesR.dsv
new file mode 100644
index 000000000..521437eae
--- /dev/null
+++ b/Packages/RAD Studio 10.4+/VirtualTreesR.dsv
@@ -0,0 +1,20 @@
+[ClosedView_RDpcUHJvamVjdHNcVmlydHVhbC1UcmVlVmlld1xTb3VyY2VcVmlydHVhbFRyZWVzLnBhcw==]
+Module=D:\Projects\Virtual-TreeView\Source\VirtualTrees.pas
+CursorX=42
+CursorY=667
+TopLine=626
+LeftCol=1
+Elisions=
+Bookmarks=
+EditViewName=D:\Projects\Virtual-TreeView\Source\VirtualTrees.pas
+
+[ClosedView_RDpcUHJvamVjdHNcVmlydHVhbC1UcmVlVmlld1xEZW1vc1xPYmplY3RzXE1WQ1R5cGVzLnBhcw==]
+Module=D:\Projects\Virtual-TreeView\Demos\Objects\MVCTypes.pas
+CursorX=36
+CursorY=194
+TopLine=172
+LeftCol=1
+Elisions=
+Bookmarks=
+EditViewName=D:\Projects\Virtual-TreeView\Demos\Objects\MVCTypes.pas
+
diff --git a/README.md b/README.md
index b4d981bfe..d05cef65f 100644
--- a/README.md
+++ b/README.md
@@ -5,7 +5,7 @@ Virtual Treeview is a Delphi treeview control built from ground up. Many years o
I don't use C++ Builder and my experience with it is very limited. This makes it difficult to take care about bugs that are reported in C++ Builder and to maintain the C++ Builder packages. I would be great if someone would volunteer to do this.
### Downloads
-**V7.5** official release for **RAD Studio XE3 to 10.4.2 Rio**: [JAM Software](https://www.jam-software.com/virtual-treeview/VirtualTreeView.zip) ([Changes](https://github.com/JAM-Software/Virtual-TreeView/issues?q=is%3Aissue+milestone%3AV7.5+is%3Aclosed))
+**V7.6.x** official release for **RAD Studio XE3 to 10.4.2 Rio**: [JAM Software](https://www.jam-software.com/virtual-treeview/VirtualTreeView.zip)
An experimental **FireMonkey** port can be found here: [livius2/Virtual-TreeView](https://github.com/livius2/Virtual-TreeView)
diff --git a/Source/VirtualTrees.BaseTree.pas b/Source/VirtualTrees.BaseTree.pas
new file mode 100644
index 000000000..e96872d61
--- /dev/null
+++ b/Source/VirtualTrees.BaseTree.pas
@@ -0,0 +1,8 @@
+unit VirtualTrees.BaseTree;
+// Dummy unit to make migeration between V7 and V8 easier.
+
+interface
+
+implementation
+
+end.
\ No newline at end of file
diff --git a/Source/VirtualTrees.StyleHooks.pas b/Source/VirtualTrees.StyleHooks.pas
index e62b1d3ce..a6ad04995 100644
--- a/Source/VirtualTrees.StyleHooks.pas
+++ b/Source/VirtualTrees.StyleHooks.pas
@@ -28,6 +28,9 @@ interface
{$WARN UNSAFE_TYPE OFF}
{$WARN UNSAFE_CAST OFF}
{$WARN UNSAFE_CODE OFF}
+{$if CompilerVersion < 34}
+ {$DEFINE NOT_USE_VCL_STYLEHOOK} // Do not use inherited style hook but own code in this class. Needed for older Delphi versions 10.3 and below
+{$ifend}
uses
Winapi.Windows,
@@ -46,6 +49,7 @@ interface
type
// XE2+ VCL Style
TVclStyleScrollBarsHook = class(TScrollingStyleHook)
+ {$ifdef NOT_USE_VCL_STYLEHOOK}
strict private type
{$REGION 'TVclStyleScrollBarWindow'}
TScrollWindow = class(TWinControl)
@@ -63,43 +67,50 @@ TScrollWindow = class(TWinControl)
{$ENDREGION}
private
FHorzScrollWnd: TScrollWindow;
- FLeftMouseButtonDown: Boolean;
+ FLeftButtonDown: Boolean;
FVertScrollWnd: TScrollWindow;
- function NCMousePosToClient(const P: TPoint): TPoint;
-
- procedure CMUpdateVclStyleScrollbars(var Msg: TMessage); message CM_UPDATE_VCLSTYLE_SCROLLBARS;
procedure WMEraseBkgnd(var Msg: TWMEraseBkgnd); message WM_ERASEBKGND;
procedure WMKeyDown(var Msg: TMessage); message WM_KEYDOWN;
procedure WMKeyUp(var Msg: TMessage); message WM_KEYUP;
procedure WMLButtonDown(var Msg: TWMMouse); message WM_LBUTTONDOWN;
procedure WMLButtonUp(var Msg: TWMMouse); message WM_LBUTTONUP;
procedure WMNCLButtonDown(var Msg: TWMMouse); message WM_NCLBUTTONDOWN;
- procedure WMNCMouseMove(var Msg: TWMMouse); message WM_NCMOUSEMOVE;
+ procedure WMNCLButtonDblClk(var Msg: TWMMouse); message WM_NCLBUTTONDBLCLK;
procedure WMNCLButtonUp(var Msg: TWMMouse); message WM_NCLBUTTONUP;
procedure WMNCPaint(var Msg: TMessage); message WM_NCPAINT;
- procedure WMMouseMove(var Msg: TWMMouse); message WM_MOUSEMOVE;
- procedure WMMouseWheel(var Msg: TMessage); message WM_MOUSEWHEEL;
procedure WMVScroll(var Msg: TWMVScroll); message WM_VSCROLL;
procedure WMHScroll(var Msg: TWMHScroll); message WM_HSCROLL;
- procedure WMCaptureChanged(var Msg: TMessage); message WM_CAPTURECHANGED;
- procedure WMNCLButtonDblClk(var Msg: TWMMouse); message WM_NCLBUTTONDBLCLK;
procedure WMSize(var Msg: TMessage); message WM_SIZE;
procedure WMMove(var Msg: TMessage); message WM_MOVE;
procedure WMPosChanged(var Msg: TMessage); message WM_WINDOWPOSCHANGED;
-
+ procedure WMMouseWheel(var Msg: TMessage); message WM_MOUSEWHEEL;
+ procedure WMCaptureChanged(var Msg: TMessage); message WM_CAPTURECHANGED;
procedure InitScrollBars;
+ procedure WMNCMouseMove(var Msg: TWMMouse); message WM_NCMOUSEMOVE;
+ procedure WMMouseMove(var Msg: TWMMouse); message WM_MOUSEMOVE;
+ function NCMousePosToClient(const P: TPoint): TPoint;
+ function PointInTreeHeader(const P: TPoint): Boolean;
+ {$endif}
+ private
+ procedure CMUpdateVclStyleScrollbars(var Msg: TMessage); message CM_UPDATE_VCLSTYLE_SCROLLBARS;
protected
procedure CalcScrollBarsRect; virtual;
+ procedure UpdateScroll;{$if CompilerVersion >= 34}override;{$ifend}
+ {$ifdef NOT_USE_VCL_STYLEHOOK}
+ procedure MouseLeave; override;
procedure DrawHorzScrollBar(DC: HDC); virtual;
procedure DrawVertScrollBar(DC: HDC); virtual;
- procedure MouseLeave; override;
procedure PaintScroll; override;
- function PointInTreeHeader(const P: TPoint): Boolean;
- procedure UpdateScroll;{$if CompilerVersion >= 34}override;{$ifend}
+ property HorzScrollWnd: TScrollWindow read FHorzScrollWnd;
+ property VertScrollWnd: TScrollWindow read FVertScrollWnd;
+ property LeftButtonDown: Boolean read FLeftButtonDown;
+ {$ifend}
public
constructor Create(AControl: TWinControl); override;
+ {$ifdef NOT_USE_VCL_STYLEHOOK}
destructor Destroy; override;
+ {$ifend}
/// Draws an expand arrow like used in the RAD Studio IDE.
/// The code is not yet dpi-aware.
class procedure DrawExpandArrow(pBitmap: TBitmap; pExpanded: Boolean; pColor: TColor = clNone);
@@ -118,6 +129,11 @@ TScrollWindow = class(TWinControl)
VTStyleServicesFunc: TVTStyleServicesFunc = nil;
+/// Wrapper function for styles services that handles differences between RAD Studio 10.4 and older versions,
+/// as well as the case if these controls are used inside the IDE.
+function VTStyleServices(AControl: TControl = nil): TCustomStyleServices;
+
+
implementation
uses
@@ -126,6 +142,17 @@ implementation
System.Types,
VirtualTrees;
+function VTStyleServices(AControl: TControl = nil): TCustomStyleServices;
+begin
+ if Assigned(VTStyleServicesFunc) then
+ Result := VTStyleServicesFunc(AControl)
+ else
+ Result := Vcl.Themes.StyleServices{$if CompilerVersion >= 34}(AControl){$ifend};
+end;
+
+//----------------------------------------------------------------------------------------------------------------------
+
+
type
TBaseVirtualTreeCracker = class(TBaseVirtualTree)
end;
@@ -141,10 +168,13 @@ procedure TVclStyleScrollBarsHook.CalcScrollBarsRect();
BarInfo: TScrollBarInfo;
Ret: BOOL;
begin
+ if not Assigned(VertScrollWnd) then // Might happen, when FInitingScrollBars is set, so InitScrollBars did not yet initialize the members
+ Exit;
+
BarInfo.cbSize := SizeOf(BarInfo);
Ret := GetScrollBarInfo(Handle, Integer(OBJID_VSCROLL), BarInfo);
- FVertScrollWnd.Visible := (seBorder in Control.StyleElements) and Ret and (not (STATE_SYSTEM_INVISIBLE and BarInfo.rgstate[0] <> 0));
- FVertScrollWnd.Enabled := FVertScrollWnd.Visible and (not (STATE_SYSTEM_UNAVAILABLE and BarInfo.rgstate[0] <> 0));
+ VertScrollWnd.Visible := (seBorder in Control.StyleElements) and Ret and (not (STATE_SYSTEM_INVISIBLE and BarInfo.rgstate[0] <> 0));
+ VertScrollWnd.Enabled := VertScrollWnd.Visible and (not (STATE_SYSTEM_UNAVAILABLE and BarInfo.rgstate[0] <> 0));
end;
procedure CalcHorizontalRects;
@@ -152,59 +182,36 @@ procedure TVclStyleScrollBarsHook.CalcScrollBarsRect();
BarInfo: TScrollBarInfo;
Ret: BOOL;
begin
+ if not Assigned(HorzScrollWnd) then // Might happen, when FInitingScrollBars is set, so InitScrollBars did not yet initialize the members
+ Exit;
+
BarInfo.cbSize := SizeOf(BarInfo);
Ret := GetScrollBarInfo(Handle, Integer(OBJID_HSCROLL), BarInfo);
- FHorzScrollWnd.Visible := (seBorder in Control.StyleElements) and Ret and (not (STATE_SYSTEM_INVISIBLE and BarInfo.rgstate[0] <> 0));
- FHorzScrollWnd.Enabled := FHorzScrollWnd.Visible and (not (STATE_SYSTEM_UNAVAILABLE and BarInfo.rgstate[0] <> 0));
+ HorzScrollWnd.Visible := (seBorder in Control.StyleElements) and Ret and (not (STATE_SYSTEM_INVISIBLE and BarInfo.rgstate[0] <> 0));
+ HorzScrollWnd.Enabled := HorzScrollWnd.Visible and (not (STATE_SYSTEM_UNAVAILABLE and BarInfo.rgstate[0] <> 0));
end;
begin
- if ((FVertScrollWnd <> nil) and not FVertScrollWnd.HandleAllocated) or
- ((FHorzScrollWnd <> nil) and not FHorzScrollWnd.HandleAllocated) then
- begin // Fixes issue #390
- if FVertScrollWnd <> nil then
- FreeAndNil(FVertScrollWnd);
- if FHorzScrollWnd <> nil then
- FreeAndNil(FHorzScrollWnd);
-
- InitScrollBars;
- end;
-
CalcVerticalRects;
CalcHorizontalRects;
end;
+//----------------------------------------------------------------------------------------------------------------------
+
constructor TVclStyleScrollBarsHook.Create(AControl: TWinControl);
begin
inherited;
- InitScrollBars;
-
+ {$ifdef NOT_USE_VCL_STYLEHOOK}
VertSliderState := tsThumbBtnVertNormal;
VertUpState := tsArrowBtnUpNormal;
VertDownState := tsArrowBtnDownNormal;
HorzSliderState := tsThumbBtnHorzNormal;
HorzUpState := tsArrowBtnLeftNormal;
HorzDownState := tsArrowBtnRightNormal;
+ {$ifend}
end;
-procedure TVclStyleScrollBarsHook.InitScrollBars;
-begin
- FVertScrollWnd := TScrollWindow.CreateParented(GetParent(Control.Handle));
- FVertScrollWnd.StyleHook := Self;
- FVertScrollWnd.Vertical := True;
-
- FHorzScrollWnd := TScrollWindow.CreateParented(GetParent(Control.Handle));
- FHorzScrollWnd.StyleHook := Self;
-end;
-
-destructor TVclStyleScrollBarsHook.Destroy;
-begin
- FVertScrollWnd.StyleHook := nil;
- FreeAndNil(FVertScrollWnd);
- FHorzScrollWnd.StyleHook := nil;
- FreeAndNil(FHorzScrollWnd);
- inherited;
-end;
+//----------------------------------------------------------------------------------------------------------------------
class procedure TVclStyleScrollBarsHook.DrawExpandArrow(pBitmap: TBitmap; pExpanded: Boolean; pColor: TColor);
const
@@ -232,6 +239,120 @@ class procedure TVclStyleScrollBarsHook.DrawExpandArrow(pBitmap: TBitmap; pExpan
canvas.Polyline(ArrowPoints[pExpanded]);
end;
+//----------------------------------------------------------------------------------------------------------------------
+
+procedure TVclStyleScrollBarsHook.UpdateScroll;
+var
+ R: TRect;
+ HeaderHeight: Integer;
+ PaddingSize: Integer;
+ BorderSize: Integer;
+begin
+ if VertScrollWnd = nil then
+ InitScrollBars();
+
+ HeaderHeight := 0;
+ if (hoVisible in TBaseVirtualTree(Control).Header.Options) then
+ Inc(HeaderHeight, TBaseVirtualTree(Control).Header.Height);
+
+ PaddingSize := TBaseVirtualTreeCracker(Control).BorderWidth;
+ if TBaseVirtualTreeCracker(Control).BevelKind <> bkNone then
+ begin
+ if TBaseVirtualTreeCracker(Control).BevelInner <> bvNone then
+ Inc(PaddingSize, TBaseVirtualTreeCracker(Control).BevelWidth);
+ if TBaseVirtualTreeCracker(Control).BevelOuter <> bvNone then
+ Inc(PaddingSize, TBaseVirtualTreeCracker(Control).BevelWidth);
+ end;
+
+ BorderSize := 0;
+ if HasBorder then
+ Inc(BorderSize, GetSystemMetrics(SM_CYEDGE));
+
+ if ((VertScrollWnd <> nil) and not VertScrollWnd.HandleAllocated) or
+ ((HorzScrollWnd <> nil) and not HorzScrollWnd.HandleAllocated) then
+ begin // Fixes issue #390
+ if VertScrollWnd <> nil then
+ FreeAndNil({$ifdef NOT_USE_VCL_STYLEHOOK}FVertScrollWnd{$else}VertScrollWnd{$ifend});
+ if HorzScrollWnd <> nil then
+ FreeAndNil({$ifdef NOT_USE_VCL_STYLEHOOK}FHorzScrollWnd{$else}HorzScrollWnd{$ifend});
+
+ InitScrollBars;
+ end;
+
+ // VertScrollBarWindow
+ if Control.HandleAllocated then
+ begin
+ if VertScrollWnd.Visible then
+ begin
+ R := VertScrollRect;
+ if Control.UseRightToLeftScrollBar then
+ OffsetRect(R, -R.Left + BorderSize, 0);
+
+ ShowWindow(VertScrollWnd.Handle, SW_SHOW);
+ SetWindowPos(VertScrollWnd.Handle, HWND_TOP,
+ Control.Left + R.Left + PaddingSize,
+ Control.Top + R.Top + HeaderHeight + PaddingSize,
+ R.Width,
+ Control.Height - HeaderHeight - ((PaddingSize + BorderSize) * 2), // <> R.Height
+ SWP_SHOWWINDOW);
+ end else
+ ShowWindow(VertScrollWnd.Handle, SW_HIDE);
+ end;// if FVertScrollWnd
+
+ // HorzScrollBarWindow
+ if Control.HandleAllocated then
+ begin
+ if HorzScrollWnd.Visible then
+ begin
+ R := HorzScrollRect;
+ if Control.UseRightToLeftScrollBar then
+ OffsetRect(R, VertScrollRect.Width, 0);
+
+ ShowWindow(HorzScrollWnd.Handle, SW_SHOW);
+ SetWindowPos(HorzScrollWnd.Handle, HWND_TOP,
+ Control.Left + R.Left + PaddingSize,
+ Control.Top + R.Top + HeaderHeight + PaddingSize,
+ R.Width, R.Height, SWP_SHOWWINDOW);
+ end else
+ ShowWindow(HorzScrollWnd.Handle, SW_HIDE);
+ end;// if FHorzScrollWnd
+ // ScrollBarWindow Visible/Enabled Control
+ CalcScrollBarsRect;
+
+end;
+
+procedure TVclStyleScrollBarsHook.CMUpdateVclStyleScrollbars(var Msg: TMessage);
+begin
+ CalcScrollBarsRect;
+ PaintScroll;
+end;
+
+//----------------------------------------------------------------------------------------------------------------------
+
+{$ifdef NOT_USE_VCL_STYLEHOOK}
+
+function TVclStyleScrollBarsHook.NCMousePosToClient(const P: TPoint): TPoint;
+begin
+ Result := P;
+ ScreenToClient(Handle, Result);
+ if HasBorder then
+ begin
+ if HasClientEdge then
+ Result.Offset(2, 2)
+ else
+ Result.Offset(1, 1);
+ end;
+end;
+
+//----------------------------------------------------------------------------------------------------------------------
+
+function TVclStyleScrollBarsHook.PointInTreeHeader(const P: TPoint): Boolean;
+begin
+ Result := TBaseVirtualTree(Control).Header.InHeader(P);
+end;
+
+//----------------------------------------------------------------------------------------------------------------------
+
procedure TVclStyleScrollBarsHook.DrawHorzScrollBar(DC: HDC);
var
B: TBitmap;
@@ -241,7 +362,7 @@ procedure TVclStyleScrollBarsHook.DrawHorzScrollBar(DC: HDC);
if ((Handle = 0) or (DC = 0)) then
Exit;
- if FHorzScrollWnd.Visible and StyleServices.Available and (seBorder in Control.StyleElements) then
+ if HorzScrollWnd.Visible and StyleServices.Available and (seBorder in Control.StyleElements) then
begin
B := TBitmap.Create;
try
@@ -253,23 +374,23 @@ procedure TVclStyleScrollBarsHook.DrawHorzScrollBar(DC: HDC);
R.Left := HorzUpButtonRect.Right;
R.Right := HorzDownButtonRect.Left;
Details := StyleServices.GetElementDetails(tsUpperTrackHorzNormal);
- StyleServices.DrawElement(B.Canvas.Handle, Details, R{$IF CompilerVersion >= 34}, nil, FVertScrollWnd.CurrentPPI{$IFEND});
+ StyleServices.DrawElement(B.Canvas.Handle, Details, R{$IF CompilerVersion >= 34}, nil, VertScrollWnd.CurrentPPI{$IFEND});
- if FHorzScrollWnd.Enabled then
+ if HorzScrollWnd.Enabled then
Details := StyleServices.GetElementDetails(HorzSliderState);
- StyleServices.DrawElement(B.Canvas.Handle, Details, HorzSliderRect{$IF CompilerVersion >= 34}, nil, FVertScrollWnd.CurrentPPI{$IFEND});
+ StyleServices.DrawElement(B.Canvas.Handle, Details, HorzSliderRect{$IF CompilerVersion >= 34}, nil, VertScrollWnd.CurrentPPI{$IFEND});
- if FHorzScrollWnd.Enabled then
+ if HorzScrollWnd.Enabled then
Details := StyleServices.GetElementDetails(HorzUpState)
else
Details := StyleServices.GetElementDetails(tsArrowBtnLeftDisabled);
- StyleServices.DrawElement(B.Canvas.Handle, Details, HorzUpButtonRect{$IF CompilerVersion >= 34}, nil, FVertScrollWnd.CurrentPPI{$IFEND});
+ StyleServices.DrawElement(B.Canvas.Handle, Details, HorzUpButtonRect{$IF CompilerVersion >= 34}, nil, VertScrollWnd.CurrentPPI{$IFEND});
- if FHorzScrollWnd.Enabled then
+ if HorzScrollWnd.Enabled then
Details := StyleServices.GetElementDetails(HorzDownState)
else
Details := StyleServices.GetElementDetails(tsArrowBtnRightDisabled);
- StyleServices.DrawElement(B.Canvas.Handle, Details, HorzDownButtonRect{$IF CompilerVersion >= 34}, nil, FVertScrollWnd.CurrentPPI{$IFEND});
+ StyleServices.DrawElement(B.Canvas.Handle, Details, HorzDownButtonRect{$IF CompilerVersion >= 34}, nil, VertScrollWnd.CurrentPPI{$IFEND});
R := HorzScrollRect;
MoveWindowOrg(B.Canvas.Handle, R.Left, R.Top);
@@ -280,6 +401,8 @@ procedure TVclStyleScrollBarsHook.DrawHorzScrollBar(DC: HDC);
end;
end;
+//----------------------------------------------------------------------------------------------------------------------
+
procedure TVclStyleScrollBarsHook.DrawVertScrollBar(DC: HDC);
var
B: TBitmap;
@@ -289,39 +412,39 @@ procedure TVclStyleScrollBarsHook.DrawVertScrollBar(DC: HDC);
if ((Handle = 0) or (DC = 0)) then
Exit;
- if FVertScrollWnd.Visible and StyleServices.Available and (seBorder in Control.StyleElements) then
+ if VertScrollWnd.Visible and StyleServices.Available and (seBorder in Control.StyleElements) then
begin
B := TBitmap.Create;
try
R := VertScrollRect;
B.Width := R.Width;
- B.Height := FVertScrollWnd.Height; // <> R.Height
+ B.Height := VertScrollWnd.Height; // <> R.Height
MoveWindowOrg(B.Canvas.Handle, -R.Left, -R.Top);
R.Bottom := B.Height + R.Top;
Details := StyleServices.GetElementDetails(tsUpperTrackVertNormal);
- StyleServices.DrawElement(B.Canvas.Handle, Details, R {$IF CompilerVersion >= 34}, nil, FVertScrollWnd.CurrentPPI{$IFEND});
+ StyleServices.DrawElement(B.Canvas.Handle, Details, R {$IF CompilerVersion >= 34}, nil, VertScrollWnd.CurrentPPI{$IFEND});
R.Top := VertUpButtonRect.Bottom;
R.Bottom := VertDownButtonRect.Top;
Details := StyleServices.GetElementDetails(tsUpperTrackVertNormal);
- StyleServices.DrawElement(B.Canvas.Handle, Details, R{$IF CompilerVersion >= 34}, nil, FVertScrollWnd.CurrentPPI{$IFEND});
+ StyleServices.DrawElement(B.Canvas.Handle, Details, R{$IF CompilerVersion >= 34}, nil, VertScrollWnd.CurrentPPI{$IFEND});
- if FVertScrollWnd.Enabled then
+ if VertScrollWnd.Enabled then
Details := StyleServices.GetElementDetails(VertSliderState);
- StyleServices.DrawElement(B.Canvas.Handle, Details, VertSliderRect{$IF CompilerVersion >= 34}, nil, FVertScrollWnd.CurrentPPI{$IFEND});
+ StyleServices.DrawElement(B.Canvas.Handle, Details, VertSliderRect{$IF CompilerVersion >= 34}, nil, VertScrollWnd.CurrentPPI{$IFEND});
- if FVertScrollWnd.Enabled then
+ if VertScrollWnd.Enabled then
Details := StyleServices.GetElementDetails(VertUpState)
else
Details := StyleServices.GetElementDetails(tsArrowBtnUpDisabled);
- StyleServices.DrawElement(B.Canvas.Handle, Details, VertUpButtonRect{$IF CompilerVersion >= 34}, nil, FVertScrollWnd.CurrentPPI{$IFEND});
+ StyleServices.DrawElement(B.Canvas.Handle, Details, VertUpButtonRect{$IF CompilerVersion >= 34}, nil, VertScrollWnd.CurrentPPI{$IFEND});
- if FVertScrollWnd.Enabled then
+ if VertScrollWnd.Enabled then
Details := StyleServices.GetElementDetails(VertDownState)
else
Details := StyleServices.GetElementDetails(tsArrowBtnDownDisabled);
- StyleServices.DrawElement(B.Canvas.Handle, Details, VertDownButtonRect{$IF CompilerVersion >= 34}, nil, FVertScrollWnd.CurrentPPI{$IFEND});
+ StyleServices.DrawElement(B.Canvas.Handle, Details, VertDownButtonRect{$IF CompilerVersion >= 34}, nil, VertScrollWnd.CurrentPPI{$IFEND});
R := VertScrollRect;
MoveWindowOrg(B.Canvas.Handle, R.Left, R.Top);
@@ -332,6 +455,8 @@ procedure TVclStyleScrollBarsHook.DrawVertScrollBar(DC: HDC);
end;
end;
+//----------------------------------------------------------------------------------------------------------------------
+
procedure TVclStyleScrollBarsHook.MouseLeave;
begin
inherited;
@@ -356,107 +481,11 @@ procedure TVclStyleScrollBarsHook.MouseLeave;
PaintScroll;
end;
-function TVclStyleScrollBarsHook.NCMousePosToClient(const P: TPoint): TPoint;
-begin
- Result := P;
- ScreenToClient(Handle, Result);
- if HasBorder then
- begin
- if HasClientEdge then
- Result.Offset(2, 2)
- else
- Result.Offset(1, 1);
- end;
-end;
-
-procedure TVclStyleScrollBarsHook.PaintScroll;
-begin
- if FVertScrollWnd.HandleAllocated then
- begin
- FVertScrollWnd.Repaint;
- RedrawWindow(FVertScrollWnd.Handle, nil, 0, RDW_FRAME or RDW_INVALIDATE); // Fixes issue #698
- end;
- if FHorzScrollWnd.HandleAllocated then
- begin
- FHorzScrollWnd.Repaint;
- RedrawWindow(FHorzScrollWnd.Handle, nil, 0, RDW_FRAME or RDW_INVALIDATE); // Fixes issue #698
- end;
-end;
-
-function TVclStyleScrollBarsHook.PointInTreeHeader(const P: TPoint): Boolean;
-begin
- Result := TBaseVirtualTree(Control).Header.InHeader(P);
-end;
-
-procedure TVclStyleScrollBarsHook.UpdateScroll;
-var
- R: TRect;
- HeaderHeight: Integer;
- PaddingSize: Integer;
- BorderSize: Integer;
-begin
- // ScrollBarWindow Visible/Enabled Control
- CalcScrollBarsRect;
-
- HeaderHeight := 0;
- if (hoVisible in TBaseVirtualTree(Control).Header.Options) then
- Inc(HeaderHeight, TBaseVirtualTree(Control).Header.Height);
-
- PaddingSize := TBaseVirtualTreeCracker(Control).BorderWidth;
- if TBaseVirtualTreeCracker(Control).BevelKind <> bkNone then
- begin
- if TBaseVirtualTreeCracker(Control).BevelInner <> bvNone then
- Inc(PaddingSize, TBaseVirtualTreeCracker(Control).BevelWidth);
- if TBaseVirtualTreeCracker(Control).BevelOuter <> bvNone then
- Inc(PaddingSize, TBaseVirtualTreeCracker(Control).BevelWidth);
- end;
-
- BorderSize := 0;
- if HasBorder then
- Inc(BorderSize, GetSystemMetrics(SM_CYEDGE));
-
- // VertScrollBarWindow
- if Control.HandleAllocated then
- begin
- if FVertScrollWnd.Visible then
- begin
- R := VertScrollRect;
- if Control.UseRightToLeftScrollBar then
- OffsetRect(R, -R.Left + BorderSize, 0);
-
- ShowWindow(FVertScrollWnd.Handle, SW_SHOW);
- SetWindowPos(FVertScrollWnd.Handle, HWND_TOP,
- Control.Left + R.Left + PaddingSize,
- Control.Top + R.Top + HeaderHeight + PaddingSize,
- R.Width,
- Control.Height - HeaderHeight - ((PaddingSize + BorderSize) * 2), // <> R.Height
- SWP_SHOWWINDOW);
- end else
- ShowWindow(FVertScrollWnd.Handle, SW_HIDE);
- end;// if FVertScrollWnd
-
- // HorzScrollBarWindow
- if Control.HandleAllocated then
- begin
- if FHorzScrollWnd.Visible then
- begin
- R := HorzScrollRect;
- if Control.UseRightToLeftScrollBar then
- OffsetRect(R, VertScrollRect.Width, 0);
-
- ShowWindow(FHorzScrollWnd.Handle, SW_SHOW);
- SetWindowPos(FHorzScrollWnd.Handle, HWND_TOP,
- Control.Left + R.Left + PaddingSize,
- Control.Top + R.Top + HeaderHeight + PaddingSize,
- R.Width, R.Height, SWP_SHOWWINDOW);
- end else
- ShowWindow(FHorzScrollWnd.Handle, SW_HIDE);
- end;// if FHorzScrollWnd
-end;
+//----------------------------------------------------------------------------------------------------------------------
procedure TVclStyleScrollBarsHook.WMCaptureChanged(var Msg: TMessage);
begin
- if FVertScrollWnd.Visible and FVertScrollWnd.Enabled then
+ if VertScrollWnd.Visible and VertScrollWnd.Enabled then
begin
if VertUpState = tsArrowBtnUpPressed then
begin
@@ -471,7 +500,7 @@ procedure TVclStyleScrollBarsHook.WMCaptureChanged(var Msg: TMessage);
end;
end;
- if FHorzScrollWnd.Visible and FHorzScrollWnd.Enabled then
+ if HorzScrollWnd.Visible and HorzScrollWnd.Enabled then
begin
if HorzUpState = tsArrowBtnLeftPressed then
begin
@@ -490,34 +519,57 @@ procedure TVclStyleScrollBarsHook.WMCaptureChanged(var Msg: TMessage);
Handled := True;
end;
-procedure TVclStyleScrollBarsHook.WMEraseBkgnd(var Msg: TWMEraseBkgnd);
+//----------------------------------------------------------------------------------------------------------------------
+
+destructor TVclStyleScrollBarsHook.Destroy;
begin
- Handled := True;
+ if Assigned(FVertScrollWnd) then
+ begin
+ FVertScrollWnd.StyleHook := nil;
+ FreeAndNil(FVertScrollWnd);
+ end;
+ if Assigned(FHorzScrollWnd) then
+ begin
+ FHorzScrollWnd.StyleHook := nil;
+ FreeAndNil(FHorzScrollWnd);
+ end;
+ inherited;
end;
-procedure TVclStyleScrollBarsHook.WMHScroll(var Msg: TWMHScroll);
+//----------------------------------------------------------------------------------------------------------------------
+
+procedure TVclStyleScrollBarsHook.WMEraseBkgnd(var Msg: TWMEraseBkgnd);
begin
- CallDefaultProc(TMessage(Msg));
- if not (Msg.ScrollCode in [SB_THUMBTRACK, SB_THUMBPOSITION]) then
- UpdateScroll
- else
- PaintScroll;
Handled := True;
end;
-procedure TVclStyleScrollBarsHook.CMUpdateVclStyleScrollbars(var Msg: TMessage);
+//----------------------------------------------------------------------------------------------------------------------
+
+procedure TVclStyleScrollBarsHook.PaintScroll;
begin
- CalcScrollBarsRect;
- PaintScroll;
+ if FVertScrollWnd.HandleAllocated then
+ begin
+ FVertScrollWnd.Repaint;
+ RedrawWindow(FVertScrollWnd.Handle, nil, 0, RDW_FRAME or RDW_INVALIDATE); // Fixes issue #698
+ end;
+ if FHorzScrollWnd.HandleAllocated then
+ begin
+ FHorzScrollWnd.Repaint;
+ RedrawWindow(FHorzScrollWnd.Handle, nil, 0, RDW_FRAME or RDW_INVALIDATE); // Fixes issue #698
+ end;
end;
+//----------------------------------------------------------------------------------------------------------------------
+
procedure TVclStyleScrollBarsHook.WMKeyDown(var Msg: TMessage);
begin
CallDefaultProc(TMessage(Msg));
- UpdateScroll;
+ PaintScroll;
Handled := True;
end;
+//----------------------------------------------------------------------------------------------------------------------
+
procedure TVclStyleScrollBarsHook.WMKeyUp(var Msg: TMessage);
begin
CallDefaultProc(TMessage(Msg));
@@ -525,6 +577,8 @@ procedure TVclStyleScrollBarsHook.WMKeyUp(var Msg: TMessage);
Handled := True;
end;
+//----------------------------------------------------------------------------------------------------------------------
+
procedure TVclStyleScrollBarsHook.WMLButtonDown(var Msg: TWMMouse);
begin
CallDefaultProc(TMessage(Msg));
@@ -532,6 +586,20 @@ procedure TVclStyleScrollBarsHook.WMLButtonDown(var Msg: TWMMouse);
Handled := True;
end;
+//----------------------------------------------------------------------------------------------------------------------
+
+procedure TVclStyleScrollBarsHook.InitScrollBars;
+begin
+ FVertScrollWnd := TScrollWindow.CreateParented(GetParent(Control.Handle));
+ FVertScrollWnd.StyleHook := Self;
+ FVertScrollWnd.Vertical := True;
+
+ FHorzScrollWnd := TScrollWindow.CreateParented(GetParent(Control.Handle));
+ FHorzScrollWnd.StyleHook := Self;
+end;
+
+//----------------------------------------------------------------------------------------------------------------------
+
procedure TVclStyleScrollBarsHook.WMLButtonUp(var Msg: TWMMouse);
var
P: TPoint;
@@ -540,12 +608,12 @@ procedure TVclStyleScrollBarsHook.WMLButtonUp(var Msg: TWMMouse);
ScreenToClient(Handle, P);
if not PointInTreeHeader(P) then
begin
- if FVertScrollWnd.Visible then
+ if VertScrollWnd.Visible then
begin
if VertSliderState = tsThumbBtnVertPressed then
begin
PostMessage(Handle, WM_VSCROLL, WPARAM(UInt32(SmallPoint(SB_ENDSCROLL, 0))), 0);
- FLeftMouseButtonDown := False;
+ FLeftButtonDown := False;
VertSliderState := tsThumbBtnVertNormal;
PaintScroll;
Handled := True;
@@ -563,7 +631,7 @@ procedure TVclStyleScrollBarsHook.WMLButtonUp(var Msg: TWMMouse);
if HorzSliderState = tsThumbBtnHorzPressed then
begin
PostMessage(Handle, WM_HSCROLL, WPARAM(UInt32(SmallPoint(SB_ENDSCROLL, 0))), 0);
- FLeftMouseButtonDown := False;
+ FLeftButtonDown := False;
HorzSliderState := tsThumbBtnHorzNormal;
PaintScroll;
Handled := True;
@@ -577,109 +645,10 @@ procedure TVclStyleScrollBarsHook.WMLButtonUp(var Msg: TWMMouse);
end;
PaintScroll;
end;
- FLeftMouseButtonDown := False;
-end;
-
-procedure TVclStyleScrollBarsHook.WMMouseMove(var Msg: TWMMouse);
-var
- SF: TScrollInfo;
- OverrideMax: Integer;
-begin
- if VertSliderState = tsThumbBtnVertPressed then
- begin
- SF.fMask := SIF_ALL;
- SF.cbSize := SizeOf(SF);
- GetScrollInfo(Handle, SB_VERT, SF);
-
- OverrideMax := SF.nMax;
- if 0 < SF.nPage then
- OverrideMax := SF.nMax - Integer(SF.nPage) + 1;
- ScrollPos := System.Math.EnsureRange(ListPos + (OverrideMax - SF.nMin) * ((Mouse.CursorPos.Y - PrevScrollPos) / (VertTrackRect.Height - VertSliderRect.Height)),
- SF.nMin, OverrideMax);
- SF.fMask := SIF_POS;
- SF.nPos := Round(ScrollPos);
- SetScrollInfo(Handle, SB_VERT, SF, False);
- PostMessage(Handle, WM_VSCROLL, WPARAM(UInt32(SmallPoint(SB_THUMBPOSITION, Min(SF.nPos, High(SmallInt))))), 0);
-
- PaintScroll;
- Handled := True;
- Exit;
- end else
- if VertSliderState = tsThumbBtnVertHot then
- begin
- VertSliderState := tsThumbBtnVertNormal;
- PaintScroll;
- end;
-
- if HorzSliderState = tsThumbBtnHorzPressed then
- begin
- SF.fMask := SIF_ALL;
- SF.cbSize := SizeOf(SF);
- GetScrollInfo(Handle, SB_HORZ, SF);
-
- OverrideMax := SF.nMax;
- if 0 < SF.nPage then
- OverrideMax := SF.nMax - Integer(SF.nPage) + 1;
- ScrollPos := System.Math.EnsureRange(ListPos + (OverrideMax - SF.nMin) * ((Mouse.CursorPos.X - PrevScrollPos) / (HorzTrackRect.Width - HorzSliderRect.Width)),
- SF.nMin, OverrideMax);
- SF.fMask := SIF_POS;
- SF.nPos := Round(ScrollPos);
- SetScrollInfo(Handle, SB_HORZ, SF, False);
- PostMessage(Handle, WM_HSCROLL, WPARAM(UInt32(SmallPoint(SB_THUMBPOSITION, Min(SF.nPos, High(SmallInt))))), 0);
-
- PaintScroll;
- Handled := True;
- Exit;
- end else
- if HorzSliderState = tsThumbBtnHorzHot then
- begin
- HorzSliderState := tsThumbBtnHorzNormal;
- PaintScroll;
- end;
-
- if (HorzUpState <> tsArrowBtnLeftPressed) and (HorzUpState = tsArrowBtnLeftHot) then
- begin
- HorzUpState := tsArrowBtnLeftNormal;
- PaintScroll;
- end;
-
- if (HorzDownState <> tsArrowBtnRightPressed) and (HorzDownState = tsArrowBtnRightHot) then
- begin
- HorzDownState := tsArrowBtnRightNormal;
- PaintScroll;
- end;
-
- if (VertUpState <> tsArrowBtnUpPressed) and (VertUpState = tsArrowBtnUpHot) then
- begin
- VertUpState := tsArrowBtnUpNormal;
- PaintScroll;
- end;
-
- if (VertDownState <> tsArrowBtnDownPressed) and (VertDownState = tsArrowBtnDownHot) then
- begin
- VertDownState := tsArrowBtnDownNormal;
- PaintScroll;
- end;
-
- CallDefaultProc(TMessage(Msg));
- if FLeftMouseButtonDown then
- PaintScroll;
- Handled := True;
-end;
-
-procedure TVclStyleScrollBarsHook.WMMouseWheel(var Msg: TMessage);
-begin
- CallDefaultProc(TMessage(Msg));
- CalcScrollBarsRect;
- PaintScroll;
- Handled := True;
-end;
-
-procedure TVclStyleScrollBarsHook.WMNCLButtonDblClk(var Msg: TWMMouse);
-begin
- WMNCLButtonDown(Msg);
+ FLeftButtonDown := False;
end;
+//----------------------------------------------------------------------------------------------------------------------
procedure TVclStyleScrollBarsHook.WMNCLButtonDown(var Msg: TWMMouse);
var
P: TPoint;
@@ -688,11 +657,11 @@ procedure TVclStyleScrollBarsHook.WMNCLButtonDown(var Msg: TWMMouse);
P := NCMousePosToClient(Point(Msg.XPos, Msg.YPos));
if not PointInTreeHeader(P) then
begin
- if FVertScrollWnd.Visible and FVertScrollWnd.Enabled then
+ if VertScrollWnd.Visible and VertScrollWnd.Enabled then
begin
if PtInRect(VertSliderRect, P) then
begin
- FLeftMouseButtonDown := True;
+ FLeftButtonDown := True;
SF.fMask := SIF_ALL;
SF.cbSize := SizeOf(SF);
GetScrollInfo(Handle, SB_VERT, SF);
@@ -715,7 +684,7 @@ procedure TVclStyleScrollBarsHook.WMNCLButtonDown(var Msg: TWMMouse);
begin
if PtInRect(HorzSliderRect, P) then
begin
- FLeftMouseButtonDown := True;
+ FLeftButtonDown := True;
SF.fMask := SIF_ALL;
SF.cbSize := SizeOf(SF);
GetScrollInfo(Handle, SB_HORZ, SF);
@@ -733,11 +702,15 @@ procedure TVclStyleScrollBarsHook.WMNCLButtonDown(var Msg: TWMMouse);
else if PtInRect(HorzUpButtonRect, P) then
HorzUpState := tsArrowBtnLeftPressed;
end;
- FLeftMouseButtonDown := True;
+ FLeftButtonDown := True;
PaintScroll;
end;
end;
+//----------------------------------------------------------------------------------------------------------------------
+//----------------------------------------------------------------------------------------------------------------------
+
+
procedure TVclStyleScrollBarsHook.WMNCLButtonUp(var Msg: TWMMouse);
var
P: TPoint;
@@ -745,11 +718,11 @@ procedure TVclStyleScrollBarsHook.WMNCLButtonUp(var Msg: TWMMouse);
P := NCMousePosToClient(Point(Msg.XPos, Msg.YPos));
if not PointInTreeHeader(P) then
begin
- if FVertScrollWnd.Visible and FVertScrollWnd.Enabled then
+ if VertScrollWnd.Visible and VertScrollWnd.Enabled then
begin
if VertSliderState = tsThumbBtnVertPressed then
begin
- FLeftMouseButtonDown := False;
+ FLeftButtonDown := False;
VertSliderState := tsThumbBtnVertNormal;
PaintScroll;
Handled := True;
@@ -771,7 +744,7 @@ procedure TVclStyleScrollBarsHook.WMNCLButtonUp(var Msg: TWMMouse);
begin
if HorzSliderState = tsThumbBtnHorzPressed then
begin
- FLeftMouseButtonDown := False;
+ FLeftButtonDown := False;
HorzSliderState := tsThumbBtnHorzNormal;
PaintScroll;
Handled := True;
@@ -797,6 +770,132 @@ procedure TVclStyleScrollBarsHook.WMNCLButtonUp(var Msg: TWMMouse);
Handled := True;
end;
+//----------------------------------------------------------------------------------------------------------------------
+
+procedure TVclStyleScrollBarsHook.WMNCLButtonDblClk(var Msg: TWMMouse);
+begin
+ WMNCLButtonDown(Msg);
+end;
+
+//----------------------------------------------------------------------------------------------------------------------
+
+procedure TVclStyleScrollBarsHook.WMNCPaint(var Msg: TMessage);
+begin
+ //if (tsWindowCreating in TBaseVirtualTree(Control).TreeStates) then
+ // UpdateScrollBarWindow;
+ //inherited;
+end;
+
+//----------------------------------------------------------------------------------------------------------------------
+
+procedure TVclStyleScrollBarsHook.WMHScroll(var Msg: TWMHScroll);
+begin
+ CallDefaultProc(TMessage(Msg));
+ PaintScroll;
+ Handled := True;
+end;
+
+//----------------------------------------------------------------------------------------------------------------------
+
+procedure TVclStyleScrollBarsHook.WMMouseWheel(var Msg: TMessage);
+begin
+ CallDefaultProc(TMessage(Msg));
+ CalcScrollBarsRect;
+ PaintScroll;
+ Handled := True;
+end;
+
+//----------------------------------------------------------------------------------------------------------------------
+
+procedure TVclStyleScrollBarsHook.WMMouseMove(var Msg: TWMMouse);
+var
+ SF: TScrollInfo;
+ OverrideMax: Integer;
+begin
+ if VertSliderState = tsThumbBtnVertPressed then
+ begin
+ SF.fMask := SIF_ALL;
+ SF.cbSize := SizeOf(SF);
+ GetScrollInfo(Handle, SB_VERT, SF);
+
+ OverrideMax := SF.nMax;
+ if 0 < SF.nPage then
+ OverrideMax := SF.nMax - Integer(SF.nPage) + 1;
+ ScrollPos := System.Math.EnsureRange(ListPos + (OverrideMax - SF.nMin) * ((Mouse.CursorPos.Y - PrevScrollPos) / (VertTrackRect.Height - VertSliderRect.Height)),
+ SF.nMin, OverrideMax);
+ SF.fMask := SIF_POS;
+ SF.nPos := Round(ScrollPos);
+ SetScrollInfo(Handle, SB_VERT, SF, False);
+ PostMessage(Handle, WM_VSCROLL, WPARAM(UInt32(SmallPoint(SB_THUMBPOSITION, Min(SF.nPos, High(SmallInt))))), 0);
+
+ PaintScroll;
+ Handled := True;
+ Exit;
+ end else
+ if VertSliderState = tsThumbBtnVertHot then
+ begin
+ VertSliderState := tsThumbBtnVertNormal;
+ PaintScroll;
+ end;
+
+ if HorzSliderState = tsThumbBtnHorzPressed then
+ begin
+ SF.fMask := SIF_ALL;
+ SF.cbSize := SizeOf(SF);
+ GetScrollInfo(Handle, SB_HORZ, SF);
+
+ OverrideMax := SF.nMax;
+ if 0 < SF.nPage then
+ OverrideMax := SF.nMax - Integer(SF.nPage) + 1;
+ ScrollPos := System.Math.EnsureRange(ListPos + (OverrideMax - SF.nMin) * ((Mouse.CursorPos.X - PrevScrollPos) / (HorzTrackRect.Width - HorzSliderRect.Width)),
+ SF.nMin, OverrideMax);
+ SF.fMask := SIF_POS;
+ SF.nPos := Round(ScrollPos);
+ SetScrollInfo(Handle, SB_HORZ, SF, False);
+ PostMessage(Handle, WM_HSCROLL, WPARAM(UInt32(SmallPoint(SB_THUMBPOSITION, Min(SF.nPos, High(SmallInt))))), 0);
+
+ PaintScroll;
+ Handled := True;
+ Exit;
+ end else
+ if HorzSliderState = tsThumbBtnHorzHot then
+ begin
+ HorzSliderState := tsThumbBtnHorzNormal;
+ PaintScroll;
+ end;
+
+ if (HorzUpState <> tsArrowBtnLeftPressed) and (HorzUpState = tsArrowBtnLeftHot) then
+ begin
+ HorzUpState := tsArrowBtnLeftNormal;
+ PaintScroll;
+ end;
+
+ if (HorzDownState <> tsArrowBtnRightPressed) and (HorzDownState = tsArrowBtnRightHot) then
+ begin
+ HorzDownState := tsArrowBtnRightNormal;
+ PaintScroll;
+ end;
+
+ if (VertUpState <> tsArrowBtnUpPressed) and (VertUpState = tsArrowBtnUpHot) then
+ begin
+ VertUpState := tsArrowBtnUpNormal;
+ PaintScroll;
+ end;
+
+ if (VertDownState <> tsArrowBtnDownPressed) and (VertDownState = tsArrowBtnDownHot) then
+ begin
+ VertDownState := tsArrowBtnDownNormal;
+ PaintScroll;
+ end;
+
+ CallDefaultProc(TMessage(Msg));
+ if LeftButtonDown then
+ PaintScroll;
+ Handled := True;
+end;
+
+//----------------------------------------------------------------------------------------------------------------------
+
procedure TVclStyleScrollBarsHook.WMNCMouseMove(var Msg: TWMMouse);
var
P: TPoint;
@@ -814,7 +913,7 @@ procedure TVclStyleScrollBarsHook.WMNCMouseMove(var Msg: TWMMouse);
end;
MustUpdateScroll := False;
- if FVertScrollWnd.Visible and FVertScrollWnd.Enabled then
+ if VertScrollWnd.Visible and VertScrollWnd.Enabled then
begin
B := PtInRect(VertSliderRect, P);
if B and (VertSliderState = tsThumbBtnVertNormal) then
@@ -853,7 +952,7 @@ procedure TVclStyleScrollBarsHook.WMNCMouseMove(var Msg: TWMMouse);
end;
end;
- if FHorzScrollWnd.Visible and FHorzScrollWnd.Enabled then
+ if HorzScrollWnd.Visible and HorzScrollWnd.Enabled then
begin
B := PtInRect(HorzSliderRect, P);
if B and (HorzSliderState = tsThumbBtnHorzNormal) then
@@ -896,12 +995,7 @@ procedure TVclStyleScrollBarsHook.WMNCMouseMove(var Msg: TWMMouse);
PaintScroll;
end;
-procedure TVclStyleScrollBarsHook.WMNCPaint(var Msg: TMessage);
-begin
- //if (tsWindowCreating in TBaseVirtualTree(Control).TreeStates) then
- // UpdateScrollBarWindow;
- //inherited;
-end;
+//----------------------------------------------------------------------------------------------------------------------
procedure TVclStyleScrollBarsHook.WMSize(var Msg: TMessage);
begin
@@ -911,6 +1005,8 @@ procedure TVclStyleScrollBarsHook.WMSize(var Msg: TMessage);
Handled := True;
end;
+//----------------------------------------------------------------------------------------------------------------------
+
procedure TVclStyleScrollBarsHook.WMMove(var Msg: TMessage);
begin
CallDefaultProc(TMessage(Msg));
@@ -922,21 +1018,24 @@ procedure TVclStyleScrollBarsHook.WMMove(var Msg: TMessage);
Handled := True;
end;
+//----------------------------------------------------------------------------------------------------------------------
+
procedure TVclStyleScrollBarsHook.WMPosChanged(var Msg: TMessage);
begin
WMMove(Msg);
end;
+//----------------------------------------------------------------------------------------------------------------------
+
procedure TVclStyleScrollBarsHook.WMVScroll(var Msg: TWMVScroll);
begin
CallDefaultProc(TMessage(Msg));
- if not (Msg.ScrollCode in [SB_THUMBTRACK, SB_THUMBPOSITION]) then
- UpdateScroll
- else
- PaintScroll;
+ PaintScroll;
Handled := True;
end;
+//----------------------------------------------------------------------------------------------------------------------
+
{ TVclStyleScrollBarsHook.TVclStyleScrollBarWindow }
constructor TVclStyleScrollBarsHook.TScrollWindow.Create(AOwner: TComponent);
@@ -947,16 +1046,22 @@ constructor TVclStyleScrollBarsHook.TScrollWindow.Create(AOwner: TComponent);
FVertical := False;
end;
+//----------------------------------------------------------------------------------------------------------------------
+
procedure TVclStyleScrollBarsHook.TScrollWindow.WMEraseBkgnd(var Msg: TMessage);
begin
Msg.Result := 1;
end;
+//----------------------------------------------------------------------------------------------------------------------
+
procedure TVclStyleScrollBarsHook.TScrollWindow.WMNCHitTest(var Msg: TWMNCHitTest);
begin
Msg.Result := HTTRANSPARENT;
end;
+//----------------------------------------------------------------------------------------------------------------------
+
procedure TVclStyleScrollBarsHook.TScrollWindow.WMPaint(var Msg: TWMPaint);
var
PS: TPaintStruct;
@@ -988,6 +1093,7 @@ procedure TVclStyleScrollBarsHook.TScrollWindow.WMPaint(var Msg: TWMPaint);
EndPaint(Handle, PS);
end;
end;
+{$ifend}
initialization
TCustomStyleEngine.RegisterStyleHook(TVirtualStringTree, TVclStyleScrollBarsHook);
@@ -998,4 +1104,3 @@ finalization
TCustomStyleEngine.UnRegisterStyleHook(TVirtualDrawTree, TVclStyleScrollBarsHook);
end.
-
diff --git a/Source/VirtualTrees.pas b/Source/VirtualTrees.pas
index aea270260..fec7a69d2 100644
--- a/Source/VirtualTrees.pas
+++ b/Source/VirtualTrees.pas
@@ -87,7 +87,7 @@ interface
{$ENDIF}
const
- VTVersion = '7.6.0' deprecated 'This const is going to be removed in a future version';
+ VTVersion = '7.6.2' deprecated 'This const is going to be removed in a future version';
const
VTTreeStreamVersion = 3;
@@ -98,6 +98,7 @@ interface
FadeAnimationStepCount = 255; // Number of animation steps for hint fading (0..255).
ShadowSize = 5; // Size in pixels of the hint shadow. This value has no influence on Win2K and XP systems
// as those OSes have native shadow support.
+ cDefaultTextMargin = 4; // The default margin of text
// Special identifiers for columns.
NoColumn = -1;
@@ -1350,6 +1351,7 @@ TVTHeader = class(TPersistent)
procedure SetSortDirection(const Value: TSortDirection);
procedure SetStyle(Value: TVTHeaderStyle);
function GetRestoreSelectionColumnIndex: Integer;
+ function AreColumnsStored: Boolean;
protected
FStates: THeaderStates; // Used to keep track of internal states the header can enter.
FDragStart: TPoint; // initial mouse drag position
@@ -1408,6 +1410,7 @@ TVTHeader = class(TPersistent)
procedure RestoreColumns;
procedure SaveToStream(const Stream: TStream); virtual;
procedure StyleChanged(); virtual;
+ procedure ToggleSortDirection;
property DragImage: TVTDragImage read FDragImage;
property RestoreSelectionColumnIndex: Integer read GetRestoreSelectionColumnIndex write fRestoreSelectionColumnIndex default NoColumn;
@@ -1418,7 +1421,7 @@ TVTHeader = class(TPersistent)
published
property AutoSizeIndex: TColumnIndex read FAutoSizeIndex write SetAutoSizeIndex;
property Background: TColor read FBackgroundColor write SetBackground default clBtnFace;
- property Columns: TVirtualTreeColumns read FColumns write SetColumns stored False; // Stored by the owner tree to support VFI.
+ property Columns: TVirtualTreeColumns read FColumns write SetColumns stored AreColumnsStored;
property DefaultHeight: Integer read FDefaultHeight write SetDefaultHeight default 19;
property Font: TFont read FFont write SetFont stored IsFontStored;
property FixedAreaConstraints: TVTFixedAreaConstraints read FFixedAreaConstraints write FFixedAreaConstraints;
@@ -2535,7 +2538,6 @@ TBaseVirtualTree = class(TCustomControl)
procedure WMThemeChanged(var Message: TMessage); message WM_THEMECHANGED;
procedure WMVScroll(var Message: TWMVScroll); message WM_VSCROLL;
function GetRangeX: Cardinal;
- function GetDoubleBuffered: Boolean;
procedure SetDoubleBuffered(const Value: Boolean);
function GetVclStyleEnabled: Boolean; inline;
procedure SetOnPrepareButtonImages(const Value: TVTPrepareButtonImagesEvent);
@@ -2718,6 +2720,7 @@ TBaseVirtualTree = class(TCustomControl)
ImgCheckState: TCheckState = csUncheckedNormal; ImgEnabled: Boolean = True): Integer; virtual;
function GetColumnClass: TVirtualTreeColumnClass; virtual;
function GetDefaultHintKind: TVTHintKind; virtual;
+ function GetDoubleBuffered: Boolean; {$if CompilerVersion >= 36} override; {$ifend}
function GetHeaderClass: TVTHeaderClass; virtual;
function GetHintWindowClass: THintWindowClass; virtual;
procedure GetImageIndex(var Info: TVTPaintInfo; Kind: TVTImageKind; InfoIndex: TVTImageInfoIndex); virtual;
@@ -3135,6 +3138,7 @@ TBaseVirtualTree = class(TCustomControl)
var Text: string); virtual;
function GetTreeRect: TRect;
function GetVisibleParent(Node: PVirtualNode; IncludeFiltered: Boolean = False): PVirtualNode;
+ function GetTopInvisibleParent(Node: PVirtualNode): PVirtualNode;
function HasAsParent(Node, PotentialParent: PVirtualNode): Boolean;
function InsertNode(Node: PVirtualNode; Mode: TVTNodeAttachMode; UserData: Pointer = nil): PVirtualNode;
procedure InvalidateChildren(Node: PVirtualNode; Recursive: Boolean);
@@ -3519,6 +3523,7 @@ TCustomVirtualStringTree = class(TBaseVirtualTree)
function Path(Node: PVirtualNode; Column: TColumnIndex; Delimiter: Char): string;
procedure ReinitNode(Node: PVirtualNode; Recursive: Boolean); override;
procedure AddToSelection(Node: PVirtualNode; NotifySynced: Boolean); override;
+ procedure AddToSelection(const NewItems: TNodeArray; NewLength: Integer; ForceInsert: Boolean); override;
procedure RemoveFromSelection(Node: PVirtualNode); override;
function SaveToCSVFile(const FileNameWithPath : TFileName; const IncludeHeading : Boolean) : Boolean;
/// Alternate text for images used in Accessibility.
@@ -7072,20 +7077,23 @@ procedure TVirtualTreeColumn.SetWidth(Value: Integer);
Inc(TotalFixedMinWidth, FColumns[I].MinWidth);
end;
- // The percentage values have precedence over the pixel values.
- If FMaxWidthPercent > 0 then
- TotalFixedMinWidth:= Min((ClientWidth * FMaxWidthPercent) div 100, TotalFixedMinWidth);
- If FMinWidthPercent > 0 then
- TotalFixedMaxWidth := Max((ClientWidth * FMinWidthPercent) div 100, TotalFixedMaxWidth);
-
- EffectiveMaxWidth := Min(TotalFixedMaxWidth - (GetVisibleFixedWidth - Self.FWidth), FMaxWidth);
- EffectiveMinWidth := Max(TotalFixedMinWidth - (GetVisibleFixedWidth - Self.FWidth), FMinWidth);
- Value := Min(Max(Value, EffectiveMinWidth), EffectiveMaxWidth);
-
- if FMinWidthPercent > 0 then
- Value := Max((ClientWidth * FMinWidthPercent) div 100 - GetVisibleFixedWidth + Self.FWidth, Value);
- if FMaxWidthPercent > 0 then
- Value := Min((ClientWidth * FMaxWidthPercent) div 100 - GetVisibleFixedWidth + Self.FWidth, Value);
+ if HandleAllocated then // Prevent premature creation of window handle, see issue #1073
+ begin
+ // The percentage values have precedence over the pixel values.
+ If FMaxWidthPercent > 0 then
+ TotalFixedMinWidth:= Min((ClientWidth * FMaxWidthPercent) div 100, TotalFixedMinWidth);
+ If FMinWidthPercent > 0 then
+ TotalFixedMaxWidth := Max((ClientWidth * FMinWidthPercent) div 100, TotalFixedMaxWidth);
+
+ EffectiveMaxWidth := Min(TotalFixedMaxWidth - (GetVisibleFixedWidth - Self.FWidth), FMaxWidth);
+ EffectiveMinWidth := Max(TotalFixedMinWidth - (GetVisibleFixedWidth - Self.FWidth), FMinWidth);
+ Value := Min(Max(Value, EffectiveMinWidth), EffectiveMaxWidth);
+
+ if FMinWidthPercent > 0 then
+ Value := Max((ClientWidth * FMinWidthPercent) div 100 - GetVisibleFixedWidth + Self.FWidth, Value);
+ if FMaxWidthPercent > 0 then
+ Value := Min((ClientWidth * FMaxWidthPercent) div 100 - GetVisibleFixedWidth + Self.FWidth, Value);
+ end;// if HandleAllocated
end;
end
else
@@ -7480,27 +7488,8 @@ procedure TVirtualTreeColumn.GetAbsoluteBounds(var Left, Right: Integer);
//----------------------------------------------------------------------------------------------------------------------
function TVirtualTreeColumn.GetDisplayName: string;
-
-// Returns the column text if it only contains ANSI characters, otherwise the column id is returned because the IDE
-// still cannot handle Unicode strings.
-
-var
- I: Integer;
-
begin
- // Check if the text of the column contains characters > 255
- I := 1;
- while I <= Length(FText) do
- begin
- if Ord(FText[I]) > 255 then
- Break;
- Inc(I);
- end;
-
- if I > Length(FText) then
- Result := FText // implicit conversion
- else
- Result := Format('Column %d', [Index]);
+ Result := FText // Use column header caption as display name
end;
//----------------------------------------------------------------------------------------------------------------------
@@ -8104,6 +8093,17 @@ procedure TVirtualTreeColumns.FixPositions;
I: Integer;
begin
+ // Fox positions that too large, see #1179
+ for I := 0 to Count - 1 do
+ begin
+ if Integer(Items[I].Position) >= Count then
+ begin
+ UpdatePositions(True);
+ break;
+ end;
+ end; // for
+
+ // Update position array
for I := 0 to Count - 1 do
FPositionToIndex[Items[I].Position] := I;
@@ -10021,7 +10021,7 @@ procedure TVTHeader.SetStyle(Value: TVTHeaderStyle);
procedure TVTHeader.StyleChanged();
begin
{$IF CompilerVersion < 31} // See issue #1043
- AutoScale(False); //Elements may have changed in size
+ AutoScale(); //Elements may have changed in size
{$IFEND}
end;
@@ -10556,17 +10556,14 @@ function TVTHeader.HandleMessage(var Message: TMessage): Boolean;
//--------------- local function --------------------------------------------
function HSplitterHit: Boolean;
-
- var
- NextCol: TColumnIndex;
-
begin
Result := (hoColumnResize in FOptions) and DetermineSplitterIndex(P);
if Result and not InHeader(P) then
begin
- NextCol := FColumns.GetNextVisibleColumn(FColumns.TrackIndex);
- if not (coFixed in FColumns[FColumns.TrackIndex].Options) or (NextCol <= NoColumn) or
- (coFixed in FColumns[NextCol].Options) or (P.Y > Integer(Treeview.FRangeY)) then
+ // Code commented due to issue #1067. What was the orginal inention of this code? It does not make much sense unless you allow column resize outside the header.
+ // NextCol := FColumns.GetNextVisibleColumn(FColumns.TrackIndex);
+ // if not (coFixed in FColumns[FColumns.TrackIndex].Options) or (NextCol <= NoColumn) or
+ // (coFixed in FColumns[NextCol].Options) or (P.Y > Integer(Treeview.FRangeY)) then
Result := False;
end;
end;
@@ -11279,6 +11276,13 @@ function TVTHeader.AllowFocus(ColumnIndex: TColumnIndex): Boolean;
//----------------------------------------------------------------------------------------------------------------------
+function TVTHeader.AreColumnsStored: Boolean;
+begin
+ // The columns are stored by the owner tree to support Visual Form Inheritance
+ // GnutGetText skips non-stored properties, so retur Stored True at runtime
+ Result := not (csDesigning in Self.Treeview.ComponentState);
+end;
+
procedure TVTHeader.Assign(Source: TPersistent);
begin
@@ -11782,6 +11786,19 @@ procedure TVTHeader.RestoreColumns;
//----------------------------------------------------------------------------------------------------------------------
+procedure TVTHeader.ToggleSortDirection;
+
+// Toggles the current sorting direction
+
+begin
+ if SortDirection = sdDescending then
+ SortDirection := sdAscending
+ else
+ SortDirection := sdDescending;
+end;
+
+//----------------------------------------------------------------------------------------------------------------------
+
procedure TVTHeader.SaveToStream(const Stream: TStream);
// Saves the complete state of the header into the provided stream.
@@ -11972,7 +11989,7 @@ function TVTColors.GetColor(const Index: TVTColorEnum): TColor;
begin
// Only try to fetch the color via StyleServices if theses are enabled
// Return default/user defined color otherwise
- if FOwner.VclStyleEnabled then
+ if not (csDesigning in FOwner.ComponentState) { see issue #1185 } and FOwner.VclStyleEnabled then
begin
// If the ElementDetails are not defined, fall back to the SystemColor
case Index of
@@ -12063,9 +12080,10 @@ procedure TVTColors.SetColor(const Index: TVTColorEnum; const Value: TColor);
cBorderColor:
RedrawWindow(FOwner.Handle, nil, 0, RDW_FRAME or RDW_INVALIDATE or RDW_NOERASE or RDW_NOCHILDREN)
else
- FOwner.Invalidate;
- end;
- end;
+ if not (tsPainting in FOwner.TreeStates) then
+ FOwner.Invalidate;
+ end;//case
+ end;// if
end;
end;
@@ -16431,8 +16449,8 @@ procedure TBaseVirtualTree.TVMGetItem(var Message: TMessage);
if vsExpanded in Node.States then
Item.state := Item.state or TVIS_EXPANDED;
- // Construct state image and overlay image indices. They are one based, btw.
- // and zero means there is no image.
+ // Construct state image and overlay image indices. They are zero based, btw.
+ // and -1 means there is no image.
ImageIndex := -1;
DoGetImageIndex(Node, ikState, -1, Ghosted, ImageIndex);
Item.state := Item.state or Byte(IndexToStateImageMask(ImageIndex + 1));
@@ -17662,7 +17680,7 @@ procedure TBaseVirtualTree.WMNCDestroy(var Message: TWMNCDestroy);
StopTimer(ChangeTimer);
StopTimer(StructureChangeTimer);
- if not (csDesigning in ComponentState) and (toAcceptOLEDrop in FOptions.MiscOptions) then
+ if not (csDesigning in ComponentState) and (toAcceptOLEDrop in FOptions.MiscOptions) and HandleAllocated then
RevokeDragDrop(Handle);
// Clean up other stuff.
@@ -17806,6 +17824,12 @@ procedure TBaseVirtualTree.WMPrintClient(var Message: TWMPrintClient);
Canvas: TCanvas;
begin
+ if RTLVersion >= 36 then // see issue #1248, for newer Delphi versions use inherited version of WMPrintClient()
+ begin
+ inherited;
+ exit;
+ end;
+
// Draw only if the window is visible or visibility is not required.
if ((Message.Flags and PRF_CHECKVISIBLE) = 0) or IsWindowVisible(Handle) then
begin
@@ -18550,38 +18574,25 @@ procedure TBaseVirtualTree.Change(Node: PVirtualNode);
//----------------------------------------------------------------------------------------------------------------------
procedure TBaseVirtualTree.ChangeScale(M, D: Integer{$if CompilerVersion >= 31}; isDpiChange: Boolean{$ifend});
-{$if CompilerVersion < 27}
-const
- DefaultScalingFlags = [sfLeft, sfTop, sfWidth, sfHeight, sfFont]; // Was introduced with XE6: http://docwiki.embarcadero.com/Libraries/XE6/en/Vcl.Controls.TControl.DefaultScalingFlags
-{$ifend}
-var
- Flags: TScalingFlags;
begin
if (toAutoChangeScale in FOptions.AutoOptions) then
begin
if (M <> D) then
begin
- // It is important to evaluate the TScalingFlags before calling inherited, becuase they are differetn afterwards!
- if csLoading in ComponentState then
- Flags := ScalingFlags
- else
- Flags := DefaultScalingFlags; // Important for #677
- if (sfHeight in Flags) then begin
- FHeader.ChangeScale(M, D, {$if CompilerVersion >= 31}isDpiChange{$ELSE} M <> D{$ifend});
- SetDefaultNodeHeight(MulDiv(FDefaultNodeHeight, M, D));
- Indent := MulDiv(Indent, M, D);
- FTextMargin := MulDiv(FTextMargin, M, D);
- FMargin := MulDiv(FMargin, M, D);
- FImagesMargin := MulDiv(FImagesMargin, M, D);
- // Scale utility images, #796
- if FCheckImageKind = ckSystemDefault then begin
- FreeAndNil(FCheckImages);
- if HandleAllocated then
- FCheckImages := CreateSystemImageSet(Self);
- end;
- UpdateHeaderRect();
- ScaleNodeHeights(M, D);
- end;//if sfHeight
+ FHeader.ChangeScale(M, D, {$if CompilerVersion >= 31}isDpiChange{$ELSE} M <> D{$ifend});
+ SetDefaultNodeHeight(MulDiv(FDefaultNodeHeight, M, D));
+ Indent := MulDiv(Indent, M, D);
+ FTextMargin := MulDiv(FTextMargin, M, D);
+ FMargin := MulDiv(FMargin, M, D);
+ FImagesMargin := MulDiv(FImagesMargin, M, D);
+ // Scale utility images, #796
+ if FCheckImageKind = ckSystemDefault then begin
+ FreeAndNil(FCheckImages);
+ if HandleAllocated then
+ FCheckImages := CreateSystemImageSet(Self);
+ end;
+ UpdateHeaderRect();
+ ScaleNodeHeights(M, D);
end;// if M<>D
end;//if toAutoChangeScale
inherited ChangeScale(M, D{$if CompilerVersion >= 31}, isDpiChange{$ifend});
@@ -18610,8 +18621,7 @@ procedure TBaseVirtualTree.ScaleNodeHeights(M, D: Integer);
Run.NodeHeight := MulDiv(Run.NodeHeight, M, D);
// The next three lines fix issue #1000
lNewNodeTotalHeight := MulDiv(Run.TotalHeight, M, D);
- FRoot.TotalHeight := FRoot.TotalHeight + lNewNodeTotalHeight - Run.TotalHeight; // 1 EIntOverflow exception seen here in debug build in 01/2021
- Run.TotalHeight := lNewNodeTotalHeight;
+ FRoot.TotalHeight := Cardinal(Int64(FRoot.TotalHeight) + Int64(lNewNodeTotalHeight) - Int64(Run.TotalHeight)); // Avoiding EIntOverflow exception.
end;
Run := GetNextNoInit(Run);
end; // while
@@ -19694,7 +19704,7 @@ procedure TBaseVirtualTree.DoChecked(Node: PVirtualNode);
begin
if Assigned(FOnChecked) then
FOnChecked(Self, Node);
- if Assigned(FAccessibleItem) then
+ if Assigned(FAccessibleItem) and (Self.UpdateCount = 0) then // See issue #1174
NotifyWinEvent(EVENT_OBJECT_STATECHANGE, Handle, OBJID_CLIENT, CHILDID_SELF);
end;
@@ -19725,7 +19735,7 @@ procedure TBaseVirtualTree.DoCollapsed(Node: PVirtualNode);
if Assigned(FOnCollapsed) then
FOnCollapsed(Self, Node);
- if Assigned(FAccessibleItem) then
+ if Assigned(FAccessibleItem) and (Self.UpdateCount = 0) then // See issue #1174
NotifyWinEvent(EVENT_OBJECT_STATECHANGE, Handle, OBJID_CLIENT, CHILDID_SELF);
if (toAlwaysSelectNode in TreeOptions.SelectionOptions) then
@@ -20115,7 +20125,7 @@ procedure TBaseVirtualTree.DoExpanded(Node: PVirtualNode);
if Assigned(FOnExpanded) then
FOnExpanded(Self, Node);
- if Assigned(FAccessibleItem) then
+ if Assigned(FAccessibleItem) and (Self.UpdateCount = 0) then // See issue #1174
NotifyWinEvent(EVENT_OBJECT_STATECHANGE, Handle, OBJID_CLIENT, CHILDID_SELF);
end;
@@ -22628,8 +22638,6 @@ procedure TBaseVirtualTree.HandleMouseDown(var Message: TWMMouse; var HitInfo: T
//--------------- end local functions ---------------------------------------
begin
- if IsEmpty then
- Exit; // Nothing to do
if [tsWheelPanning, tsWheelScrolling] * FStates <> [] then
begin
StopWheelPanning;
@@ -22658,6 +22666,9 @@ procedure TBaseVirtualTree.HandleMouseDown(var Message: TWMMouse; var HitInfo: T
GetHitTestInfoAt(Message.XPos, Message.YPos, True, HitInfo);
end;
+ if IsEmpty then
+ exit;
+
// Keep clicked column in case the application needs it.
FHeader.Columns.FClickIndex := HitInfo.HitColumn;
@@ -22703,7 +22714,7 @@ procedure TBaseVirtualTree.HandleMouseDown(var Message: TWMMouse; var HitInfo: T
IsLabelHit := not AltPressed and not (toSimpleDrawSelection in FOptions.SelectionOptions) and
((hiOnItemLabel in HitInfo.HitPositions) or (hiOnNormalIcon in HitInfo.HitPositions));
- IsCellHit := not AltPressed and not IsLabelHit and Assigned(HitInfo.HitNode) and
+ IsCellHit := not IsLabelHit and Assigned(HitInfo.HitNode) and
([hiOnItemButton, hiOnItemCheckBox, hiNoWhere] * HitInfo.HitPositions = []) and
((toFullRowSelect in FOptions.SelectionOptions) or
((toGridExtensions in FOptions.MiscOptions) and (HitInfo.HitColumn > NoColumn)));
@@ -23316,19 +23327,19 @@ function TBaseVirtualTree.InternalAddToSelection(const NewItems: TNodeArray; New
Inc(FSelectionCount, AddedNodesSize);
// post process added nodes
+ // First set vsSelected flag for all newly selected nodes, then fire event
+ for I := 0 to AddedNodesSize - 1 do
+ Include(NewItems[I].States, vsSelected);
+
for I := 0 to AddedNodesSize - 1 do
begin
PTmpNode := NewItems[I];
- //sync path note: on click, multi-select ctrl-click and draw selection
- Include(PTmpNode.States, vsSelected);
// call on add event callbackevent
if Assigned(FOnAddToSelection) then
FOnAddToSelection(Self, PTmpNode);
if SyncCheckstateWithSelection[PTmpNode] then
checkstate[PTmpNode] := csCheckedNormal;
end;
-
- Assert(FSelectionCount = (lPreviousSelectedCount + NewLength), 'Fixing issue #487 seems to ahve caused a problem here.')
end;
end;
@@ -25826,7 +25837,7 @@ procedure TBaseVirtualTree.VclStyleChanged();
// Updates the member FVclStyleEnabled, should be called initially and when the VCL style changes
begin
- FVclStyleEnabled := StyleServices.Enabled and not StyleServices.IsSystemStyle and not (csDesigning in ComponentState);
+ FVclStyleEnabled := StyleServices.Enabled and not StyleServices.IsSystemStyle {$IF CompilerVersion < 35} and not (csDesigning in ComponentState) {$ifend};
Header.StyleChanged();
end;
@@ -26959,6 +26970,8 @@ procedure TBaseVirtualTree.EndUpdate;
Invalidate;
UpdateDesigner;
end;
+ if Assigned(FAccessibleItem) then // See issue #1174
+ NotifyWinEvent(EVENT_OBJECT_STATECHANGE, Handle, OBJID_CLIENT, CHILDID_SELF);
end;
if FUpdateCount = 0 then begin
@@ -28055,25 +28068,73 @@ function TBaseVirtualTree.GetLastVisibleNoInit(Node: PVirtualNode = nil;
ConsiderChildrenAbove: Boolean = True; IncludeFiltered: Boolean = False): PVirtualNode;
// Returns the very last visible node in the tree while optionally considering toChildrenAbove.
+// Note that the visibility of all ancestor nodes of the resulting node must not be considered.
// No initialization is performed.
-var
- Next: PVirtualNode;
-begin
- Result := GetLastVisibleChildNoInit(Node, IncludeFiltered);
- if not ConsiderChildrenAbove or not (toChildrenAbove in FOptions.PaintOptions) then
- while Assigned(Result) and (vsExpanded in Result.States) do
+ //--------------- local functions -------------------------------------------
+
+ function GetNodeIsVisible(ChildNode: PVirtualNode): Boolean;
+ begin
+ Result := (vsVisible in ChildNode.States) and
+ (IncludeFiltered or not IsEffectivelyFiltered[ChildNode]);
+ end;
+
+ function GetNodeHasVisibleChildren(ChildNode: PVirtualNode): Boolean;
+ begin
+ Result := (vsHasChildren in ChildNode.States) and
+ (vsExpanded in ChildNode.States) and
+ not (vsAllChildrenHidden in ChildNode.States);
+ end;
+
+ function IterateChildren(ParentNode: PVirtualNode): PVirtualNode;
+ var
+ Run: PVirtualNode;
+ begin
+ Result := nil;
+
+ Run := GetLastChildNoInit(ParentNode); // Do not use 'GetLastVisibleChildNoInit' here (see above).
+ while Assigned(Run) do
begin
- // Test if there is a next last child. If not keep the node from the last run.
- // Otherwise use the next last child.
- Next := GetLastChildNoInit(Result);
- if Assigned(Next) and (not (vsVisible in Next.States) or
- (not IncludeFiltered and IsEffectivelyFiltered[Next])) then
- Next := GetPreviousVisibleSiblingNoInit(Next, IncludeFiltered);
- if Next = nil then
- Break;
- Result := Next;
+ if ConsiderChildrenAbove and (toChildrenAbove in FOptions.PaintOptions) then
+ begin
+ if GetNodeIsVisible(Run) then
+ Result := Run
+ else if GetNodeHasVisibleChildren(Run) then
+ Result := IterateChildren(Run);
+ end else
+ begin
+ if GetNodeHasVisibleChildren(Run) then
+ Result := IterateChildren(Run)
+ else if GetNodeIsVisible(Run) then
+ Result := Run;
+ end;
+
+ if Assigned(Result) then
+ break;
+
+ Run := GetPreviousSiblingNoInit(Run);
end;
+ end;
+
+ //--------------- end local functions ---------------------------------------
+
+var
+ Run: PVirtualNode;
+
+begin
+ Result := nil;
+
+ // First, check wether the given node and all its parents are expanded.
+ // If not, there can not be any visible child node.
+ Run := Node;
+ while Assigned(Run) and (Run <> RootNode) do
+ begin
+ if not (vsExpanded in Run.States) then
+ exit;
+ Run := Run.Parent;
+ end;
+
+ Result := IterateChildren(Node);
end;
//----------------------------------------------------------------------------------------------------------------------
@@ -28506,113 +28567,122 @@ function TBaseVirtualTree.GetNextVisible(Node: PVirtualNode; ConsiderChildrenAbo
// toChildrenAbove is optionally considered which is the default here.
var
+ TopInvisibleParent: PVirtualNode;
ForceSearch: Boolean;
begin
Result := Node;
- if Assigned(Result) then
- begin
- Assert(Result <> FRoot, 'Node must not be the hidden root node.');
+ if not Assigned(Result) then Exit;
- repeat
- // If the given node is not visible then look for a parent node which is visible, otherwise we will
- // likely go unnecessarily through a whole bunch of invisible nodes.
- if not FullyVisible[Result] then
- Result := GetVisibleParent(Result, True);
+ Assert(Result <> FRoot, 'Node must not be the hidden root node.');
- if ConsiderChildrenAbove and (toChildrenAbove in FOptions.PaintOptions) then
- begin
- repeat
- // If there a no siblings anymore, go up one level.
- if not Assigned(Result.NextSibling) then
+ repeat
+ // If any ancestor is invisible, then find the last (furthest) parent node
+ // which is invisible to skip invisible subtrees. Otherwise we will
+ // likely go unnecessarily through a whole bunch of invisible nodes.
+ TopInvisibleParent := GetTopInvisibleParent(Result);
+ if Assigned(TopInvisibleParent) then
+ Result := TopInvisibleParent;
+
+ if ConsiderChildrenAbove and (toChildrenAbove in FOptions.PaintOptions) then
+ begin
+ repeat
+ // If there a no siblings anymore, go up one level.
+ if not Assigned(Result.NextSibling) then
+ begin
+ Result := Result.Parent;
+ if Result = FRoot then
begin
- Result := Result.Parent;
- if Result = FRoot then
- begin
- Result := nil;
- Break;
- end;
+ Result := nil;
+ Break;
+ end;
- if not (vsInitialized in Result.States) then
- InitNode(Result);
- if vsVisible in Result.States then
- Break;
- end
- else
+ if not (vsInitialized in Result.States) then
+ InitNode(Result);
+ end
+ else
+ begin
+ // There is at least one sibling so take it.
+ Result := Result.NextSibling;
+ if not (vsInitialized in Result.States) then
+ InitNode(Result);
+ if not (vsVisible in Result.States) then
+ Continue;
+
+ // Now take a look at the children. As the children are initialized
+ // while toggling, we don't need to call 'InitChildren' beforehand here.
+ while (vsExpanded in Result.States) and Assigned(Result.FirstChild) do
begin
- // There is at least one sibling so take it.
- Result := Result.NextSibling;
+ Result := Result.FirstChild;
if not (vsInitialized in Result.States) then
InitNode(Result);
if not (vsVisible in Result.States) then
- Continue;
-
- // Now take a look at the children.
- // As the children are initialized while toggling, we don't need to do this here.
- while (vsExpanded in Result.States) and Assigned(Result.FirstChild) do
- begin
- Result := Result.FirstChild;
- if not (vsInitialized in Result.States) then
- InitNode(Result);
- if not (vsVisible in Result.States) then
- Break;
- end;
-
- // If we found a visible node we don't need to search any longer.
- if vsVisible in Result.States then
Break;
end;
- until False;
- end
- else
- begin
- // Has this node got children?
- if [vsHasChildren, vsExpanded] * Result.States = [vsHasChildren, vsExpanded] then
- begin
- // Yes, there are child nodes. Initialize them if necessary.
- if Result.ChildCount = 0 then
- InitChildren(Result);
end;
- // Child nodes are the first choice if possible.
- if (vsExpanded in Result.States) and Assigned(Result.FirstChild) then
- begin
- Result := GetFirstChild(Result);
- ForceSearch := False;
- end
- else
- ForceSearch := True;
+ // If we found a visible node we don't need to search any longer.
+ // As it has already been initialized above, we don't need to call 'InitNode' here.
+ if vsVisible in Result.States then
+ Break;
+ until False;
+ end
+ else
+ begin
+ ForceSearch := True;
+ // If we found an invisible ancestor, we must not check its children.
+ // Remember, that TopInvisibleParent can be effectively invisible merely due to
+ // its own parent's expansion state despite being visible itself.
+ if Result <> TopInvisibleParent then
+ begin
+ if not (vsInitialized in Result.States) then
+ InitNode(Result);
- // If there are no children or the first child is not visible then search the sibling nodes or traverse parents.
- if Assigned(Result) and (ForceSearch or not (vsVisible in Result.States)) then
+ // Child nodes are the first choice if the current node is known to be visible.
+ if (vsVisible in Result.States) and (vsExpanded in Result.States) then
begin
- repeat
- // Is there a next sibling?
- if Assigned(Result.NextSibling) then
- begin
- Result := Result.NextSibling;
- if not (vsInitialized in Result.States) then
- InitNode(Result);
- if vsVisible in Result.States then
- Break;
- end
- else
- begin
- // No sibling anymore, so use the parent's next sibling.
- if Result.Parent <> FRoot then
- Result := Result.Parent
- else
- begin
- // There are no further nodes to examine, hence there is no further visible node.
- Result := nil;
- Break;
- end;
- end;
- until False;
+ // Initialize the node's children if necessary.
+ if (vsHasChildren in Result.States) and (Result.ChildCount = 0) then
+ InitChildren(Result);
+
+ if Assigned(Result.FirstChild) then
+ begin
+ Result := Result.FirstChild;
+ if not (vsInitialized in Result.States) then
+ InitNode(Result);
+ ForceSearch := False;
+ end;
end;
end;
- until not Assigned(Result) or IsEffectivelyVisible[Result];
- end;
+
+ // If there are no children or the first child is not visible then search the sibling nodes or traverse parents.
+ if ForceSearch or not (vsVisible in Result.States) then
+ begin
+ repeat
+ // Is there a next sibling?
+ if Assigned(Result.NextSibling) then
+ begin
+ Result := Result.NextSibling;
+ if not (vsInitialized in Result.States) then
+ InitNode(Result);
+ if vsVisible in Result.States then
+ Break;
+ end
+ // No sibling anymore, so use the parent's next sibling.
+ else if Result.Parent <> FRoot then
+ Result := Result.Parent
+ else
+ begin
+ // There are no further nodes to examine, hence there is no further visible node.
+ Result := nil;
+ Break;
+ end;
+ until False;
+ end;
+ end;
+ until not Assigned(Result) or IsEffectivelyVisible[Result];
+
+ Assert(Result <> Node, 'Node cannot be its own visible successor.');
end;
//----------------------------------------------------------------------------------------------------------------------
@@ -28620,98 +28690,100 @@ function TBaseVirtualTree.GetNextVisible(Node: PVirtualNode; ConsiderChildrenAbo
function TBaseVirtualTree.GetNextVisibleNoInit(Node: PVirtualNode; ConsiderChildrenAbove: Boolean = True): PVirtualNode;
// Returns the next node in tree, with regard to Node, which is visible.
-// toChildrenAbove is optionally considered (which is the default). No initialization is done.
+// No initialization is done.
+// toChildrenAbove is optionally considered which is the default here.
var
+ TopInvisibleParent: PVirtualNode;
ForceSearch: Boolean;
begin
Result := Node;
- if Assigned(Result) then
- begin
- Assert(Result <> FRoot, 'Node must not be the hidden root node.');
+ if not Assigned(Result) then Exit;
- repeat
- if ConsiderChildrenAbove and (toChildrenAbove in FOptions.PaintOptions) then
+ Assert(Result <> FRoot, 'Node must not be the hidden root node.');
+
+ repeat
+ // If any ancestor is invisible, then find the last (furthest) parent node
+ // which is invisible to skip invisible subtrees. Otherwise we will
+ // likely go unnecessarily through a whole bunch of invisible nodes.
+ TopInvisibleParent := GetTopInvisibleParent(Result);
+ if Assigned(TopInvisibleParent) then
+ Result := TopInvisibleParent;
+
+ if ConsiderChildrenAbove and (toChildrenAbove in FOptions.PaintOptions) then
+ begin
+ repeat
+ // If there are no siblings anymore, go up one level.
+ if not Assigned(Result.NextSibling) then
+ begin
+ Result := Result.Parent;
+ if Result = FRoot then
+ begin
+ Result := nil;
+ Break;
+ end;
+ end
+ else
+ begin
+ // There is at least one sibling so take it.
+ Result := Result.NextSibling;
+ if not (vsVisible in Result.States) then
+ Continue;
+
+ // Now take a look at the children.
+ while (vsExpanded in Result.States) and Assigned(Result.FirstChild) do
+ begin
+ Result := Result.FirstChild;
+ if not (vsVisible in Result.States) then
+ Break;
+ end;
+ end;
+
+ // If we found a visible node we don't need to search any longer.
+ if vsVisible in Result.States then
+ Break;
+ until False;
+ end
+ else
+ begin
+ // Child nodes are the first choice if the current node is known to be visible.
+ // Remember, that TopInvisibleParent can be effectively invisible merely due to
+ // its own parent's expansion state despite being visible itself.
+ if (vsVisible in Result.States) and (vsExpanded in Result.States) and
+ (Result <> TopInvisibleParent) and Assigned(Result.FirstChild) then
+ begin
+ Result := Result.FirstChild;
+ ForceSearch := False;
+ end else
+ ForceSearch := True;
+
+ // If there are no children or the first child is not visible then search the sibling nodes or traverse parents.
+ if ForceSearch or not (vsVisible in Result.States) then
begin
repeat
- // If there a no siblings anymore, go up one level.
- if not Assigned(Result.NextSibling) then
+ // Is there a next sibling?
+ if Assigned(Result.NextSibling) then
begin
- Result := Result.Parent;
- if Result = FRoot then
- begin
- Result := nil;
- Break;
- end;
+ Result := Result.NextSibling;
if vsVisible in Result.States then
Break;
end
+ // No sibling anymore, so use the parent's next sibling.
+ else if Result.Parent <> FRoot then
+ Result := Result.Parent
else
begin
- // There is at least one sibling so take it.
- Result := Result.NextSibling;
- if not (vsVisible in Result.States) then
- Continue;
-
- // Now take a look at the children.
- while (vsExpanded in Result.States) and Assigned(Result.FirstChild) do
- begin
- Result := Result.FirstChild;
- if not (vsVisible in Result.States) then
- Break;
- end;
-
- // If we found a visible node we don't need to search any longer.
- if vsVisible in Result.States then
- Break;
+ // There are no further nodes to examine, hence there is no further visible node.
+ Result := nil;
+ Break;
end;
until False;
- end
- else
- begin
- // If the given node is not visible then look for a parent node which is visible, otherwise we will
- // likely go unnecessarily through a whole bunch of invisible nodes.
- if not FullyVisible[Result] then
- Result := GetVisibleParent(Result, True);
-
- // Child nodes are the first choice if possible.
- if (vsExpanded in Result.States) and Assigned(Result.FirstChild) then
- begin
- Result := Result.FirstChild;
- ForceSearch := False;
- end
- else
- ForceSearch := True;
-
- // If there are no children or the first child is not visible then search the sibling nodes or traverse parents.
- if ForceSearch or not (vsVisible in Result.States) then
- begin
- repeat
- // Is there a next sibling?
- if Assigned(Result.NextSibling) then
- begin
- Result := Result.NextSibling;
- if vsVisible in Result.States then
- Break;
- end
- else
- begin
- // No sibling anymore, so use the parent's next sibling.
- if Result.Parent <> FRoot then
- Result := Result.Parent
- else
- begin
- // There are no further nodes to examine, hence there is no further visible node.
- Result := nil;
- Break;
- end;
- end;
- until False;
- end;
end;
- until not Assigned(Result) or IsEffectivelyVisible[Result];
- end;
+ end;
+ until not Assigned(Result) or IsEffectivelyVisible[Result];
+
+ Assert(Result <> Node, 'Node cannot be its own visible successor.');
end;
//----------------------------------------------------------------------------------------------------------------------
@@ -29256,104 +29328,120 @@ function TBaseVirtualTree.GetPreviousVisible(Node: PVirtualNode; ConsiderChildre
// toChildrenAbove is optionally considered which is the default here.
var
- Marker: PVirtualNode;
+ TopInvisibleParent: PVirtualNode;
+ ForceSearch: Boolean;
begin
Result := Node;
- if Assigned(Result) then
- begin
- Assert(Result <> FRoot, 'Node must not be the hidden root node.');
+ if not Assigned(Result) then Exit;
- repeat
- // If the given node is not visible then look for a parent node which is visible and use its last visible
- // child or the parent node (if there is no visible child) as result.
- if not FullyVisible[Result] then
- begin
- Result := GetVisibleParent(Result, True);
- if Result = FRoot then
- Result := nil;
- Marker := GetLastVisible(Result, True);
- if Assigned(Marker) then
- Result := Marker;
- end
- else
+ Assert(Result <> FRoot, 'Node must not be the hidden root node.');
+
+ repeat
+ // If any ancestor is invisible, then find the last (furthest) parent node
+ // which is invisible to skip invisible subtrees. Otherwise we will
+ // likely go unnecessarily through a whole bunch of invisible nodes.
+ TopInvisibleParent := GetTopInvisibleParent(Result);
+ if Assigned(TopInvisibleParent) then
+ Result := TopInvisibleParent;
+
+ if ConsiderChildrenAbove and (toChildrenAbove in FOptions.PaintOptions) then
+ begin
+ ForceSearch := True;
+ // If we found an invisible ancestor, we must not check its children.
+ // Remember, that TopInvisibleParent can be effectively invisible merely due to
+ // its own parent's expansion state despite being visible itself.
+ if Result <> TopInvisibleParent then
begin
- if ConsiderChildrenAbove and (toChildrenAbove in FOptions.PaintOptions) then
- begin
- repeat
- if Assigned(Result.LastChild) and (vsExpanded in Result.States) then
- begin
- Result := Result.LastChild;
- if not (vsInitialized in Result.States) then
- InitNode(Result);
+ if not (vsInitialized in Result.States) then
+ InitNode(Result);
- if vsVisible in Result.States then
- Break;
- end
- else
- if Assigned(Result.PrevSibling) then
- begin
- if not (vsInitialized in Result.PrevSibling.States) then
- InitNode(Result.PrevSibling);
+ if (vsVisible in Result.States) and (vsExpanded in Result.States) then
+ begin
+ // Initialiue the node's children if necessary.
+ if (vsHasChildren in Result.States) and (Result.ChildCount = 0) then
+ InitChildren(Result);
- if vsVisible in Result.PrevSibling.States then
- begin
- Result := Result.PrevSibling;
- Break;
- end;
- end
- else
- begin
- Marker := nil;
- repeat
- Result := Result.Parent;
- if Result <> FRoot then
- Marker := GetPreviousVisibleSibling(Result, True)
- else
- Result := nil;
- until Assigned(Marker) or (Result = nil);
- if Assigned(Marker) then
- Result := Marker;
+ // Child nodes are the first choice if the current node is known to be visible.
+ if Assigned(Result.LastChild) then
+ begin
+ Result := Result.LastChild;
+ if not (vsInitialized in Result.States) then
+ InitNode(Result);
+ ForceSearch := False;
+ end;
+ end;
+ end;
- Break;
- end;
- until False;
- end
- else
+ if ForceSearch or not (vsVisible in Result.States) then
+ begin
+ repeat
+ // Is there a previous sibling?
+ if Assigned(Result.PrevSibling) then
+ begin
+ Result := Result.PrevSibling;
+ if not (vsInitialized in Result.States) then
+ InitNode(Result);
+ if vsVisible in Result.States then
+ Break;
+ end
+ // No sibling anymore, so use the parent's previous sibling.
+ else if Result.Parent <> FRoot then
+ Result := Result.Parent
+ // There are no further nodes to examine, hence there is no further visible node.
+ else
+ begin
+ Result := nil;
+ Break;
+ end;
+ until False;
+ end;
+ end
+ else
+ begin
+ repeat
+ // If there are no sibling anymore, go up one level.
+ if not Assigned(Result.PrevSibling) then
begin
- repeat
- // Is there a previous sibling node?
- if Assigned(Result.PrevSibling) then
- begin
- Result := Result.PrevSibling;
- // Initialize the new node and check its visibility.
- if not (vsInitialized in Result.States) then
- InitNode(Result);
- if vsVisible in Result.States then
- begin
- // If there are visible child nodes then use the last one.
- Marker := GetLastVisible(Result, True, True);
- if Assigned(Marker) then
- Result := Marker;
- Break;
- end;
- end
- else
- begin
- // No previous sibling there so the parent node is the nearest previous node.
- Result := Result.Parent;
- if Result = FRoot then
- Result := nil;
+ Result := Result.Parent;
+ if Result = FRoot then
+ begin
+ Result := nil;
+ Break;
+ end;
+ if not (vsInitialized in Result.States) then
+ InitNode(Result);
+ end else
+ begin
+ Result := Result.PrevSibling;
+ if not (vsInitialized in Result.States) then
+ InitNode(Result);
+ if not (vsVisible in Result.States) then
+ Continue;
+
+ // Now take a look at the children. As the children are initialized
+ // while toggling, we don't need to call 'InitChildren' beforehand here.
+ while (vsExpanded in Result.States) and Assigned(Result.LastChild) do
+ begin
+ Result := Result.LastChild;
+ if not (vsInitialized in Result.States) then
+ InitNode(Result);
+ if not (vsVisible in Result.States) then
Break;
- end;
- until False;
+ end;
end;
- if Assigned(Result) and not (vsInitialized in Result.States) then
- InitNode(Result);
- end;
- until not Assigned(Result) or IsEffectivelyVisible[Result];
- end;
+ // If we found a visible node we don't need to search any longer.
+ if vsVisible in Result.States then
+ Break;
+ until False;
+ end;
+
+ if Assigned(Result) and not (vsInitialized in Result.States) then
+ InitNode(Result);
+ until not Assigned(Result) or IsEffectivelyVisible[Result];
+
+ Assert(Result <> Node, 'Node cannot be its own visible predecessor.');
end;
//----------------------------------------------------------------------------------------------------------------------
@@ -29362,97 +29450,99 @@ function TBaseVirtualTree.GetPreviousVisibleNoInit(Node: PVirtualNode;
ConsiderChildrenAbove: Boolean = True): PVirtualNode;
// Returns the previous node in tree, with regard to Node, which is visible.
+// No initialization is done.
// toChildrenAbove is optionally considered which is the default here.
var
- Marker: PVirtualNode;
+ TopInvisibleParent: PVirtualNode;
+ ForceSearch: Boolean;
begin
Result := Node;
- if Assigned(Result) then
- begin
- Assert(Result <> FRoot, 'Node must not be the hidden root node.');
+ if not Assigned(Result) then Exit;
- repeat
- // If the given node is not visible then look for a parent node which is visible and use its last visible
- // child or the parent node (if there is no visible child) as result.
- if not FullyVisible[Result] then
+ Assert(Result <> FRoot, 'Node must not be the hidden root node.');
+
+ repeat
+ // If any ancestor is invisible, then find the last (furthest) parent node
+ // which is invisible to skip invisible subtrees. Otherwise we will
+ // likely go unnecessarily through a whole bunch of invisible nodes.
+ TopInvisibleParent := GetTopInvisibleParent(Result);
+ if Assigned(TopInvisibleParent) then
+ Result := TopInvisibleParent;
+
+ if ConsiderChildrenAbove and (toChildrenAbove in FOptions.PaintOptions) then
+ begin
+ // Child nodes are the first choice if the current node is known to be visible.
+ // Remember, that TopInvisibleParent can be effectively invisible merely due to
+ // its own parent's expansion state despite being visible itself.
+ if (vsVisible in Result.States) and (vsExpanded in Result.States) and
+ (Result <> TopInvisibleParent) and Assigned(Result.LastChild) then
begin
- Result := GetVisibleParent(Result, True);
- if Result = FRoot then
- Result := nil;
- Marker := GetLastVisibleNoInit(Result, True);
- if Assigned(Marker) then
- Result := Marker;
- end
- else
+ Result := Result.LastChild;
+ ForceSearch := False;
+ end else
+ ForceSearch := True;
+
+ if ForceSearch or not (vsVisible in Result.States) then
begin
- if ConsiderChildrenAbove and (toChildrenAbove in FOptions.PaintOptions) then
+ repeat
+ // Is there a previous sibling?
+ if Assigned(Result.PrevSibling) then
+ begin
+ Result := Result.PrevSibling;
+ if vsVisible in Result.States then
+ Break;
+ end
+ // No sibling anymore, so use the parent's previous sibling.
+ else if Result.Parent <> FRoot then
+ Result := Result.Parent
+ // There are no further nodes to examine, hence there is no further visible node.
+ else
+ begin
+ Result := nil;
+ Break;
+ end;
+ until False;
+ end;
+ end
+ else
+ begin
+ repeat
+ // If there are no siblings anymore, go up one level.
+ if not Assigned(Result.PrevSibling) then
begin
- repeat
- // Is the current node expanded and has children?
- if (vsExpanded in Result.States) and Assigned(Result.LastChild) then
- begin
- Result := Result.LastChild;
- if vsVisible in Result.States then
- Break;
- end
- else
- if Assigned(Result.PrevSibling) then
- begin
- // No children anymore, so take the previous sibling.
- Result := Result.PrevSibling;
- if vsVisible in Result.States then
- Break;
- end
- else
- begin
- // No children and no previous siblings, so walk up the tree and look wether
- // a parent has a previous visible sibling. If that is the case take it,
- // otherwise there is no previous visible node.
- Marker := nil;
- repeat
- Result := Result.Parent;
- if Result <> FRoot then
- Marker := GetPreviousVisibleSiblingNoInit(Result, True)
- else
- Result := nil;
- until Assigned(Marker) or (Result = nil);
- if Assigned(Marker) then
- Result := Marker;
- Break;
- end;
- until False;
+ Result := Result.Parent;
+ if Result = FRoot then
+ begin
+ Result := nil;
+ Break;
+ end;
end
else
begin
- repeat
- // Is there a previous sibling node?
- if Assigned(Result.PrevSibling) then
- begin
- Result := Result.PrevSibling;
- if vsVisible in Result.States then
- begin
- // If there are visible child nodes then use the last one.
- Marker := GetLastVisibleNoInit(Result, True, True);
- if Assigned(Marker) then
- Result := Marker;
- Break;
- end;
- end
- else
- begin
- // No previous sibling there so the parent node is the nearest previous node.
- Result := Result.Parent;
- if Result = FRoot then
- Result := nil;
+ // There is at least one sibling so take it.
+ Result := Result.PrevSibling;
+ if not (vsVisible in Result.States) then
+ Continue;
+
+ // Now take a look at the children.
+ while (vsExpanded in Result.States) and Assigned(Result.LastChild) do
+ begin
+ Result := Result.LastChild;
+ if not (vsVisible in Result.States) then
Break;
- end;
- until False;
+ end;
end;
- end;
- until not Assigned(Result) or IsEffectivelyVisible[Result];
- end;
+
+ // If we found a visible node we don't need to search any longer.
+ if vsVisible in Result.States then
+ Break;
+ until False;
+ end;
+ until not Assigned(Result) or IsEffectivelyVisible[Result];
+
+ Assert(Result <> Node, 'Node cannot be its own visible predecessor.');
end;
//----------------------------------------------------------------------------------------------------------------------
@@ -29848,6 +29938,31 @@ function TBaseVirtualTree.GetVisibleParent(Node: PVirtualNode; IncludeFiltered:
//----------------------------------------------------------------------------------------------------------------------
+function TBaseVirtualTree.GetTopInvisibleParent(Node: PVirtualNode): PVirtualNode;
+
+// Returns the last (furthest) parent node of Node which is invisible.
+
+var
+ Run: PVirtualNode;
+
+begin
+ Assert(Assigned(Node), 'Node must not be nil.');
+ Assert(Node <> FRoot, 'Node must not be the hidden root node.');
+
+ Result := nil;
+
+ Run := Node.Parent;
+ while (Run <> FRoot) do
+ begin
+ if not ( (vsVisible in Run.States) and (vsExpanded in Run.Parent.States) ) then
+ Result := Run;
+ Run := Run.Parent;
+ end;
+
+end;
+
+//----------------------------------------------------------------------------------------------------------------------
+
function TBaseVirtualTree.HasAsParent(Node, PotentialParent: PVirtualNode): Boolean;
// Determines whether Node has got PotentialParent as one of its parents.
@@ -30570,6 +30685,7 @@ procedure TBaseVirtualTree.PaintTree(TargetCanvas: TCanvas; Window: TRect; Targe
PaintWidth: Integer;
CurrentNodeHeight: Integer;
lUseSelectedBkColor: Boolean; // determines if the dotted grid lines need to be painted in selection color of background color
+ lEmptyListTextMargin: Integer;
CellIsTouchingClientRight: Boolean;
CellIsInLastColumn: Boolean;
@@ -30833,13 +30949,11 @@ procedure TBaseVirtualTree.PaintTree(TargetCanvas: TCanvas; Window: TRect; Targe
begin
if BidiMode = bdLeftToRight then
begin
- DrawDottedHLine(PaintInfo, CellRect.Left + IfThen(toFixedIndent in FOptions.PaintOptions, 1, IndentSize) * Integer(FIndent), CellRect.Right - 1,
- CellRect.Bottom - 1);
+ DrawDottedHLine(PaintInfo, CellRect.Left + PaintInfo.Offsets[ofsCheckBox] - fImagesMargin, CellRect.Right - 1, CellRect.Bottom - 1);
end
else
begin
- DrawDottedHLine(PaintInfo, CellRect.Left, CellRect.Right - IfThen(toFixedIndent in FOptions.PaintOptions, 1, IndentSize) * Integer(FIndent) - 1,
- CellRect.Bottom - 1);
+ DrawDottedHLine(PaintInfo, CellRect.Left, CellRect.Right - IfThen(toFixedIndent in FOptions.PaintOptions, 1, IndentSize) * Integer(FIndent) - 1, CellRect.Bottom - 1);
end;
end
else
@@ -31139,12 +31253,14 @@ procedure TBaseVirtualTree.PaintTree(TargetCanvas: TCanvas; Window: TRect; Targe
begin
// output a message if no items are to display
Canvas.Font := Self.Font;
+ Canvas.Font.Size := Round(Canvas.Font.Size * 1.25);
SetBkMode(TargetCanvas.Handle, TRANSPARENT);
- R.Left := OffSetX + 2;
- R.Top := 2;
- R.Right := R.Left + Width - 2;
- R.Bottom := Height -2;
- TargetCanvas.Font.Color := clGrayText;
+ lEmptyListTextMargin := ScaledPixels(Max(cDefaultTextMargin, Self.TextMargin) * 2);
+ R.Left := OffSetX + lEmptyListTextMargin;
+ R.Top := lEmptyListTextMargin;
+ R.Right := R.Left + Width - lEmptyListTextMargin;
+ R.Bottom := Height - lEmptyListTextMargin;
+ TargetCanvas.Font.Color := StyleServices.GetStyleFontColor(TStyleFont.sfTreeItemTextDisabled);//clGrayText;
TargetCanvas.TextRect(R, FEmptyListMessage, [tfNoClip, tfLeft, tfWordBreak, tfExpandTabs]);
end;
@@ -31710,7 +31826,7 @@ procedure TBaseVirtualTree.ReinitNode(Node: PVirtualNode; Recursive: Boolean);
InitNode(Node);
end;
- if Recursive then
+ if Recursive and (Node.ChildCount > 0) then // Prevent previoulsy uninitilaized children from being initialized. Issue #1145
ReinitChildren(Node, True);
end;
@@ -33781,7 +33897,7 @@ procedure TCustomVirtualStringTree.InitializeTextProperties(var PaintInfo: TVTPa
if Node = FDropTargetNode then
begin
if ((FLastDropMode = dmOnNode) or (vsSelected in Node.States)) then
- Canvas.Font.Color := FColors.GetSelectedNodeFontColor(Focused or (toPopupMode in FOptions.PaintOptions));
+ Canvas.Font.Color := FColors.GetSelectedNodeFontColor(True); // See #1083, since drop highlight color is chosen independent of the focus state, we need to choose Font color also independent of it.
end
else
if vsSelected in Node.States then
@@ -33807,9 +33923,8 @@ procedure TCustomVirtualStringTree.PaintNormalText(var PaintInfo: TVTPaintInfo;
TripleWidth: Integer;
R: TRect;
DrawFormat: Cardinal;
- Size: TSize;
Height: Integer;
-
+ lNewNodeWidth: Integer;
begin
InitializeTextProperties(PaintInfo);
with PaintInfo do
@@ -33850,9 +33965,13 @@ procedure TCustomVirtualStringTree.PaintNormalText(var PaintInfo: TVTPaintInfo;
// If the font has been changed then the ellipsis width must be recalculated.
TripleWidth := 0;
// Recalculate also the width of the normal text.
- GetTextExtentPoint32W(Canvas.Handle, PWideChar(Text), Length(Text), Size);
- NodeWidth := Size.cx + 2 * FTextMargin;
- end;
+ lNewNodeWidth := DoTextMeasuring(Canvas, Node, Column, Text).cx + 2 * FTextMargin;
+ if lNewNodeWidth <> NodeWidth then
+ begin
+ NodeWidth := lNewNodeWidth;
+ InvalidateNode(Node); // repaint node and selection as the font chnaged, see #1084
+ end;//if
+ end;// if FFontChanged
DrawFormat := DT_NOPREFIX or DT_VCENTER or DT_SINGLELINE;
if BidiMode <> bdLeftToRight then
@@ -34737,6 +34856,31 @@ procedure TCustomVirtualStringTree.AddToSelection(Node: PVirtualNode; NotifySync
//----------------------------------------------------------------------------------------------------------------------
+procedure TCustomVirtualStringTree.AddToSelection(const NewItems: TNodeArray; NewLength: Integer; ForceInsert: Boolean);
+var
+ i: Integer;
+ lSelectedNodeCaption: string;
+begin
+ if (toRestoreSelection in TreeOptions.SelectionOptions) and Assigned(Self.OnGetText) and not (tsPreviouslySelectedLocked in FStates) then
+ begin
+ if not Assigned(FPreviouslySelected) then
+ begin
+ FPreviouslySelected := TStringList.Create();
+ FPreviouslySelected.Duplicates := dupIgnore;
+ FPreviouslySelected.Sorted := True; //Improves performance, required to use Find()
+ FPreviouslySelected.CaseSensitive := False;
+ end;
+ for i := 0 to NewLength - 1 do
+ begin
+ Self.OnGetText(Self, NewItems[i], Header.RestoreSelectionColumnIndex, ttNormal, lSelectedNodeCaption);
+ FPreviouslySelected.Add(lSelectedNodeCaption);
+ end;
+ end; // if toRestoreSelection
+ inherited;
+end;
+
+//----------------------------------------------------------------------------------------------------------------------
+
procedure TCustomVirtualStringTree.RemoveFromSelection(Node: PVirtualNode);
var
lSelectedNodeCaption: string;
diff --git a/VirtualTreesDevelopment.groupproj b/VirtualTreesDevelopment.groupproj
new file mode 100644
index 000000000..34bab6c34
--- /dev/null
+++ b/VirtualTreesDevelopment.groupproj
@@ -0,0 +1,60 @@
+
+
+ {C5F52E84-EC68-4F73-B3AD-3A9611000DFB}
+
+
+
+
+
+
+
+
+
+ Packages\RAD Studio 10.4+\VirtualTreesR.dproj
+
+
+
+ Default.Personality.12
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+