V7.2.1: (07 Mar 2019) See: https://github.com/Virtual-TreeView/Virtual-TreeView/milestone/14?closed=1 V7.2: (18 Feb 2019) See: https://github.com/Virtual-TreeView/Virtual-TreeView/milestone/12?closed=1 V7.1: (27 Dec 2018) See: https://github.com/Virtual-TreeView/Virtual-TreeView/milestone/11?closed=1 V7.0: (22 Jul 2018) * The support for Windows XP/2003 has been dropped (issue #707). This means: - We did not intentionally break XP support. - We do no longer test on Windows XP/2003 - We may accept pull request for XP support if the code quality is sufficient. - We recommend to use the V6 branch on Windows XP * BREAKING CHANGE: Removed property TBaseVirtualTree.HintAnimation. Issue #730. * BREAKING CHANGE: Renamed unit "VTHeaderPopup" to "VirtualTrees.HeaderPopup" Renamed unit "VTAccessibility" to "VirtualTrees.Accessibility" Renamed unit "VTAccessibilityFactory" to "VirtualTrees.AccessibilityFactory" * Fixed issue #804: Remove MMXAvailable and related stuff * Fixed issue #736: TVTDragManager.GetDataObject() should not use TVTDataObject in case the OnCreateDataObject event handler returned nil * Fixed issue #756: OnMeasureItem called before data is assigned to node * Fixed issue #745: Pressing SPACE should change the check-state of all selected nodes * Fixed Issue #369: Centralize Left Content Margin calculation * Pull Request #800: Fixed an incorrect calculation of the string edit link height. * Pull request #796: Fixed a bug where hints of type hmTooltip had incorrect (random) position when when HitPosition was not hiOnItemLabel. * Fixed issue #796: Utility images are not DPI Scaled * Fixed issue #794: ScrollIntoView() by column centers column also when center is false * Fixed issue #789: Issues with toHideSelection * Fixed issue #792: "Invalid window handle" when using styles * Fixed issue #788: Wrong logic in GetEffectiveColor. coStyleColor has been added to DefaultColumnOptions. * Fixed issue #783: TVirtualTreeColumns.HandleClick() may trigger sorting twice * Fixed issue #781: "~" not working on German keyboard * Fixed issue #779: Overlay Images with Index < 15 not drawn when OnGetImageIndexEx is used * Fixed issue #777: Margin is applied right of tree lines, but should be applied left of them. * Pull request #776: ScrollIntoView centers horizontally enen without Columns defined * Fixed issue #764: When toAlwaysSelectNode is on, no node is auto-selected after the tree is cleared. * Fixed issue #769: GetImageSize Fails if kind ikState and not assigned(StateImages) * Fixed issue #766: Incorrect HotTrack with Touch-Scrolling * Pull request #761: Add TBaseVirtualTree.OnAddHeaderPopupItem event and 'Size Column to Fit' menu item to TVTHeaderPopupMenu. * Fixed issue #760: TVirtualTreeColumns.GetFirstVisibleColumn() cause AV if called between BeginUpdate() and EndUpdate() * Fixed issue #759: TBaseVirtualTree.InitNode() overrides check state of top level nodes set in OnInitNode event handler * Fixed issue #757: Header popup menu opens twice * Fixed issue #758: The OnColumnVisibilityChanged event is not always fired * Fixed issue #754: TBaseVirtualTree.InternalAddToSelection() may cause access violation. Thx@nminkov for the patch. * Fixed issue #753: TVirtualTreeColumns.EndUpdate() resets column order * Fixed issue #752: HandleDrawSelection() does not correctly take horizontal scroll position into account * Fixed issue #750: Plus/Minus sizes are not scaled in DPI aware applications * Fixed issue #748: Per Monitor Dpi Scaling - Scrollbar Not Correct after Dpi Change * Enhancement #735: Add event that is fired when a check state is needed. * Fixed issue #743: Ugly drawing of selection in report mode when VCL Styles are used * Fixed issue #742: TVTHeader.ParentFont should be True by default * Fixed issue #740: TVTHeaderPopupMenu should not delete menu items added at designtime * Fixed issue #739: TVTHeader should use a popup menu if assigned * Fixed issue #738: Deadlock on application close in ReleaseThreadReference * Fixed issue #737: Export problem when OnBeforeNodeExport is not assigned * Fixed issue #723: Turn event OnAfterNodeExport into a procedure. This is a BREAKING CHNAGE. * Fixed issue #734: DefaultText property ignored * Fixed issue #724: Error when reading "old" streams * Fixed issue #397: Horizontal autoscroll on focus does not properly scroll node into view if column width is larger than client width * Fixed issue #727: Header not repainted after loading from stream * Fixed issue #726: Incorrect header hot painting * Fixed issue #722: Simplify custom header drawing while keeping default drawing * Fixed issue #467: Multi level checkboxes and BeginUpdate/EndUpdate issue * Fixed issue #391: Change property HotNode: Add a setter * Fixed issue #767: Remove type TOldVTOption and ReadOldOptions() * Removed flag toDisableAutoscrollOnFocus from default configuration of a new Virtual TreeView to achieve a more common behavior with default properties. * poResizeToFitItem is now set by default in TVTHeaderPopupMenu.Options V6.7: (29 May 2017) * Fixed issue #714: Integer overflow in TBaseVirtualTree's InternalAddFromStream * Fixed issue #500: Issue with node selection "from code" for disabled nodes with toLevelSelectConstraint option * Fixed issue #499: Incorrect behavior with toLevelSelectConstraint and ctrl+A * Fixed issue #649: Cell navigation problems with toAutoSpanColumns for left and right keys * Fixed issue #712: Strange behaviour of AutoFitColumns * Fixed issue #718: Shift + Right-Click should not extend selection * Fixed issue #706: Integer overflow in DetermineScrollDirections when timeGetTime wraps * Fixed issue #407: TVirtualDrawTree.InvalidateNode does not clear vsHeightMeasured * Enhancement #669: Create sample project for C++ Builder * Enhancement #708: New option toSyncCheckboxesWithSelection improves multi-selection for touch UI that synchonizes selection and check-state * Fixed issue #717: The option toUseExplorerTheme does not draw lines in place of buttons removed by toAutoHideButtons * Fixed issue #716: Tab key navigation does not work properly with Auto Span Columns * Fixed issue #720: A review of all Demos is needed to fix GetText, GetHint, etc to assign in DFM instead of assigning in FormCreate V6.6 (04 Apr 2017) * Fixed issue #705: Added support for RAD Studio 10.2 Tokyo * Fixed issue #702: Access Violation at designtime when RootNodeCount is >0 * Fixed issue #703: Possibly wrong selection if nodes are selected during DeleteChildren() * Fixed issue #700: If the user clicked a node, we are no longer centering this node if the option toCenterScrollIntoView is set. * Fixed issue #691: When the user uses Cursor-Left/Right, the Virtual TreeView should perform horizontal scrolling if there is no other operation * Fixed issue #699: TVTColors.GetColor: Honor user defined colors also when StyleServices are enabled (Thx to luebbe for PR) * Fixed issue #698: Horizontal scrollbar may not update when turning on or off columns * Fixed issue #350: TVirtualTreeColumn.fLeft should be in protected part * Fixed issue #312: When unfocusing a node while the Spacebar is still pressed, the check state should be toggled * Fixed issue #161: Shift+End does not work as expected with toGridExtension + toFullRowSelect options set * Fixed issue #697: OnChange not fired when unselecting nodes * Fixed issue #692: HitInfo for OnNodeClick event may differ much from HandleMouseDown * Fixed issue #687 by extracting new method DeleteNodes() from existing DeleteSelectedNodes(). * Fixed issue #689: Possible Integer overflow in PaintColumnHeader() when dragging a column to first position. * Fixed issue #693: TVirtualTreeAccessibility.accSelect() should handle the flag SELFLAG_EXTENDSELECTION * Fixed issue #690: Tree shouldn't keep selected elements, if toAlwaysSelectNode is set and other elements are selected without ctrl-modifier * Improved non-breaking implementation of #622: The deprecated property CheckImageKind is no longer written to DFM files, but read properly from old DFMs. Thx to the-Aroich for providing it. * Some minor tweaks on Virtual TreeView source code and sample projects V6.5: (18 Jan 2017) * License change from LGPL to "LGPL with static linking exception". See issue #673 for details. * Enhancement #662: Background image now supports transparency * Fixed #677: Improved per monitor dpi awareness. NodeHeight is now scaled as well if toAutoScale is set. * Fixed #289: HintMode hmHintAndDefault: Default Hint does not change to node specific hint when the mouse is moved to a node. * Fixed #674: HintMode hmHintAndDefault: If the BidiMode is right to left, the Default Hint fails to appear * Fixed #139: hoDblClickResize doesn't work correctly with InitalState ivsMultiline * Fixed #668: Removed unnecessary #include * Fixed #670: Make it possible to override RangeX * Fixed #676: VCL themed scrollbar does not update correctly after adding children * Fixed #626: Wrong hot node selection during mouse movement over different nodes * Fixed #679: The OnChange event when right clicking a node should always be fired before the OnPopup event * Fixed #678: Occasional Access Violation in GetDisplayRect * Fixed #682: Drag & Drop range exception V6.4.1: (26 Oct 2016) * Fixed #549: Drawing issue with toCheckSupport an toExtendedFocus * Fixed #663: Exception pressing return on an edited item with no columns) * Fixed #661: Minimal Demo 2 different problems, can't select on start up, multiple clicks causes error * Fixed problem with wrongly drawn checkbox in column headers. * VirtualTreePerItemAction now initializes all nodes before it works with them and changes e.g. the check state. * TBaseVirtualTree.DoGetImageIndex() now always tries to assign a default image list as result, even if OnGetImage and OnGetImageEx are not assigned. So derived controls do not need to make this step. V6.4: (28 Sep 2016) * Fixed #622: [BREAKING CHANGE] Removed all 16x16 fixed sized checkbox-imagelists. The property CheckImageKind supports the values ckSystemDefault and ckCustom only and should be considered deprecated. * Fixed #640: Edit control for in-place editing wrongly scaled in high-dpi scenarios * Fixed #627: It should be possible to use OnGetImageIndexEx without having imagelists assigned * Added assertion that verifies if an imageindex is supplied but no valid imagelist is available for this imageindex * Fixed #148: Background Images now support other formats than just bitmaps. * Fixed #623: GetHint calculates wrong width for HintText * Fixed #633: High dpi scaling was performed two times * Fixed #544, #427: Header painting problem with BiDiMode right to left * TBaseVirtualTree.EnsureNodeSelected() only scrolls the selected node into the view, if no one was previously selected. * Fixed #248: VT Header draws smudged * Fixed #643: VT Header dropmark appears even if dragged column won't change position * Fixed #310: Incorrect selection paint when toAutoSpanColumns, toGridExtensions and toExtendedFocus are set * Fixed #653: GetFirstVisibleChild/NoInit check for wrong node if IncludeFiltered=True (thx to A. Hausladen) * Fixed #659: GetLastVisibleChild/NoInit checks wrong node * Fixed #647: New option to set the way of selecting next cell for editing in grid mode * Fixed #645: Can't link 64 bit VCL app with VirtualTreeView in C++ Builder 10.1 Berlin * Fixed #656: Fixed memory leaks in Advanced Demo * Enhancement #631: Added new Demo project CharityEvents to demonstrate the use of Interfaces for node's data and for data presentation * Fixed #658: Column Header does not paint correctly after a drop in certain conditions * Fixed #639: Scrolbars are not correctly themed under certain cirumstances when using a VCL theme. * Fixed #624: Wrong y-postion of checkboxes in high-dpi display mode * Fixed #548: Add flag coStyleColor to TVirtualTreeColumn.Options (prefer background color of VCL style over TVirtualTreeColumn.Color) * Fixed #660: Fix AV when tree is modified in OnEdited event * Some minor tweaks on Virtual TreeView source code and sample projects V6.3: (17 May 2016) * Added support for RAD Studio 10.1 Berlin * Implemented #607: Disabled checkbox images should be available * Fixed #612: hotkey handing and toReverseFullExpandHotKey * Fixed #602: Dangling WM_Timer and doubled OnChange calls * Fixed #606: High DPI Inheritance of Form. TBaseVirtualTree.ChangeScale() now respects inherited property ScalingFlags * Fixed #608: Horizontal lines paint bug on scroll. * Fixed #605 : If a new node is selected by left click, OnChange event should not fire with `nil` in-between. * TBaseVirtualTree.EnsureNodeSelected() no longer changes scroll position unless necessary to make the selected node visible. * Pull request #609: Updated unit "Contributions/GenericWrapper/VirtualTreeWrapper.pas" * Started adding unit tests with DUnitX. * Minor tweaks. V6.2.3 (11 Feb 2016) * Fixed accidental remove of vsReleaseCallOnUserDataRequired flag which can cause mem leaks. * TVirtualNode.SetData() now sets the vsOnFreeNodeCallRequired flag for all types of user data and so is consisted with other SetData / GetData methods. * TCustomVirtualStringTree.SetChildCount() now calls ResetInternalData()= with Recurse = False to avoid that all siblings of the new children are reseted recursively. See isuue #576 * TCustomVirtualStringTree.ResetInternalData() now respects the Recursive parameter V6.2.2 (20 Jan 2016) * Issue #603: If the node already has children, then its nodeheight is valid and we must not remove its total height, but rather its height * Fixed issue #599: Possible infinite loop in GetPreviousVisibleNoInit() * Added new method TBaseVirtualTree.InitRecursive() as workaround for issue #597: Initializes a node and optionally its children up to a certain level. * Issue #598: SetData, like GetData no longer forces the "class" constraint on its generic parameter * Fixed issue #596 by moving initialization of global variable Watcher also to InitializeGlobalStructures() Now ensuring using interlocked function that InitializeGlobalStructures() is executed only once * Fixed issue #458: If the Virtual TreeView control is placed on a control that has the StyleEx flag WS_EX_COMPOSITED set, horizontal scrolloing does not update the header * Fixed issue #595: Before using SetTimer, check for valid WindowHandle * Fixed issue #594: Basic TVirtualStringTree Colors does not apply * Fixed issue #591: Now calling UnRegisterStyleHook() for the style class in "VirtualTrees.StyleHooks". * Fixed #590: Allow to store InternalData also for (internal) root node * if only one node is selected, make sure the focused node changes with the selected node * Added assertion that ensures that BeginUpdate() is called from main thread only. * Getter function GetCheckedCount() is protected now instead of public V6.2.1 (06 Nov 2015) * #585: Checkboxes now have the correct size and scale properly on high dpi systems. * #588: Fixed HTML clipboard export * #586: TBaseVirtualTree.SetChildCount() no longer calls to ReInitNode(Node, True). This caused the OnInitChildren-Event to be fired twice. * Adjusted GetNodeDataAt() and GetFirstSelectedNodeData() to work with interfaces. * If multi selection is not allowed and so only one node can be selected, make sure the focused node changes with the selected node in SetSelected() * Added packages for the C++Builder 10. V6.2 (09 Sep 2015) * Issue #582: Added support and packages for RAD Studio 10 Seattle * Issue #580: Added support for Delphi package manager Delphinus * Fixed issue #571: Grid mode and extended selection leads to drawing inconsistencies * Fixed issue #569 which includes a fix for AddChild(). * Fixed issue #568: Integer overflow when reiniting nodes and using ivsFiltered * Merged pull request #564 which includes a fix for ComputeNodeHeight() and single line nodes * Merged pull request #563 which prevents an access violation when using custom check images in column headers * Merged pull request #561 which makes VclStyleChanged() virtual * Fixed issue #557: Using isFiltered in InitNode leads to integer overflows or bogus rendering * Fixed issue #556: Variable height and more than 1 level results in incorrect RangeY * Fixed issue #555: The OnChange event is not fired in case the selected node is deleted through DeleteChildren(). Although no the option toAlwaysSelectNode is set, the parent node was not selected afterwards. * Fixed issue #553: painting failure with variable NodeHeight * Fixed issue #551: Some overlay images were drawn ghosted like the main image, some not. * TBaseVirtualTree.PrepareBitmaps() now fires the OnPrepareButtonImages event also in case VCL styles are used. * Added implementation for TVirtualTreeAccessibility.accSelect() so that screen readers and especially UI testing tools can use MSAA to select specific elements in the control. * Property OnColumnVisibilityChanged is now published. * Now using type TImageIndex instead of integer for variables and parameters that store an image index. V6.1 (02 June 2015) * Implemented Issue #530: Removed all AnsiString code from export routines. Breaking changes: - TCustomVirtualStringTree.ContentToText() is now based on (Unicode)string and no longer on AnsiString. - TCustomVirtualStringTree.ContentToUnicode() is now deprecated, use ContentToText() instead. * Implemented issue #536: Add export event that is triggered for each cell - Added new event OnGetCellText which has new TVSTGetCellTextEventArgs record as parameter. This event could supersede the OnGetText event in a future version. - All export formats now also export static text, in case the toShowStaticText flag is set * Fixed issue #545: VCL Themes: Background of scrollbars is erased with wrong color * Fixed issue #487: When OnAddToSelection is called, GetFirstSelected returns nil * Fixed issue #542: AllocateInternalDataArea() was broken for derived classes This was a result of issue #507. Now the user node data comes before the internal data. Therefore it is important to use the function InternalData() to access the internal data of a node. * Fixed issue #541: Duplicate call of EndEdit() * Fixed issue #123: Triangle button is not shown for hot node * Fixed issue #347: With VCL-Themes: No expand-pluses seen under Windows classic theme * Fixed copy&paste error is source code related to issue #519 V6.0 (13 Apr 2015) * Issue #509: Added new option hoAutoColumnPopupMenu to TVTHeaderOption. * Issue #457: Virtual TreeView no longer react on standard actions for TEdit controls We added standard actions for copy, cut, paste, delete, select all, check, uncheck in the new unit "VirtualTrees.Actions". * Issue #484: ContentToHTML() no longer pre-encodes the HTML in UTF-8 but returns a Unicodestring * Issue #507: Added to TBaseVirtualTree: function GetNodeData(pNode: PVirtualNode): T; function GetNodeDataAt(pXCoord: Integer; pYCoord: Integer): T; function GetFirstSelectedNodeData(): T; overload; function GetInterfaceFromNodeData(pNode: PVirtualNode): T; procedure SetNodeData(pNode: PVirtualNode; pUserData: Pointer); procedure SetNodeData(pNode: PVirtualNode; const pUserData: IInterface); procedure SetNodeData(pNode: PVirtualNode; pUserData: T); Similar functions have also been added to the TVirtualNode record. * The grid demo of the "Advanced" project now uses a class instead of a record and the new generic functions from issue #502. * Issue #519: Changed plus/minus buttons so that hot tracking of the buttons is always on, independent of toHotTrack. * Issue #514: The splitter area in the column header should be configurable * Issue #515: The value for Indent should get scaled too if the toAutoScale flag is set * Issue #511: From the unit VirtualTres new units have been extracted to reduce its size. * Issue #483 for TVTOperationKind.okExport: All exports can now be cancelled using CancelOperation() * Issue #362: InternalConnectNode: AdjustTotalHeight not called if Node not FullyVisible * Issue #506: Autosort is being triggered at design-time. * Issue #486: AutoScroll is performed although toAutoScroll is not set. * DoMeasureItem() now ensures that the node was initialized. * Issue #493: Editing with DblClick should always open editor immediately. * TVirtualTreeColumns.UpdatePositions() now exits immediately if the control is destroying, ths prevents AVs. * Added support for CBuilder XE7. * A larger patch from Diemtar Rösler was applied which addresses various issue regarding VCL styles (especially #478 and #491). * Supporting only Delphi / C++ Builder XE3 and higher * Improved support for C++ Builder V5.5.3: (08 Jan 2015) * Fixed issue #495: Incorrect text vertical align when changing font in OnPaintText * Fixed Issue #496: Access violation at VT destroy * Fixed issue #498: Node totalheight not initialized properly when adding new node and using toVariableNodeHeight V5.5.2: (10 Nov 2014) * Various improvements regarding code style * Implemented #471: Add emVisibleDueToExpansion and emSelected to TVTExportMode * Fixed issue #488: XE7 packages should depend on one another and use suffix 21 * Fixed issue #462: Undo r636, make VirtualTreesD require VirtualTreesR again * Fixed issue #489 XE2 compiler switch error V5.5.1: (13 Oct 2014) * Fixed issue #479: The style hooks for the VCL styles are now registered for TVirtualStringTree and TVirtualDrawTree instead of TBaseVirtualTree, which makes it easier to use own style hooks in derived classes. * Partial fix for issue #478: The standard VCL property StyleElemets (public in TControl in RAD Studio XE3 and higher) is now supported and published for TVirtualStringTree and TVirtualDrawTree (XE3 and higher). This means you can define if the font and the backgrounbd color is taken from the VCL style or the control's properties. Leaving out seBorder is not yet working well, more work will be necessary. * Fixed issue #473: Return type of GetUtilityImages should be TCustomImageList * Fix for issue #470: VCL Styles and sorting failure * Added missing inherited to CMMouseEnter() * Fixed issue #468: Redundant code in CreateSystemImageSet() * Fixed issue #482: AutoScale() could cause exception during form load. * Added fix for #466: No parent window if column created in constructor * Fixed issue #446: ScrollIntoView does not work properly after applying patch from issue #339 * Improvements for toAlwaysSelectNode option: Selection of next sibling has been improved in case the currently selected node is being removed. * Added missing begin/end-block in MeasureItemHeight() * Improved fix for issue #438: Now correctly initializing member of property TVTColors.UnfocusedColor * Improved fix for issue #447: DoMeasureItem() was called for Node instead of Child. * Minor improvement in appearance of border lines in HTML export. * Fixed issue #480: Warning when compiling Delphi XE2 packages * Fixed #472: Redundant conditions in TVclStyleScrollBarsHook.WMMouseMove * Fixed #476: Simplify TVTDragImage.WillMove() * Fixed issue #485: unit VirtualTrees does not compile with {$TYPEDADDRESS ON} V5.5: (11 Sep 2014) * Added packages for RAD Studio XE7 / Delphi XE7 * Fixed issue #464: Vertical grid lines not computed correctly for spanned cells with header auto resize * Fixed issue #442: Scrollbars are not updated for active VCL Style under XE2 * Fixed issue #463: HTML export shows grid lines in IE and Chrome, but not in Firefox * Fixed issue #460: Access violation in design time when setting "CheckBox" to True for a Virtual Treeview Column * Fixed issue #72: Call Application.CancelHint only if the current control is showing the hint * Fixed issue #461: corrected condition in TBaseVirtualTree.ScrollIntoView, so that not only partially (by the fixed area) covered columns but also totally covered columns are scrolled in view * Fixed issue #450: Regional letters entered using Right+Alt should also trigger the incremental search. * Improvemtns for toAlwaysSelectNode: Clicking the free space below the tree nodes no longer deselects the selected node. We now prevent toggling of the selection of the last selected node if toAlwaysSelectNode is set in TreeOptions. * Fixed issue #447: SetChildCount() now calls DoMeasureItem() instead of using DefaultNodeHeight. * Fixed issue #444: ERangeError in TBaseVirtualTree.CMMouseWheel * TBaseVirtualTree.MeasureItemHeight() is virtual now. * Fixed issue #445 MultiSelect behavior: Can't drag node which is not selected * Fixed Issue #443: TVirtualTreeColumns.ColumnFromPosition on right border of fixed column * Fixed issue #339: Problems with fixed column * Implemented #410: Small extension of TStringEditLink: Allow creating own edit control by moving the creation of TVTEdit from constructor to virtual PrepareEdit with assigned check. * Implemented #409: Extend THitInfo record with hit coordinates * Added suggestions of #438: Make some members visible to derived classes * Fixed issue #440: Context menu does not pop up if there is no selected node * Added C++ Builder link demand to VirtualTreesR.Lib as {$HPPEMIT} * Improved installation instructions, especially for C++ Builder V5.4.1: (26 May 2014) * Added packages for C++ Builder XE6 * If toAutoChangeScale is set in AutoOptions, the Virtual TreeView control now increases the DefaultNodeHeight if the font size is too large to fit. * If toAutoChangeScale is set in AutoOptions, the columns widths are now adjusted too. * Improved implementation for toRestoreSelection option * Fixed possible AV in PaintNodeButton() * Now ensuring that both GetHorzScrollBarSliderRect() and GetVertScrollBarSliderRect() return a valid value for every code path (Thx to Dmitri Dmitrienko). This could cause strange out of resources exceptions with VCL styles enabled. * Fixed issue #434: Application compiled with Delphi 7 stops responding when you call AddChild * A few minor changes V5.4.0: (22 Apr 2014) * Added support for XE6. * Added new option toRestoreSelection to TVTSelectionOptions: Set to true if upon refill the previously elected nodes should be selected again. The nodes will be identified by its caption only. * Added new option toAlwaysSelectNode to TVTSelectionOption enum. If this flag is set, the treeview tries to lways have a node selected. This behavior is closer to the Windows TreeView and useful in Windows Explorer tyle applications. It is also useful for accessible applications which can indicate having the focus by isplaying a selection. * Added function TBaseVirtualTree.IsEmpty which returns True if the control has no nodes. * Fixed a wrongly drawn selection after the user scrolled horizontally. * Fixed issue #423: Change property TVirtualTreeColumn.Tag to NativeInt. * Implemented #415: Added feature for design time column header dragging and resizing. (Thx to fr0st.brutal) * Fixed issue #180: Memory leak in grid demo of Advanced project * Implemented #422: Added TBaseVirtualTree.GetFirstChildNoInit() * Fixed issue #420: Add coEditable to TVTColumnOption) by applying the supplied path. Thx to Stefan Glienke. * Fixed issue #419: Some issues with changing to edit mode with clicking * Fixed issue #430: TVTDragManager memory leak with visual inheritance. Thx to Andreas Hausladen for the patch. * Fixed issue #431: Visual bug when using TStringEditLink with large node heights * TVclStyleScrollBarsHook.WMMouseMove(): Now preventing possible range check error exception. * Now handling WM_MOVE and WM_POSCHNAGED correctly in TVclStyleScrollBarsHook (Thx to Dmitri Dmitrienko) * Preventing possible stack overflow in TVirtualTreeHintWindow.ActivateHint (Thx to Dmitri Dmitrienko) * Added packages for C++ Builder XE5. * Some minor changes, improvements and fixes have been incorporated V5.3.0: (04 Jan 2014) * Fix for issue #159 (Cursor missing in edit with non-standard DPI): Ensuring a minimum size of the edit control * Fixed issue #403: Declare TVTGetNodeProc as reference to procedure (for D2009+) * Fixed issue #402: TVTEdit.CNCommand discard all notification except EN_UPDATE due to missing inherited * Corrected fix for issue #376 (Incorrect selection paint when toGridExtensions is included in the MiscOptions) * Fixed issue #401: OnNodeClick event doesn't trigger in some case, coFixed set for a column * Modified #316 (concerning r498). The fix for #316 will only be applied in case toMultiSelect is set. If toMultiSelect is not set we can start a drag anywhere in the row. * ContentToHTML() and ContentToRTF() now return a string of type RawByteString. Because the generated strings are pre-encoded in UTF-8, the previous type AnsiString caused problems in Delphi 2009+ e.g. when this string was written using the VCL TStreamWriter class. The helper class TBufferedAnsiString therefore uses RywByteString now as type too. * Fixed issue #399: EditDelay not working * Fixed issue #400: AltGr+A does not behave as expected for foreign keyboard layouts in VTEdit * Fixed issue #388: VirtualStringTree with toFixedIndent causes range check error * Edit box when editing a node in a tree with toFixedIndent now has the correct indent * Fixed issue #392: Now ensuring that MeasureItemHeight() is only called from the main thread. * Fixed #383: Clear vsHasChildren for a node without children even if the children count didn't change. * Fixed #377: Wrong font (size, etc) in TargetCanvas in MeasureItem for first node * Fixed issue #398 (hoAutoResize causes DFM designer to be modified after loading) by calling TControl.Updating()/Updated() in AdjustAutoSize() * Preventing possible AV in TBaseVirtualTree.FontChanged() * Fixed 32Bit Integer overflows in Win64 build in TBufferedAnsiString. V5.2.2: (30 Oct 2013) - Added support for Delphi / RAD Studio XE5 - Fixed issue #371: property OnGesture is now published. - Fixed issue #365: No longer changing timer resolution globally - Fixed issue #347: No expand-pluses seen under Windopws classic theme for a vcl styled application - Fixed issue #373: Scrollbar does not size properly for more than 2000 nodes with variable node height: The OnMeasureItem event is triggered only in case the toVariableNode flags in included in MiscOptions - Fixed issue #376: Incorrect selection paint when toGridExtensions is included in the MiscOptions - Improved displaying of EmptyListMessage text, especially when scrolling horizontally. - Fixed issue #61: EditCursor missing with manifest + toThemeAware + vsMultiline - Fixed issue #352: Minor improvement in calculation of right margin of hint window. V5.2.1: (06 Sep 2013) - Fixed #352 and #354 by modifying the implementation of #237 so that a focused node is ensured only if the control is being entered using the TAB key. This is consistent with the behavior of the Windows Explorer. - Fixed issue #360 (In the calculation of the horizontal scroll bar static text should be considered) by calling DoGetNodeExtraWidth() in TBaseVirtualTree.GetMaxRightExtend() - Used fix proposed in issue #361 to fix issue #357 (AV in advanced demo - PropertiesDemo form in XE3+) - Removed call to TCustomStyleEngine.UnRegisterStyleHook() to fix issue #359/#355 - Fixed issue #358: Horizontal Scrollbar issue when expand ing and scrollbars get visible - Fixed issue #355/#345: exception regarding style services V5.2: (09 Aug 2013) - OnMouseEnter and OnMouseLeave events have been added (#238) - Improved dpi scaling for VirtualTreeView and Header - toAutoChangeScale and toAutoSort are now among the defualt values for TCustomVirtualTreeOptions.AutoOptions - Fixed issue #237: Auto focus the first node on enter if there is no focused node - Fixed issue #344: Cannot select row by Ctrl+Click on empty column - Fixed issue #206: Column painting issue with coWrapCaption in Options - Fixed issue #128: OleUninitialize in FinalizeGlobalStructures can hang when using Virtual Treeview in a DLL - Added new public property LastDragEffect which supplies the last executed drag effect. - Added virtual method GetNodeImageSize() which can be overridden if one needs different sized images. - Added new public property LastDragEffect which supplies the last executed drag effect. - Fixed issue #206: Column painting issue with coWrapCaption in Options - Fixed issue #336 by ignoring PARENTDOUBLEBUFFEREDCHANGED message. - Fixed issue #342 by adding a new implementation of the VCL's DoubleBuffered property. The inherited DoubleBuffered property of TWinControl must not be set to True! - A few minor improvements have been added. V5.1.3: (17 Apr 2013) - Fixed #340: GetHitTestInfoAt on right border of fixed column. - Fixed #337: Cannot "grab" item for dragging, odd behaviour of multi selecting with the selection rectangle when toFullRowSelect is True but toSimpleDrawSelection is False. (thx to Stefan Glienke) - Fixed #341: Error when unloading DLL due to missing UnRegisterStyleHook - Improved fix for #323: The fix applied in V5.1.2 was a breaking change for some projects, especially if not all the initialization was done in the OnInitNode event (reported as #338). vsInitialUserData has been renamed to vsOnFreeNodeCallRequired and is now set when GetNodeData is called. This fixes the possible memory leak reported in #323 and has better backward compatibility. - Fixed #316: These fixes are to make the treeview behave more like the windows explorer regarding selecting and dragging. Thanks to Stefan Glienke. - Fixed #333: Possible Integer overflow in 64Bit builds. - Compatibility with / packages for Delphi Xe$ / RAD Studio XE4 have been added. V5.1.2 (04 Apr 2013): - Added function TVirtualTreeColumns.GetFirstColumn that returns the first column in display order. - Fixed issue #322: CaptionAlignment is not being restored by Header.LoadFromStream(). - TBaseVirtualTree.GetNodeData() now calls InitNode() if the node had not beend initialized. This fixes issue #323 (Memory leak when the Node has children ) - Fixed issue #326: Application hangs when aborting OLE Copy/Paste Operation - Added new option poResizeToFitItem to TVTHeaderPopupOption: Adds an item which, if clicked, resizes all columns to fit by calling TVTHeader.AutoFitColumns() - Property RangeX is now public in the class TVirtualStringTree (#327) - TVirtualTreeColumns.HandleClick(): No longer triggering auto sort if just the checkbox in the header was clicked - TBaseVirtualTree.SetCheckType new resets PVirtualNode.CheckState only if the check state does not fit the new check type - Fixed issue #321: Delphi2009: undeclared identifier: 'fState' in VirtualTrees.pas:DrawDisabledImage() - Fixed issue #315: hoHeaderClickAutoSort was only working if toAutoSort is also set V5.1.1 (07 Feb 2013): - Fixed issue #313: Translucent selection rectangle completely broken when PaintBackground is used - Fixed issue #314: Only if toAutoSort is True non-expanded nodes will be excluded from sorting. This restores the behavior of V5.0.X. - Fixed issue #306: Drag image was broken except for CF_HDROP - Fixed issue #305: Broken hint drawing with classic windows theme and toUseExplorerTheme - Fixed issue #298: Bad canvas parameters in OnBeforeCellPaint method - If NodeDataSize has its default value -1, now sizeof(Pointer) is used at runtime as actual value. This makes it easier to store a simple Pointer with each node indepedent of the target platform (32/64Bit). - Fixed issue #300: Made the hint text more centered in the hint window - If TVirtualTreeColumn.CheckBox is set to True in Designer, then hoShowImages is now added to Header.Options - Fixed issue #302: AV when painting sorted header column containing checkbox - Now soring subnodes when they get expanded and the toAutoSort flag is set - Added fix for ugly drawn disabled images (thx to S. Glienke). See also: http://stackoverflow.com/questions/6003018/make-disabled-menu-and-toolbar-images-look-better http://qc.embarcadero.com/wc/qcmain.aspx?d=86879 - Fixed issue #299: Draw themed focus rectangle with toUseExplorerTheme - Fixed issue #198: Wrong check images - Removed file VTConfig.inc. The former $ifdef ReverseFullExpandHotKey is now a flag in the TVTMiscOption enumeration. The $ifdef TntSupport can be defined at the beginning of the unit VirtualTrees. - Added new optional parameter "Recursive" to TBaseVirtualTree.Sort() V5.1.0 (05 Nov 2012): - Fixed issue #291: Empty hint strings are shown when using custom hint window classes - Added support for VCl styles of RAD Studio XE2 and higher. (Thanks to Dietmar Rösler, issue #288) - Fixed issue #285: access violation when mouse down over checkbox sometimes - Fixed issue #293: OnAdvancedHeaderDraw is called with wrong PaintInfo.PaintRectangle - Improved creation of IDragSourceHelper and added support for IDragSourceHelper2 - Fixed problem with drawing selection rectangle after canceled rename - Improved creation of IDragSourceHelper and added support for IDragSourceHelper2 - Fixed issue regarding activating explorer theme - Fixed issue #222: FDottedBrush is never released in the tree is never shown - Fixed issue #52: Misalignement of CheckBox and TreeLine/Buttons - Fixed issue #43: VT stop repaint after Windows visual style change - Fixed issue #66: column auto-resize makes not aware of StaticText - Fixed issue #53: Misalignment Images Columns > 0 - Fixed issue #176: Multiline Aligment Problem - Fixed issue #283: VTV no longer allows to drop above or below when using Full row selection - Fixed issue #173: Two suggestions about class member visibilities - Fixed issue #192: Fixed column painting bug when OffsetX > 0 - Fixed Delphi 2007 Designer package V5.0.1 (06 Sep 2012): - Added Support for RAD Studio XE3 - Fixed definition of event OnAfterHeaderExport, it used the same member variable as OnBeforeHeaderExport. - Fixed problem with Delphi 2007 package - Delphi 2009 and 2010 packages are also implicit build packages now, like those for XE and XE2 (issue #279) - Fixed #251: Added supoort for C++ Builder XE2 - Fixed #274: Wrong stop condition in TBaseVirtualTree.GetLastVisible - Fixed runtime package of Delphi 7 - Fixed issue #273: Incremental search for international symbols not working in Delphi 2009-XE2 - A few minor bug fixes have been incorporated July 03, 2012 - Release of V5.0.0 final June 11-30, 2012 - Release of V5.0.0 RC2 - Removed dependecy on file Compilers.inc - Removed dependency on file MSAAIntf.pas - Removed folder Common - Fixed issue #252: Incorrect width of edit control rectangle when grid extensions are set - Fixed issue #259: Hit position wrong when Indent is not default - Fixed issue #253: Compatibility issues with XE2's VCL style checkboxes - Fixed issue #265: Lib suffix not set for all configurations in Delphi XE2 package - Bug fix: Functions GetLastVisible and GetLastVisibleNoInit return correct results even if some anchestor of the last visible node is not effectively visible - Improvement: Added functions GetNextSiblingNoInit and GetPreviousSiblingNoInit - "Res" folder of Advanced sample was not included in ZIP archive - Added folder "Contributions" to release June 01-10, 2012 - Release of V5.0.0 RC1 - Updated help file for V5.0 April 2012 - Added support for theming of hint window (thanks to Arno Garrels and Uwe Schuster) - TBaseVirtualTree.CheckParentCheckState: Fixed duplicate recursion to parent nodes March 2012 - Fixed painting of Windows7/Vista style Explorer selection in case tsUseExplorerTheme is in TreeOptions - Ctrl + A now selects all items January 2012 - Bug fix: Fixed a potential access violation in TBaseVirtualTree.FullCollapse in case of toChildrenAbove December 2011 - Fixed compiler warning in RAD Studio XE2 regarding deprecated ThemeServices September 2011 - The property EmptyListMessage may now contain linebreaks in Delphi 2009 and higher, the text in now printed in dark gray. - Support for flat scroll bars has been removed. - Global variables InWin2k and IsWinXP, enum member hsXPStyle, function DrawXPButton() and support for Windows 2000 has been removed. - Global variable IsWinNT and support for Windows 9x has been removed. - Improvement: Added support for Delphi XE2 and 64Bit compiler. - Support for Delphi 5/6 and C++ Builder 5/6 has been dropped. - Bug fix: Fixed a potential integer overflow in TBaseVirtualTree.ToggleNode in case of toChildrenAbove and NodeInView - Bug fix: Fixed a potential Assertion in TBaseVirtualTree.ToggleNode by checking GetFirstVisible before calling GetDisplayRect - Bug fix: TCustomVirtualTreeOptions.SetPaintOptions correctly changes the VisibleCount when toShowFilteredNodes is toggled - Improvement: Added new functions TBaseVirtualTree.DetermineDropMode - Improvement: Added usage of TBaseVirtualTree.DetermineDropMode in TBaseVirtualTree.DragOver - Improvement: Made EffectiveOffsetX accessible via read-only protected property for easier subclassing - Improvement: Moved TBaseVirtualTree.DetermineLineImageAndSelectLevel from private to protected for easier subclassing - Improvement: Sorted TBaseVirtualTree.SetEmptyListMessage August 2011 - Improvement: Minor code improvements April 2011 - Bug fix: Reverted change of November 2010 (Creating the WorkerThread will no longer change System.IsMultiThread) it caused sporadic AVs during app start which disappeared after revering the change. This code can lead to a wrong value of System.IsMultiThread which causes the memory manager to assume a single threaded application. - Bug fix: When advancing to the next item while in edit mode, we are now also calling CanEdit(). February 2011 - Bug fix: In case the LastStructureChangeNode is deleted before the StructureChange event is fired, the reference to the LastStructureChangeNode is cleared to avoid providing an invalid node January 2011 - Improvement: RTF export now uses landscape paper format and smaller margins, so that more of the contents fits on the page - Improvement: New Option hoHeaderClickAutoSort for TVTHeader.Options: Clicks on the header will make the clicked column the SortColumn or toggle sort direction if it already was the sort column - Improvement: Pressing the tab key in edit mode advances to the next node in edit node, just like the Windows 7 Explorer does it. - Bug fix: No longer auto-scrolling horizontally when the focused node changes if toFullRowSelect is turned on. - Bug fix: Fixed a clipping issue when drawing unbuffered December 2010 - Improvement: TBaseVirtualTree.HandleMouseUp now checks CanEdit just in case toEditOnClick - Bug fix: TotalNodeHeights are now correctly adjusted when toggling toShowHiddenNodes - Bug fix: Fixed BCB compiler error due to re-defining IDropTargetHelper - Improvement: New TVTInternalPaintOption poUnbuffered to directly paint onto a given canvas (especially useful when printing and/or scaling via world transformations) - Improvement: Refactored header painting to be more flexible (e.g. for printing) - Improvement: Made additional fields accessible via protected read-only properties for easier subclassing November 2010 - Improvement: All calls to SetWindowOrgEx now respect the canvas' transformation - Improvement: TBaseVirtualTree.GetNodeHeight will no longer measure the node height, if the node is about to be deleted - Improvement: Made TBaseVirtualTree.FRangeX and FRangeY accessible via read-only protected property - Improvement: Unified clipping handling - Improvement: Added new color setting "SelectionTextColor" - Improvement: Creating the WorkerThread will no longer change System.IsMultiThread - Bug fix: Fixed a potential integer overflow in TBaseVirtualTree.ToggleNode - Bug fix: TBaseVirtualTree.ToggleNode now measures the child node heights before summing them - Improvement: Made some private field of TVTHeader and TVirtualTreeColumns protected to make writing derived classes easier - Improvement: Enclosed call to DoDragDrop in TBaseVirtualTree.CMDrag in a try..finally block - Improvement: The default inplace editor now resizes itself even when the tree is in grid mode - Bug fix: TBaseVirtualTree.PrepareBitmaps now checks the existance of the main column correctly - Bug fix: TBaseVirtualTree.UpdateEditBounds now checks wether the focused node is assigned - Improvement: TBaseVirtualTree.FHintData is now available to derived classes via the protected property HintData October 2010 - Bug fix: Now taking horizontal scroll position into account when drawing text of EmptyListMessage property - Bug fix: Prevented potential "index out of bounds" exception in TVirtualTreeHintWindow.CalcHintRect - Bug fix - Issue #187: Showing a dialog in OnChange or OnRemoveSelection event handlers can cause the VT to enter mode for drawing selection rectangle. - Improvement: Made inherited event OnCanResize published for TVirtualStringTree for Delphi 2010 and later - Improvement: TBaseVirtualTree.ToggleNode now tries to keep the visual position of the toggled node, even when toChildrenAbove is set September 2010 - Improvement: Added additional check regarding the tree reference to TVirtualTreeHintWindow.AnimationCallback - Improvement: Made TBaseVirtualTree.AdjustImageBorder protected and virtual - Improvement: TVirtualTreeColumns now observes if the focused column is removed - Improvement: Made compatible with Delphi XE (Thanks to Roman Kassebaum) August 2010 - Improvement: TCustomVirtualStringTree.DoTextMeasuring now returns TSize - Improvement: Renamed TVTMeasureTextWidthEvent to TVTMeasureTextEvent and introduced new event TCustomVirtualStringTree.OnMeasureTextHeight - Improvement: Made TBaseVirtualTree.GetMaxColumnWidth virtual - Bug fix: TBaseVirtualTree.OnRemoveFromSelection is now triggered by TBaseVirtualTree.RemoveFromSelection as intended July 2010 - Bug fix: Toggling toShowFilteredNodes will now update the node counts in the tree even if its handle has not been allocated so far - Bug fix: TBaseVirtualTree.FindNodeInSelection should now work correctly with nodes above the 2gb boundary - Bug fix: Nodes that are about to be deleted are now removed from TBaseVirtualTree.FDragSelection - Bug fix: Changed TBaseVirtualTree.WMKeyDown to correctly handle special keys in Unicode based Delphi versions - Bug fix: Changed declaration of TBaseVirtualTree.EmptyListMessage to UnicodeString - Improvement: Added new property TBaseVirtualTree.EmptyListMessage. If this property is not empty, the assigned text will be displayed if there are no nodes to display, similar to the Windows XP file search. - Improvement: Added tstChecked to TVSTTextSourceType enumeration and support for the new flag to GetRenderStartValues(). So you can export only checked nodes. June 2010 - Bug fix: range select with no nodes will no longer result in an access violation - Bug fix: TBaseVirtualTree.SetVisible now correctly decrements the visible node count - Bug fix: TStringEditLink.BeginEdit now calls AutoAdjustSize to ensure a consistent size of the edit field - Improvement: TVTHeader.AutoFitColumns is now declared virtual - Bug fix: header captions were badly positioned text if Extra Large fonts have been activated in the Windows display options May 2010 - Improvement: TBaseVirtualTree.PaintTree is now declared virtual - Bug fix: corrected calculations regarding tree height and visible count when using filtered nodes April 2010 - Bug fix: Changed TBaseVirtualTree.SetChildCount and TBaseVirtualTree.InitNode to correctly handle filtered nodes - Bug fix: Ctrl+Click on a node often cause a delayed update of the displayed selection due to a missing (or misplaced) call to Invalidate() in HandleClickSelection(). - Bug fix: Shift+PgUp and Shift+PgDown now behave like a usual List(View) and select the node of the previous/ next page. The behaviourly that was formerly assigned to these shortcuts is now triggeres when using Shift+Alt+PgUp / Shift+Alt+PgDown March 2010 - Bug fix: TBaseVirtualTree.CMMouseLeave now checks if the header is assigned before working with it - Bug fix: TCustomVirtualTreeOptions.SetPaintOptions will now invalidate the node cache if toChildrenAbove is changed - Bug fix: TBaseVirtualTree.HandleMouseUp will no longer cause an AV if HitInfo.HitNode is not assigned and tsToggleFocusedSelection is set - Improvement: new properties TBaseVirtualTree.OnAddToSelection and TBaseVirtualTree.OnRemoveFromSelection - Bug fix: fixed a whole bunch of painting issues regarding drag & drop - Bug fix: fixed TBaseVirtualTree.DragFinished to generate a button up event in case of using OLE drag & drop - Bug fix: TBaseVirtualTree.DeleteChildren no longer fails if the given node is nil January 2010 - Bug fix: Removed defaults from TVirtualTreeColumn.BiDiMode and TVirtualTreeColumn.Color - Bug fix: Clearing the columns while editing no longer raises an exception - Improvement: refactored handling of long running operations - Bug fix: TBaseVirtualTree.OnGetHelpContext now delivers the currently focused column instead of always 0 - Improvement: the sort operation can now be canceled - Improvement: all BeginOperation/EndOperation pairs are now enclosed in try..finally blocks - Bug fix: the combination of toUseExplorerTheme and toFullRowSelect now also works correct when no columns are defined December 2009 - Bug fix: TVTHeader.HandleMessage now correctly handles double click autosizing when the index differs from its position November 2009 - Bug fix: TBaseVirtualTree.AdjustTotalHeight didn't change the height of invisible nodes which caused some trouble when making those nodes visible again - Improvement: a column is no longer painted 'down' if its check box was clicked - Bug fix: one can no longer toggle the check state of a column with the right mouse button - Bug fix: one can no longer toggle the check state of a node with the right mouse button - Bug fix: TCustomVirtualTreeOptions.SetPaintOptions no longer accidentally removed the the explorer theme - Bug fix: Fixed a potential Integer overflow in TBaseVirtualTree.CalculateVerticalAlignments October 2009 - Bug fix: enabling checkbox support for a column is now possible without assigning a dummy imagelist - Bug fix: checkboxes in the header are now correctly aligned - Improvement: changed TBaseVirtualTree.PaintCheckImage to be usable by TVirtualTreeColumns.PaintHeader to be able to paint themed header checkboxes - Bug fix: TBaseVirtualTree.GetCheckImage now correctly handles cases when Node is nil and ImgCheckType is either ctTriStateCheckBox or ctNone - Bug fix: TBaseVirtualTree.HasImage now implicitly initializes the given node if needed to avoid requesting the imageindex for nodes that are not initialized - Bug fix: fixed possible AV when setting toExplorerTheme with no columns defined - Improvement: new events TBaseVirtualTree.OnSaveTree and TBaseVirtualTree.OnLoadTree September 2009 - Bug fix: TBaseVirtualTree.OnColumnClick will no longer be triggered twice - Improvement: new TVirtualNodeInitState ivsReInit to indicate that a node is about to be re-initialized - Bug fix: TCustomVirtualStringTree.DoTextMeasuring now makes use of the parameter Width of the OnMeasureTextWidth event - Bug fix: TBaseVirtualTree.DetermineLineImageAndSelectLevel will no longer access LineImage[-1] - Bug fix: clearing the columns now correctly reset TBaseVirtualTree.FFocusedColumn - Improvement: explorer style painting is now more close to the real explorer - Bug fix: TCustomVirtualStringTree.TContentToHTML.WriteStyle will no longer produce invalid CSS - Bug fix: the parameter DragEffect of TBaseVirtualTree.DragAndDrop is now var as it should be August 2009 - Bug fix: TBaseVirtualTree.MoveTo now initializes the target node using the target tree - Bug fix: TBaseVirtualTree.FVisibleCount is now calculated correctly when using filtered nodes - Improvement: introduced new initial node state ivsFiltered July 2009 - Improvement: modified TVTHeader.HandleHeaderMouseMove to make resizing the autosize column with the mouse possible - Improvement: modified TBaseVirtualTree.DoCreateEditor so that applications can now return NIL in OnCreateEditor to use the standard editor of the tree - Bug fix: pressing CTRL + PgUp/PgDown no longer leads to an index-out-of-bounds exception if no columns are used - Bug fix: avoided race condition between TBaseVirtualTree.DeleteNode and the worker thread - Bug fix: TBaseVirtualTree.ToggleNode could produce an overflow if range checking was enabled - Bug fix: TWorkerThread will no longer reference the tree after it has been destroyed (Mantis issue #384) - Improvement: removed support for Delphi versions older than Delphi 7 - Improvement: removed local memory manager June 2009 - Bug fix: TBaseVirtualTree.InternalConnectNode checked the expanded state of the wrong node if Mode was amAddChildFirst or amAddChildLast - Improvement: 'hidden nodes' are now called 'filtered nodes' - Improvement: converted line endings back to CR/LF - Improvement: new events TBaseVirtualTree.OnCanSplitterResizeNode and TBaseVirtualTree.OnCanSplitterResizeHeader - Improvement: made TVirtualTreeColumns.DoCanSplitterResize virtual - Improvement: made some methods of TVirtualTreeHintWindow protected to make subclassing easier - Bug fix: fixed some issues concerning the vista theme handling - Improvement: unified source code indentation May 2009 - Improvement: new TVTMiscOption toEditOnClick, toEditOnDblClick to control if editing can be started with a single click or a double click - Bug fix: the internal pointers of TBufferedAnsiString are now PAnsiChar to work correctly with Delphi 2009 April 2009 - Bug fix: TBaseVirtualTree.GetVisibleParent no longer returns the given node in case it is fully visible - Improvement: fixed a potential issue in TVirtualTreeColumns.TotalWidth in case it is called before FPositionToIndex is initialized - Bug fix: TBaseVirtualTree.CollectSelectedNodesLTR and TBaseVirtualTree.CollectSelectedNodesRTL handle straight vertical selection rectangles no longer as empty - Bug fix: TCheckImageKind.ckSystemDefault now works as intended - Improvement: made the following methods of TBaseVirtualTree virtual: PrepareCell, AddChild, BeginUpdate, EndUpdate and SortTree - Improvement: made TBaseVirtualTree.PrepareCell protected - Improvement: moved some members of TVTEdit and TStringEditLink from private to protected - Improvement: re-designed header click handling - Improvement: new TVTPaintOption toShowHiddenNodes to globally ignore the hidden state of nodes - Improvement: individual nodes can now be hidden without affecting their children - Improvement: re-designed Explorer theme drawing - Bug fix: corrected allocation problems in TBufferedAnsiString and TWideBufferedString March 2009 - Bug fix: fixed an issue in TVirtualTreeColumns.HandleClick that could lead to a case where no header click event is triggered - Bug fix: fixed an issue in TBaseVirtualTree.HandleHotTrack that could lead to an endless loop under certain conditions - Improvement: removed unused variables in TVirtualTreeColumn.ComputeHeaderLayout - Bug fix: corrected TBaseVirtualTree.GetVisibleParent - Improvement: extended hot node tracking to track the hot column too - Improvement: new THitPosition hiOnItemButtonExact used to draw hot buttons when using Windows Vista's Explorer theme - Improvement: new TVTPaintOption toHideTreeLinesIfThemed to consider toShowTreeLines only if running unthemed - Improvement: new TVTPaintOption toUseExplorerTheme to draw the tree like Windows Vista's Explorer treeview February 2009 - Bug fix: reverted the implementation of DrawTextW back to the one prior to 4.8.1 as the line end detection lead to a compiler warning under Delphi 2009 - Bug fix: corrected implementation of GetStringDrawRect to match its declaration (UnicodeString vs WideString) - Bug fix: the node focus will no longer change if a TVTMiscOption.toGridExtensions is set and one clicks right of (or left of, if right-to-left reading) the last column - Bug fix: fixed an issue with TVTHeader.Assign that could lead to an access violation if the header is created at runtime - Bug fix: one can no longer change a node's height with the right mouse button even if toNodeHeightResize and toRightClickSelect are set - Improvement: TVTAutoOption.toDisableAutoScrollOnFocus now works for nodes too - Improvement: new property TBaseVirtualTree.SelectionLocked to disable changing the selection - Improvement: made the dual-scroll effect in TBaseVirtualTree.ToggleNode much smoother - Bug fix: removed off-by-1 errors in TBaseVirtualTree.ToggleNode - Bug fix: added a check for FUpdateCount to TBaseVirtualTree.SetUpdateState as otherwise every call to TBaseVirtualTree.DoBeforeCellPaint to get the cell content margin within an Begin/EndUpdate-block would re-enable painting - Bug fix: TVTHeader.HandleMessage could provide a wrong column index to OnBeforeColumnWidthTracking in some cases - Improvement: new properties TBaseVirtualTree.OnBeforeAutoFitColumn, TBaseVirtualTree.OnAfterAutoFitColumn - Improvement: new procedures TBaseVirtualTree.CancelOperation, TBaseVirtualTree.BeginOperation, TBaseVirtualTree.EndOperation and new property TBaseVirtualTree.OperationCanceled to enable the application to stop (possibly) long-running operations - Improvement: integrated changes from Andreas Hausladen - Improvement: integrated changes from Dmitry Zegebart where applicable - Bug fix: removed off-by-1 error in TBaseVirtualTree.GetDisplayRect - Bug fix: changed the size of the buffer used in TBaseVirtualTree.PaintTree to paint the area below the last node as the bitmap was not completely erased using previous size under certain conditions - Bug fix: fixed TBaseVirtualTree.GetPreviousLevel January 2009 - Bug fix: removed off-by-1 error in TBaseVirtualTree.GetBottomNode - Improvement: improved speed of TBaseVirtualTree.GetMaxColumnWidth when using UseSmartColumnWidth - Version is now 4.8.0 December 2008 - Bug fix: modified TBaseVirtualTree.UpdateHorizontalScrollbar and TBaseVirtualTree.UpdateVerticalScrollbar to recalculate the tree's dimensions even if an update is in progress - Improvement: renamed TVTHeaderState hsTracking and hsTrackPending to hsColumnWidthTracking and hsColumnWidthTrackPending - Improvement: modified TBaseVirtualTree.GetFirstVisible and TBaseVirtualTree.GetFirstVisibleNoInit to optionally take a node to specify where to start - Improvement: modified TVTAfterGetMaxColumnWidthEvent to make the result of TBaseVirtualTree.GetMaxColumnWidth changable - Bug fix: corrected TBaseVirtualTree.GetMaxColumnWidth to consider toFixedIndent and no longer take nodes into account that are just above or below the visible area - Improvement: new property TVirtualTreeColumns.DefaultWidth - Improvement: new property TVTHeader.FixedAreaConstraints (new class TVTFixedAreaConstraints) to limit the fixed area (header, fixed columns) to a percentage of the client area November 2008 - Improvement: new cursor added: crVertSplit used for height tracking - Improvement: changed type of TVTHeader.Height from Cardinal to Integer to make boundary checks easier - Improvement: new properties TVTHeader.MinHeight and TVTHeader.MaxHeight - Improvement: new VirtualTreeStates tsNodeHeightTracking and tsNodeHeightTrackPending - Improvement: new HeaderStates hsHeightTracking and hsHeightTrackPending - Improvement: new TVTMiscOption toNodeHeightResize to allow changing node heights via mouse - Improvement: new TVTHeaderOption hoHeightResize to allow changing header height via mouse - Improvement: new properties TBaseVirtualTree.OnHeaderHeightTracking, TBaseVirtualTree.OnHeaderDblClickResize, TBaseVirtualTree.OnColumnWidthTracking, TBaseVirtualTree.OnColumnWidthDblClickResize, TBaseVirtualTree.OnNodeHeightTracking, TBaseVirtualTree.OnNodeHeightDblClickResize - Improvement: new function TVTHeader.ResizeColumns to resize multiple columns at once - Improvement: TVTHeader.DetermineSplitterIndex is no longer influenced by non-resizable columns - Bug fix: TBaseVirtualTree.ToggleNode now uses DoStateChange to modify FStates - Bug fix: TBaseVirtualTree.DoBeforeCellPaint now saves the update rect if CellPaintMode is cpmGetContentMargin and restores it afterwards - Improvement: modified TBaseVirtualTree.CmMouseWheel to handle mice with wheel delta < 120 correctly - Improvement: modified TVTHeader.LoadFromStream and WriteToStream to save ParentFont - Improvement: TVTHeader.Font is now only stored by Delphi if ParentFont is False (Mantis issue #217) - Bug fix: corrected TVTHeader.Create to set TVTHeader.FOptions correctly to the default value (Mantis issue #333) - Improvement: new TVTAnimationOption toAdvancedAnimatedToggle to scroll the node to be toggled animatedly instead of just scroll its child nodes animatedly - Improvement: added VirtualTreeState tsToggling to eliminate artefacts caused by TBaseVirtualTree.DoSetOffsetXY while toggling - Bug fix: corrected button handling when toFixedIndent is set - Improvement: redesigned TBaseVirtualTree.ToggleNode to harmonize the visual toggle behaviour independent of toChildrenAbove - Improvement: made TBaseVirtualTree.CanEdit public - Improvement: added parameter ConsiderChildrenAbove to TGetNextNodeProc - Improvement: modified all variants of TBaseVirtualTree.GetFirst and TBaseVirtualTree.GetLast to optionally consider toChildrenAbove October 2008 - Bug fix: removed 'FVisibleCount := 0' from TBaseVirtualTree.Clear as this would lead to incorrect VisibleCount in read-only mode - Bug fix: fixed a condition in TBaseVirtualTree.ToggleCallback that could lead to artefacts - Improvement: changed the implementation of TBaseVirtualTree.GetNext/GetPrevious so that no penalties occur if toChildrenAbove is not set - Improvement: TBaseVirtualTree.ToggleNode will no longer leave nodes with state vsToggeling if an exception occurs - Improvement: improved behaviour of TBaseVirtualTree.ToggleNode in case toChildrenAbove is set - Bug fix: corrected TBaseVirtualTree.ScrollIntoView to behave as expected when no fixed columns exist - Bug fix: extended TBaseVirtualTree.InitializeLineImageAndSelectLevel to eliminate artifacts while scrolling with toChildrenAbove set - Bug fix: corrected CompareNodePositions to consider toChildrenAbove - Bug fix: corrected ToggleNode to scroll correctly if toChildrenAbove and toAnimatedToggle are set - Improvement: new TVTPaintOption toFixedIndent to draw the tree with a fixed ident (instead of node level dependent indents) - Improvement: new TVTPaintOption toChildrenAbove to draw children nodes above their parent August 2008 - Improvement: redesigned and overloaded TBaseVirtualTree.ScrollIntoView in order to use vertical scrolling separately - Improvement: optimized TBaseVirtualTree.ScrollIntoView for horizontal scrolling - Improvement: in TBaseVirtualTree.WMKeyDown column navigation for VK_PRIOR and VK_NEXT is now handled in same way as row navigation - Improvement: new TVTHeaderOption hoDisableAnimatedResize to disable animated resize for all columns - Improvement: new TVTColumnOption coDisableAnimatedResize to disable animated resize for a specific column - Improvement: in TBaseVirtualTree.UpdateHorizontalScrollBar and TBaseVirtualTree.UpdateVerticalScrollBar scrollbar updates now avoided for tsUpdating in FStates July 2008 - Improvement: in TBaseVirtualTree.WMHScroll the horizontal page scrolling now considers fixed columns - Improvement: in TBaseVirtualTree.ScrollIntoView the case of FFocusedColumn being invalid is considered - Improvement: in TBaseVirtualTree.HandleMouseDown DoFocusNode is not called if node focus did not change - Improvement: in TBaseVirtualTree.SetFocusedColumn the focused node will only be invalidate if it was actually scrolled into view - Improvement: new TVTColumnOption coAllowFocus to affect column focus behaviour - Improvement: new function TVTHeader.AllowFocus to check wether a column can be focused - Improvement: in TBaseVirtualTree.SetFocusedColumn the old colunm and the new column are both invalidated - Improvement: merged latest changes from Jim into current code base. June 2008 - Improvement: new property TVirtualTreeColumns.Count - Bug fix: in TVirtualTreeColumns.AnimatedResize the column is validated (to avoid "List index out of bounds") - Improvement: the content retangle of the cell can be modified via the OnBeforeCellPaint event, the cell paint mode indicates wether OnBeforeCellPaint is called for painting the cell or just for getting the cell content margin - Improvement: new functions added: TBaseVirtualTree.DoGetCellContentMargins, TCustomVirtualDrawTree.DoGetCellContentMargin - Improvement: new property: TCustomVirtualDrawTree.OnGetCellContentMargin - Improvement: in TBaseVirtualTree.GetMaxColumnWidth the cell content margin is considered - Improvement: in TBaseVirtualTree.CMHintShow the cell content margin is considered for singleline tooltips - Improvement: new function added: TVTHeader.DoGetPopupMenu (to query the application via TreeView.FOnGetPopupMenu for a column specific header popup menu) - Improvement: new property added: TBaseVirtualTree.OnCanSplitterResizeColumn, new function added: TVirtualTreeColumns.GetScrollWidth - Improvement: horizontal page scrolling now uses the average column width (of all visible, non-fixed columns) as scroll amount - Improvement: procedure TBaseVirtualTree.CMMouseWheel redesigned - Bug fix: TVTHeader.DetermineSplitterIndex works correctly even when using fixed columns - Bug fix: on right-to-left BiDiMode TVirtualTreeColumns.PaintHeader respects (left) scroll bar correctly - Bug fix: for multiline tooltips also the column width is checked to determine the tooltip is needed or unnecessary - Improvement: the result value of GetUseSmartColumnWidth is initialized correctly - Improvement: added hoFullRepaintOnResize to TVTHeaderOption to enable full header repainting (instead of repainting all subsequent columns only) on resizing a column - Bug fix: horizontal page scrolling via mouse wheel now works correctly, i.e. in TBaseVirtualTree.CMMouseWheel ScrollCount includes GetVisibleFixedWidth and FIndent - Improvement: new TVTColumnOption coSmartResize to avoid contradicting the virtual paradigm - Improvement: horizontal scrolling via mouse wheel can be forced by holding the shift key - Improvement: new parameter for function TBaseVirtualTree.GetMaxColumnWidth added: UseSmartColumnWidth (to avoid contradicting the virtual paradigm, i.e. leave nodes out of consideration which are not in view) - Improvement: new parameters for TVTHeader.AutoFitColumns added: SmartAutoFitType, RangeStartCol and RangeEndCol - Improvement: new parameters for events FOnAfterAutoFitColumns, FOnBeforeAutoFitColumns, FOnAfterGetMaxColumnWidth and FOnBeforeGetMaxColumnWidth added - Version is now 4.6.0 May 2008 - Improvement: new properties: FOnAfterAutoFitColumns, FOnBeforeAutoFitColumns, FOnAfterGetMaxColumnWidth and FOnBeforeGetMaxColumnWidth - Bug fix: FDropTargetNode is considered in TBaseVirtualTree.DoFreeNode August 2007 - for accessibility, added an OnGetImageText event that can be used to give accessible text to images used in nodes. - Implemented an ImageText property used by the VTAccessibility unit to retrieve text for a given node and its column. - Switched loading of accessibility libraries to dynamic from static to avoid problems in Win95 June 2007 - Bug fix: Fixed a problem with potentially large amount of nodes (larger than 2 billion) in TBaseVirtualTree.SetChildCount. - Bug fix: remove hint if any in case the tree loses the focus. - Improvement: TVirtualTreeColumns.HandleClick is now virtual, introduced TVTHeader.DoSetSortColumn. - Bug fix: compiler error due to old variable reference when enabling flat scrollbars. May 2007 - Improvement: new functions: GetPreviousSelected, GetPreviousChecked, GetCheckedCount, GetPreviousCutCopy, GetCutCopyCount, GetFirstLeaf, GetNextLeaf, GetPreviousLeaf, GetFirstLevel, GetNextLevel, GetPreviousLevel - Improvement: new properties: CheckedCount, CutCopyCount - Improvement: DoFocusChanging for finding a valid column (TBaseVirtualTree.WMKeyDown) March 2007 - Improvement: adjusted accessibility implementation to compile with pre-BDS IDEs. - If a column is not visible, MultiColumnAccessibility now will not include it. January 2007 - Improvement: added code donation from Marco Zehe (with help from Sebastian Modersohn) which implements the MS accessibility interface for Virtual Treeview. December 2006 - Improvement: bidi mode implementation finished (toAutoBidiColumnOrdering introduced) - Change: right-to-left flag removed from shorten string methods/events (not necessary) - Version is now 4.5.0 November 2006 - Bug fix: Total height is wrong on reading from stream September 2006 - Bug fix: Mantis issue #326 July 2006 - Change: value for crHeaderSplit cursor conflicts with other resource IDs, so I changed it. - Published OnStartDrag in VirtualDrawTree. April 2006 - Bug fix: check for MMX availabiltiy is missing in some places before calling MMX code - Bug fix: flag for VCL dragging was removed too late causing all kind of problems with mouse up code in VCL drag mode. - Bug fix: If the past mode in ProcessOLEData is amInsertAfter then nodes where inserted in the wrong order. March 2006 - Bug fix: total count and total height is wrong after loading from stream - Bug fix: variable node height computation - Bug fix: FLastChangedNode was not reset in DoFreeNode February 2006 - Improvement: GetFirstChecked now also has a default value for its state parameter. - Improvement: avoid potential reentrancy problems in paint code by checking for the paint state there. January 2006 - Bug fix: disabled images are now drawn like enabled ones (with respect to position, indices etc.). - Improvement: New property BottomSpace, allows to specify an additional area below the last node in the tree. - Bug fix: VT.EndUpdate did not invalidate the cache so the cache was never used again after that. - Improvement: tree states for double clicks (left, middle, right). December 2005 - Bug fix: check for column index for auto setting main column if the current one is deleted. For full document history see help file. * Fixed issue #692: HitInfo for OnNodeClick event may differ much from HandleMouseDown * Fixed issue #687 by extracting new method DeleteNodes() from existing DeleteSelectedNodes(). * Fixed issue #689: Possible Integer overflow in PaintColumnHeader() when dragging a column to first position. * Fixed issue #693: TVirtualTreeAccessibility.accSelect() should handle the flag SELFLAG_EXTENDSELECTION * Fixed issue #690: Tree shouldn't keep selected elements, if toAlwaysSelectNode is set and other elements are selected without ctrl-modifier V6.5: (18 Jan 2017) * License change from LGPL to "LGPL with static linking exception". See issue #673 for details. * Enhancement #662: Background image now supports transparency * Fixed #677: Improved per monitor dpi awareness. NodeHeight is now scaled as well if toAutoScale is set. * Fixed #289: HintMode hmHintAndDefault: Default Hint does not change to node specific hint when the mouse is moved to a node. * Fixed #674: HintMode hmHintAndDefault: If the BidiMode is right to left, the Default Hint fails to appear * Fixed #139: hoDblClickResize doesn't work correctly with InitalState ivsMultiline * Fixed #668: Removed unnecessary #include * Fixed #670: Make it possible to override RangeX * Fixed #676: VCL themed scrollbar does not update correctly after adding children * Fixed #626: Wrong hot node selection during mouse movement over different nodes * Fixed #679: The OnChange event when right clicking a node should always be fired before the OnPopup event * Fixed #678: Occasional Access Violation in GetDisplayRect * Fixed #682: Drag & Drop range exception V6.4.1: (26 Oct 2016) * Fixed #549: Drawing issue with toCheckSupport an toExtendedFocus * Fixed #663: Exception pressing return on an edited item with no columns) * Fixed #661: Minimal Demo 2 different problems, can't select on start up, multiple clicks causes error * Fixed problem with wrongly drawn checkbox in column headers. * VirtualTreePerItemAction now initializes all nodes before it works with them and changes e.g. the check state. * TBaseVirtualTree.DoGetImageIndex() now always tries to assign a default image list as result, even if OnGetImage and OnGetImageEx are not assigned. So derived controls do not need to make this step. V6.4: (28 Sep 2016) * Fixed #622: [BREAKING CHANGE] Removed all 16x16 fixed sized checkbox-imagelists. The property CheckImageKind supports the values ckSystemDefault and ckCustom only and should be considered deprecated. * Fixed #640: Edit control for in-place editing wrongly scaled in high-dpi scenarios * Fixed #627: It should be possible to use OnGetImageIndexEx without having imagelists assigned * Added assertion that verifies if an imageindex is supplied but no valid imagelist is available for this imageindex * Fixed #148: Background Images now support other formats than just bitmaps. * Fixed #623: GetHint calculates wrong width for HintText * Fixed #633: High dpi scaling was performed two times * Fixed #544, #427: Header painting problem with BiDiMode right to left * TBaseVirtualTree.EnsureNodeSelected() only scrolls the selected node into the view, if no one was previously selected. * Fixed #248: VT Header draws smudged * Fixed #643: VT Header dropmark appears even if dragged column won't change position * Fixed #310: Incorrect selection paint when toAutoSpanColumns, toGridExtensions and toExtendedFocus are set * Fixed #653: GetFirstVisibleChild/NoInit check for wrong node if IncludeFiltered=True (thx to A. Hausladen) * Fixed #659: GetLastVisibleChild/NoInit checks wrong node * Fixed #647: New option to set the way of selecting next cell for editing in grid mode * Fixed #645: Can't link 64 bit VCL app with VirtualTreeView in C++ Builder 10.1 Berlin * Fixed #656: Fixed memory leaks in Advanced Demo * Enhancement #631: Added new Demo project CharityEvents to demonstrate the use of Interfaces for node's data and for data presentation * Fixed #658: Column Header does not paint correctly after a drop in certain conditions * Fixed #639: Scrolbars are not correctly themed under certain cirumstances when using a VCL theme. * Fixed #624: Wrong y-postion of checkboxes in high-dpi display mode * Fixed #548: Add flag coStyleColor to TVirtualTreeColumn.Options (prefer background color of VCL style over TVirtualTreeColumn.Color) * Fixed #660: Fix AV when tree is modified in OnEdited event * Some minor tweaks on Virtual TreeView source code and sample projects V6.3: (17 May 2016) * Added support for RAD Studio 10.1 Berlin * Implemented #607: Disabled checkbox images should be available * Fixed #612: hotkey handing and toReverseFullExpandHotKey * Fixed #602: Dangling WM_Timer and doubled OnChange calls * Fixed #606: High DPI Inheritance of Form. TBaseVirtualTree.ChangeScale() now respects inherited property ScalingFlags * Fixed #608: Horizontal lines paint bug on scroll. * Fixed #605 : If a new node is selected by left click, OnChange event should not fire with `nil` in-between. * TBaseVirtualTree.EnsureNodeSelected() no longer changes scroll position unless necessary to make the selected node visible. * Pull request #609: Updated unit "Contributions/GenericWrapper/VirtualTreeWrapper.pas" * Started adding unit tests with DUnitX. * Minor tweaks. V6.2.3 (11 Feb 2016) * Fixed accidental remove of vsReleaseCallOnUserDataRequired flag which can cause mem leaks. * TVirtualNode.SetData() now sets the vsOnFreeNodeCallRequired flag for all types of user data and so is consisted with other SetData / GetData methods. * TCustomVirtualStringTree.SetChildCount() now calls ResetInternalData()= with Recurse = False to avoid that all siblings of the new children are reseted recursively. See isuue #576 * TCustomVirtualStringTree.ResetInternalData() now respects the Recursive parameter V6.2.2 (20 Jan 2016) * Issue #603: If the node already has children, then its nodeheight is valid and we must not remove its total height, but rather its height * Fixed issue #599: Possible infinite loop in GetPreviousVisibleNoInit() * Added new method TBaseVirtualTree.InitRecursive() as workaround for issue #597: Initializes a node and optionally its children up to a certain level. * Issue #598: SetData, like GetData no longer forces the "class" constraint on its generic parameter * Fixed issue #596 by moving initialization of global variable Watcher also to InitializeGlobalStructures() Now ensuring using interlocked function that InitializeGlobalStructures() is executed only once * Fixed issue #458: If the Virtual TreeView control is placed on a control that has the StyleEx flag WS_EX_COMPOSITED set, horizontal scrolloing does not update the header * Fixed issue #595: Before using SetTimer, check for valid WindowHandle * Fixed issue #594: Basic TVirtualStringTree Colors does not apply * Fixed issue #591: Now calling UnRegisterStyleHook() for the style class in "VirtualTrees.StyleHooks". * Fixed #590: Allow to store InternalData also for (internal) root node * if only one node is selected, make sure the focused node changes with the selected node * Added assertion that ensures that BeginUpdate() is called from main thread only. * Getter function GetCheckedCount() is protected now instead of public V6.2.1 (06 Nov 2015) * #585: Checkboxes now have the correct size and scale properly on high dpi systems. * #588: Fixed HTML clipboard export * #586: TBaseVirtualTree.SetChildCount() no longer calls to ReInitNode(Node, True). This caused the OnInitChildren-Event to be fired twice. * Adjusted GetNodeDataAt() and GetFirstSelectedNodeData() to work with interfaces. * If multi selection is not allowed and so only one node can be selected, make sure the focused node changes with the selected node in SetSelected() * Added packages for the C++Builder 10. V6.2 (09 Sep 2015) * Issue #582: Added support and packages for RAD Studio 10 Seattle * Issue #580: Added support for Delphi package manager Delphinus * Fixed issue #571: Grid mode and extended selection leads to drawing inconsistencies * Fixed issue #569 which includes a fix for AddChild(). * Fixed issue #568: Integer overflow when reiniting nodes and using ivsFiltered * Merged pull request #564 which includes a fix for ComputeNodeHeight() and single line nodes * Merged pull request #563 which prevents an access violation when using custom check images in column headers * Merged pull request #561 which makes VclStyleChanged() virtual * Fixed issue #557: Using isFiltered in InitNode leads to integer overflows or bogus rendering * Fixed issue #556: Variable height and more than 1 level results in incorrect RangeY * Fixed issue #555: The OnChange event is not fired in case the selected node is deleted through DeleteChildren(). Although no the option toAlwaysSelectNode is set, the parent node was not selected afterwards. * Fixed issue #553: painting failure with variable NodeHeight * Fixed issue #551: Some overlay images were drawn ghosted like the main image, some not. * TBaseVirtualTree.PrepareBitmaps() now fires the OnPrepareButtonImages event also in case VCL styles are used. * Added implementation for TVirtualTreeAccessibility.accSelect() so that screen readers and especially UI testing tools can use MSAA to select specific elements in the control. * Property OnColumnVisibilityChanged is now published. * Now using type TImageIndex instead of integer for variables and parameters that store an image index. V6.1 (02 June 2015) * Implemented Issue #530: Removed all AnsiString code from export routines. Breaking changes: - TCustomVirtualStringTree.ContentToText() is now based on (Unicode)string and no longer on AnsiString. - TCustomVirtualStringTree.ContentToUnicode() is now deprecated, use ContentToText() instead. * Implemented issue #536: Add export event that is triggered for each cell - Added new event OnGetCellText which has new TVSTGetCellTextEventArgs record as parameter. This event could supersede the OnGetText event in a future version. - All export formats now also export static text, in case the toShowStaticText flag is set * Fixed issue #545: VCL Themes: Background of scrollbars is erased with wrong color * Fixed issue #487: When OnAddToSelection is called, GetFirstSelected returns nil * Fixed issue #542: AllocateInternalDataArea() was broken for derived classes This was a result of issue #507. Now the user node data comes before the internal data. Therefore it is important to use the function InternalData() to access the internal data of a node. * Fixed issue #541: Duplicate call of EndEdit() * Fixed issue #123: Triangle button is not shown for hot node * Fixed issue #347: With VCL-Themes: No expand-pluses seen under Windows classic theme * Fixed copy&paste error is source code related to issue #519 V6.0 (13 Apr 2015) * Issue #509: Added new option hoAutoColumnPopupMenu to TVTHeaderOption. * Issue #457: Virtual TreeView no longer react on standard actions for TEdit controls We added standard actions for copy, cut, paste, delete, select all, check, uncheck in the new unit "VirtualTrees.Actions". * Issue #484: ContentToHTML() no longer pre-encodes the HTML in UTF-8 but returns a Unicodestring * Issue #507: Added to TBaseVirtualTree: function GetNodeData(pNode: PVirtualNode): T; function GetNodeDataAt(pXCoord: Integer; pYCoord: Integer): T; function GetFirstSelectedNodeData(): T; overload; function GetInterfaceFromNodeData(pNode: PVirtualNode): T; procedure SetNodeData(pNode: PVirtualNode; pUserData: Pointer); procedure SetNodeData(pNode: PVirtualNode; const pUserData: IInterface); procedure SetNodeData(pNode: PVirtualNode; pUserData: T); Similar functions have also been added to the TVirtualNode record. * The grid demo of the "Advanced" project now uses a class instead of a record and the new generic functions from issue #502. * Issue #519: Changed plus/minus buttons so that hot tracking of the buttons is always on, independent of toHotTrack. * Issue #514: The splitter area in the column header should be configurable * Issue #515: The value for Indent should get scaled too if the toAutoScale flag is set * Issue #511: From the unit VirtualTres new units have been extracted to reduce its size. * Issue #483 for TVTOperationKind.okExport: All exports can now be cancelled using CancelOperation() * Issue #362: InternalConnectNode: AdjustTotalHeight not called if Node not FullyVisible * Issue #506: Autosort is being triggered at design-time. * Issue #486: AutoScroll is performed although toAutoScroll is not set. * DoMeasureItem() now ensures that the node was initialized. * Issue #493: Editing with DblClick should always open editor immediately. * TVirtualTreeColumns.UpdatePositions() now exits immediately if the control is destroying, ths prevents AVs. * Added support for CBuilder XE7. * A larger patch from Diemtar Rösler was applied which addresses various issue regarding VCL styles (especially #478 and #491). * Supporting only Delphi / C++ Builder XE3 and higher * Improved support for C++ Builder V5.5.3: (08 Jan 2015) * Fixed issue #495: Incorrect text vertical align when changing font in OnPaintText * Fixed Issue #496: Access violation at VT destroy * Fixed issue #498: Node totalheight not initialized properly when adding new node and using toVariableNodeHeight V5.5.2: (10 Nov 2014) * Various improvements regarding code style * Implemented #471: Add emVisibleDueToExpansion and emSelected to TVTExportMode * Fixed issue #488: XE7 packages should depend on one another and use suffix 21 * Fixed issue #462: Undo r636, make VirtualTreesD require VirtualTreesR again * Fixed issue #489 XE2 compiler switch error V5.5.1: (13 Oct 2014) * Fixed issue #479: The style hooks for the VCL styles are now registered for TVirtualStringTree and TVirtualDrawTree instead of TBaseVirtualTree, which makes it easier to use own style hooks in derived classes. * Partial fix for issue #478: The standard VCL property StyleElemets (public in TControl in RAD Studio XE3 and higher) is now supported and published for TVirtualStringTree and TVirtualDrawTree (XE3 and higher). This means you can define if the font and the backgrounbd color is taken from the VCL style or the control's properties. Leaving out seBorder is not yet working well, more work will be necessary. * Fixed issue #473: Return type of GetUtilityImages should be TCustomImageList * Fix for issue #470: VCL Styles and sorting failure * Added missing inherited to CMMouseEnter() * Fixed issue #468: Redundant code in CreateSystemImageSet() * Fixed issue #482: AutoScale() could cause exception during form load. * Added fix for #466: No parent window if column created in constructor * Fixed issue #446: ScrollIntoView does not work properly after applying patch from issue #339 * Improvements for toAlwaysSelectNode option: Selection of next sibling has been improved in case the currently selected node is being removed. * Added missing begin/end-block in MeasureItemHeight() * Improved fix for issue #438: Now correctly initializing member of property TVTColors.UnfocusedColor * Improved fix for issue #447: DoMeasureItem() was called for Node instead of Child. * Minor improvement in appearance of border lines in HTML export. * Fixed issue #480: Warning when compiling Delphi XE2 packages * Fixed #472: Redundant conditions in TVclStyleScrollBarsHook.WMMouseMove * Fixed #476: Simplify TVTDragImage.WillMove() * Fixed issue #485: unit VirtualTrees does not compile with {$TYPEDADDRESS ON} V5.5: (11 Sep 2014) * Added packages for RAD Studio XE7 / Delphi XE7 * Fixed issue #464: Vertical grid lines not computed correctly for spanned cells with header auto resize * Fixed issue #442: Scrollbars are not updated for active VCL Style under XE2 * Fixed issue #463: HTML export shows grid lines in IE and Chrome, but not in Firefox * Fixed issue #460: Access violation in design time when setting "CheckBox" to True for a Virtual Treeview Column * Fixed issue #72: Call Application.CancelHint only if the current control is showing the hint * Fixed issue #461: corrected condition in TBaseVirtualTree.ScrollIntoView, so that not only partially (by the fixed area) covered columns but also totally covered columns are scrolled in view * Fixed issue #450: Regional letters entered using Right+Alt should also trigger the incremental search. * Improvemtns for toAlwaysSelectNode: Clicking the free space below the tree nodes no longer deselects the selected node. We now prevent toggling of the selection of the last selected node if toAlwaysSelectNode is set in TreeOptions. * Fixed issue #447: SetChildCount() now calls DoMeasureItem() instead of using DefaultNodeHeight. * Fixed issue #444: ERangeError in TBaseVirtualTree.CMMouseWheel * TBaseVirtualTree.MeasureItemHeight() is virtual now. * Fixed issue #445 MultiSelect behavior: Can't drag node which is not selected * Fixed Issue #443: TVirtualTreeColumns.ColumnFromPosition on right border of fixed column * Fixed issue #339: Problems with fixed column * Implemented #410: Small extension of TStringEditLink: Allow creating own edit control by moving the creation of TVTEdit from constructor to virtual PrepareEdit with assigned check. * Implemented #409: Extend THitInfo record with hit coordinates * Added suggestions of #438: Make some members visible to derived classes * Fixed issue #440: Context menu does not pop up if there is no selected node * Added C++ Builder link demand to VirtualTreesR.Lib as {$HPPEMIT} * Improved installation instructions, especially for C++ Builder V5.4.1: (26 May 2014) * Added packages for C++ Builder XE6 * If toAutoChangeScale is set in AutoOptions, the Virtual TreeView control now increases the DefaultNodeHeight if the font size is too large to fit. * If toAutoChangeScale is set in AutoOptions, the columns widths are now adjusted too. * Improved implementation for toRestoreSelection option * Fixed possible AV in PaintNodeButton() * Now ensuring that both GetHorzScrollBarSliderRect() and GetVertScrollBarSliderRect() return a valid value for every code path (Thx to Dmitri Dmitrienko). This could cause strange out of resources exceptions with VCL styles enabled. * Fixed issue #434: Application compiled with Delphi 7 stops responding when you call AddChild * A few minor changes V5.4.0: (22 Apr 2014) * Added support for XE6. * Added new option toRestoreSelection to TVTSelectionOptions: Set to true if upon refill the previously elected nodes should be selected again. The nodes will be identified by its caption only. * Added new option toAlwaysSelectNode to TVTSelectionOption enum. If this flag is set, the treeview tries to lways have a node selected. This behavior is closer to the Windows TreeView and useful in Windows Explorer tyle applications. It is also useful for accessible applications which can indicate having the focus by isplaying a selection. * Added function TBaseVirtualTree.IsEmpty which returns True if the control has no nodes. * Fixed a wrongly drawn selection after the user scrolled horizontally. * Fixed issue #423: Change property TVirtualTreeColumn.Tag to NativeInt. * Implemented #415: Added feature for design time column header dragging and resizing. (Thx to fr0st.brutal) * Fixed issue #180: Memory leak in grid demo of Advanced project * Implemented #422: Added TBaseVirtualTree.GetFirstChildNoInit() * Fixed issue #420: Add coEditable to TVTColumnOption) by applying the supplied path. Thx to Stefan Glienke. * Fixed issue #419: Some issues with changing to edit mode with clicking * Fixed issue #430: TVTDragManager memory leak with visual inheritance. Thx to Andreas Hausladen for the patch. * Fixed issue #431: Visual bug when using TStringEditLink with large node heights * TVclStyleScrollBarsHook.WMMouseMove(): Now preventing possible range check error exception. * Now handling WM_MOVE and WM_POSCHNAGED correctly in TVclStyleScrollBarsHook (Thx to Dmitri Dmitrienko) * Preventing possible stack overflow in TVirtualTreeHintWindow.ActivateHint (Thx to Dmitri Dmitrienko) * Added packages for C++ Builder XE5. * Some minor changes, improvements and fixes have been incorporated V5.3.0: (04 Jan 2014) * Fix for issue #159 (Cursor missing in edit with non-standard DPI): Ensuring a minimum size of the edit control * Fixed issue #403: Declare TVTGetNodeProc as reference to procedure (for D2009+) * Fixed issue #402: TVTEdit.CNCommand discard all notification except EN_UPDATE due to missing inherited * Corrected fix for issue #376 (Incorrect selection paint when toGridExtensions is included in the MiscOptions) * Fixed issue #401: OnNodeClick event doesn't trigger in some case, coFixed set for a column * Modified #316 (concerning r498). The fix for #316 will only be applied in case toMultiSelect is set. If toMultiSelect is not set we can start a drag anywhere in the row. * ContentToHTML() and ContentToRTF() now return a string of type RawByteString. Because the generated strings are pre-encoded in UTF-8, the previous type AnsiString caused problems in Delphi 2009+ e.g. when this string was written using the VCL TStreamWriter class. The helper class TBufferedAnsiString therefore uses RywByteString now as type too. * Fixed issue #399: EditDelay not working * Fixed issue #400: AltGr+A does not behave as expected for foreign keyboard layouts in VTEdit * Fixed issue #388: VirtualStringTree with toFixedIndent causes range check error * Edit box when editing a node in a tree with toFixedIndent now has the correct indent * Fixed issue #392: Now ensuring that MeasureItemHeight() is only called from the main thread. * Fixed #383: Clear vsHasChildren for a node without children even if the children count didn't change. * Fixed #377: Wrong font (size, etc) in TargetCanvas in MeasureItem for first node * Fixed issue #398 (hoAutoResize causes DFM designer to be modified after loading) by calling TControl.Updating()/Updated() in AdjustAutoSize() * Preventing possible AV in TBaseVirtualTree.FontChanged() * Fixed 32Bit Integer overflows in Win64 build in TBufferedAnsiString. V5.2.2: (30 Oct 2013) - Added support for Delphi / RAD Studio XE5 - Fixed issue #371: property OnGesture is now published. - Fixed issue #365: No longer changing timer resolution globally - Fixed issue #347: No expand-pluses seen under Windopws classic theme for a vcl styled application - Fixed issue #373: Scrollbar does not size properly for more than 2000 nodes with variable node height: The OnMeasureItem event is triggered only in case the toVariableNode flags in included in MiscOptions - Fixed issue #376: Incorrect selection paint when toGridExtensions is included in the MiscOptions - Improved displaying of EmptyListMessage text, especially when scrolling horizontally. - Fixed issue #61: EditCursor missing with manifest + toThemeAware + vsMultiline - Fixed issue #352: Minor improvement in calculation of right margin of hint window. V5.2.1: (06 Sep 2013) - Fixed #352 and #354 by modifying the implementation of #237 so that a focused node is ensured only if the control is being entered using the TAB key. This is consistent with the behavior of the Windows Explorer. - Fixed issue #360 (In the calculation of the horizontal scroll bar static text should be considered) by calling DoGetNodeExtraWidth() in TBaseVirtualTree.GetMaxRightExtend() - Used fix proposed in issue #361 to fix issue #357 (AV in advanced demo - PropertiesDemo form in XE3+) - Removed call to TCustomStyleEngine.UnRegisterStyleHook() to fix issue #359/#355 - Fixed issue #358: Horizontal Scrollbar issue when expand ing and scrollbars get visible - Fixed issue #355/#345: exception regarding style services V5.2: (09 Aug 2013) - OnMouseEnter and OnMouseLeave events have been added (#238) - Improved dpi scaling for VirtualTreeView and Header - toAutoChangeScale and toAutoSort are now among the defualt values for TCustomVirtualTreeOptions.AutoOptions - Fixed issue #237: Auto focus the first node on enter if there is no focused node - Fixed issue #344: Cannot select row by Ctrl+Click on empty column - Fixed issue #206: Column painting issue with coWrapCaption in Options - Fixed issue #128: OleUninitialize in FinalizeGlobalStructures can hang when using Virtual Treeview in a DLL - Added new public property LastDragEffect which supplies the last executed drag effect. - Added virtual method GetNodeImageSize() which can be overridden if one needs different sized images. - Added new public property LastDragEffect which supplies the last executed drag effect. - Fixed issue #206: Column painting issue with coWrapCaption in Options - Fixed issue #336 by ignoring PARENTDOUBLEBUFFEREDCHANGED message. - Fixed issue #342 by adding a new implementation of the VCL's DoubleBuffered property. The inherited DoubleBuffered property of TWinControl must not be set to True! - A few minor improvements have been added. V5.1.3: (17 Apr 2013) - Fixed #340: GetHitTestInfoAt on right border of fixed column. - Fixed #337: Cannot "grab" item for dragging, odd behaviour of multi selecting with the selection rectangle when toFullRowSelect is True but toSimpleDrawSelection is False. (thx to Stefan Glienke) - Fixed #341: Error when unloading DLL due to missing UnRegisterStyleHook - Improved fix for #323: The fix applied in V5.1.2 was a breaking change for some projects, especially if not all the initialization was done in the OnInitNode event (reported as #338). vsInitialUserData has been renamed to vsOnFreeNodeCallRequired and is now set when GetNodeData is called. This fixes the possible memory leak reported in #323 and has better backward compatibility. - Fixed #316: These fixes are to make the treeview behave more like the windows explorer regarding selecting and dragging. Thanks to Stefan Glienke. - Fixed #333: Possible Integer overflow in 64Bit builds. - Compatibility with / packages for Delphi Xe$ / RAD Studio XE4 have been added. V5.1.2 (04 Apr 2013): - Added function TVirtualTreeColumns.GetFirstColumn that returns the first column in display order. - Fixed issue #322: CaptionAlignment is not being restored by Header.LoadFromStream(). - TBaseVirtualTree.GetNodeData() now calls InitNode() if the node had not beend initialized. This fixes issue #323 (Memory leak when the Node has children ) - Fixed issue #326: Application hangs when aborting OLE Copy/Paste Operation - Added new option poResizeToFitItem to TVTHeaderPopupOption: Adds an item which, if clicked, resizes all columns to fit by calling TVTHeader.AutoFitColumns() - Property RangeX is now public in the class TVirtualStringTree (#327) - TVirtualTreeColumns.HandleClick(): No longer triggering auto sort if just the checkbox in the header was clicked - TBaseVirtualTree.SetCheckType new resets PVirtualNode.CheckState only if the check state does not fit the new check type - Fixed issue #321: Delphi2009: undeclared identifier: 'fState' in VirtualTrees.pas:DrawDisabledImage() - Fixed issue #315: hoHeaderClickAutoSort was only working if toAutoSort is also set V5.1.1 (07 Feb 2013): - Fixed issue #313: Translucent selection rectangle completely broken when PaintBackground is used - Fixed issue #314: Only if toAutoSort is True non-expanded nodes will be excluded from sorting. This restores the behavior of V5.0.X. - Fixed issue #306: Drag image was broken except for CF_HDROP - Fixed issue #305: Broken hint drawing with classic windows theme and toUseExplorerTheme - Fixed issue #298: Bad canvas parameters in OnBeforeCellPaint method - If NodeDataSize has its default value -1, now sizeof(Pointer) is used at runtime as actual value. This makes it easier to store a simple Pointer with each node indepedent of the target platform (32/64Bit). - Fixed issue #300: Made the hint text more centered in the hint window - If TVirtualTreeColumn.CheckBox is set to True in Designer, then hoShowImages is now added to Header.Options - Fixed issue #302: AV when painting sorted header column containing checkbox - Now soring subnodes when they get expanded and the toAutoSort flag is set - Added fix for ugly drawn disabled images (thx to S. Glienke). See also: http://stackoverflow.com/questions/6003018/make-disabled-menu-and-toolbar-images-look-better http://qc.embarcadero.com/wc/qcmain.aspx?d=86879 - Fixed issue #299: Draw themed focus rectangle with toUseExplorerTheme - Fixed issue #198: Wrong check images - Removed file VTConfig.inc. The former $ifdef ReverseFullExpandHotKey is now a flag in the TVTMiscOption enumeration. The $ifdef TntSupport can be defined at the beginning of the unit VirtualTrees. - Added new optional parameter "Recursive" to TBaseVirtualTree.Sort() V5.1.0 (05 Nov 2012): - Fixed issue #291: Empty hint strings are shown when using custom hint window classes - Added support for VCl styles of RAD Studio XE2 and higher. (Thanks to Dietmar Rösler, issue #288) - Fixed issue #285: access violation when mouse down over checkbox sometimes - Fixed issue #293: OnAdvancedHeaderDraw is called with wrong PaintInfo.PaintRectangle - Improved creation of IDragSourceHelper and added support for IDragSourceHelper2 - Fixed problem with drawing selection rectangle after canceled rename - Improved creation of IDragSourceHelper and added support for IDragSourceHelper2 - Fixed issue regarding activating explorer theme - Fixed issue #222: FDottedBrush is never released in the tree is never shown - Fixed issue #52: Misalignement of CheckBox and TreeLine/Buttons - Fixed issue #43: VT stop repaint after Windows visual style change - Fixed issue #66: column auto-resize makes not aware of StaticText - Fixed issue #53: Misalignment Images Columns > 0 - Fixed issue #176: Multiline Aligment Problem - Fixed issue #283: VTV no longer allows to drop above or below when using Full row selection - Fixed issue #173: Two suggestions about class member visibilities - Fixed issue #192: Fixed column painting bug when OffsetX > 0 - Fixed Delphi 2007 Designer package V5.0.1 (06 Sep 2012): - Added Support for RAD Studio XE3 - Fixed definition of event OnAfterHeaderExport, it used the same member variable as OnBeforeHeaderExport. - Fixed problem with Delphi 2007 package - Delphi 2009 and 2010 packages are also implicit build packages now, like those for XE and XE2 (issue #279) - Fixed #251: Added supoort for C++ Builder XE2 - Fixed #274: Wrong stop condition in TBaseVirtualTree.GetLastVisible - Fixed runtime package of Delphi 7 - Fixed issue #273: Incremental search for international symbols not working in Delphi 2009-XE2 - A few minor bug fixes have been incorporated July 03, 2012 - Release of V5.0.0 final June 11-30, 2012 - Release of V5.0.0 RC2 - Removed dependecy on file Compilers.inc - Removed dependency on file MSAAIntf.pas - Removed folder Common - Fixed issue #252: Incorrect width of edit control rectangle when grid extensions are set - Fixed issue #259: Hit position wrong when Indent is not default - Fixed issue #253: Compatibility issues with XE2's VCL style checkboxes - Fixed issue #265: Lib suffix not set for all configurations in Delphi XE2 package - Bug fix: Functions GetLastVisible and GetLastVisibleNoInit return correct results even if some anchestor of the last visible node is not effectively visible - Improvement: Added functions GetNextSiblingNoInit and GetPreviousSiblingNoInit - "Res" folder of Advanced sample was not included in ZIP archive - Added folder "Contributions" to release June 01-10, 2012 - Release of V5.0.0 RC1 - Updated help file for V5.0 April 2012 - Added support for theming of hint window (thanks to Arno Garrels and Uwe Schuster) - TBaseVirtualTree.CheckParentCheckState: Fixed duplicate recursion to parent nodes March 2012 - Fixed painting of Windows7/Vista style Explorer selection in case tsUseExplorerTheme is in TreeOptions - Ctrl + A now selects all items January 2012 - Bug fix: Fixed a potential access violation in TBaseVirtualTree.FullCollapse in case of toChildrenAbove December 2011 - Fixed compiler warning in RAD Studio XE2 regarding deprecated ThemeServices September 2011 - The property EmptyListMessage may now contain linebreaks in Delphi 2009 and higher, the text in now printed in dark gray. - Support for flat scroll bars has been removed. - Global variables InWin2k and IsWinXP, enum member hsXPStyle, function DrawXPButton() and support for Windows 2000 has been removed. - Global variable IsWinNT and support for Windows 9x has been removed. - Improvement: Added support for Delphi XE2 and 64Bit compiler. - Support for Delphi 5/6 and C++ Builder 5/6 has been dropped. - Bug fix: Fixed a potential integer overflow in TBaseVirtualTree.ToggleNode in case of toChildrenAbove and NodeInView - Bug fix: Fixed a potential Assertion in TBaseVirtualTree.ToggleNode by checking GetFirstVisible before calling GetDisplayRect - Bug fix: TCustomVirtualTreeOptions.SetPaintOptions correctly changes the VisibleCount when toShowFilteredNodes is toggled - Improvement: Added new functions TBaseVirtualTree.DetermineDropMode - Improvement: Added usage of TBaseVirtualTree.DetermineDropMode in TBaseVirtualTree.DragOver - Improvement: Made EffectiveOffsetX accessible via read-only protected property for easier subclassing - Improvement: Moved TBaseVirtualTree.DetermineLineImageAndSelectLevel from private to protected for easier subclassing - Improvement: Sorted TBaseVirtualTree.SetEmptyListMessage August 2011 - Improvement: Minor code improvements April 2011 - Bug fix: Reverted change of November 2010 (Creating the WorkerThread will no longer change System.IsMultiThread) it caused sporadic AVs during app start which disappeared after revering the change. This code can lead to a wrong value of System.IsMultiThread which causes the memory manager to assume a single threaded application. - Bug fix: When advancing to the next item while in edit mode, we are now also calling CanEdit(). February 2011 - Bug fix: In case the LastStructureChangeNode is deleted before the StructureChange event is fired, the reference to the LastStructureChangeNode is cleared to avoid providing an invalid node January 2011 - Improvement: RTF export now uses landscape paper format and smaller margins, so that more of the contents fits on the page - Improvement: New Option hoHeaderClickAutoSort for TVTHeader.Options: Clicks on the header will make the clicked column the SortColumn or toggle sort direction if it already was the sort column - Improvement: Pressing the tab key in edit mode advances to the next node in edit node, just like the Windows 7 Explorer does it. - Bug fix: No longer auto-scrolling horizontally when the focused node changes if toFullRowSelect is turned on. - Bug fix: Fixed a clipping issue when drawing unbuffered December 2010 - Improvement: TBaseVirtualTree.HandleMouseUp now checks CanEdit just in case toEditOnClick - Bug fix: TotalNodeHeights are now correctly adjusted when toggling toShowHiddenNodes - Bug fix: Fixed BCB compiler error due to re-defining IDropTargetHelper - Improvement: New TVTInternalPaintOption poUnbuffered to directly paint onto a given canvas (especially useful when printing and/or scaling via world transformations) - Improvement: Refactored header painting to be more flexible (e.g. for printing) - Improvement: Made additional fields accessible via protected read-only properties for easier subclassing November 2010 - Improvement: All calls to SetWindowOrgEx now respect the canvas' transformation - Improvement: TBaseVirtualTree.GetNodeHeight will no longer measure the node height, if the node is about to be deleted - Improvement: Made TBaseVirtualTree.FRangeX and FRangeY accessible via read-only protected property - Improvement: Unified clipping handling - Improvement: Added new color setting "SelectionTextColor" - Improvement: Creating the WorkerThread will no longer change System.IsMultiThread - Bug fix: Fixed a potential integer overflow in TBaseVirtualTree.ToggleNode - Bug fix: TBaseVirtualTree.ToggleNode now measures the child node heights before summing them - Improvement: Made some private field of TVTHeader and TVirtualTreeColumns protected to make writing derived classes easier - Improvement: Enclosed call to DoDragDrop in TBaseVirtualTree.CMDrag in a try..finally block - Improvement: The default inplace editor now resizes itself even when the tree is in grid mode - Bug fix: TBaseVirtualTree.PrepareBitmaps now checks the existance of the main column correctly - Bug fix: TBaseVirtualTree.UpdateEditBounds now checks wether the focused node is assigned - Improvement: TBaseVirtualTree.FHintData is now available to derived classes via the protected property HintData October 2010 - Bug fix: Now taking horizontal scroll position into account when drawing text of EmptyListMessage property - Bug fix: Prevented potential "index out of bounds" exception in TVirtualTreeHintWindow.CalcHintRect - Bug fix - Issue #187: Showing a dialog in OnChange or OnRemoveSelection event handlers can cause the VT to enter mode for drawing selection rectangle. - Improvement: Made inherited event OnCanResize published for TVirtualStringTree for Delphi 2010 and later - Improvement: TBaseVirtualTree.ToggleNode now tries to keep the visual position of the toggled node, even when toChildrenAbove is set September 2010 - Improvement: Added additional check regarding the tree reference to TVirtualTreeHintWindow.AnimationCallback - Improvement: Made TBaseVirtualTree.AdjustImageBorder protected and virtual - Improvement: TVirtualTreeColumns now observes if the focused column is removed - Improvement: Made compatible with Delphi XE (Thanks to Roman Kassebaum) August 2010 - Improvement: TCustomVirtualStringTree.DoTextMeasuring now returns TSize - Improvement: Renamed TVTMeasureTextWidthEvent to TVTMeasureTextEvent and introduced new event TCustomVirtualStringTree.OnMeasureTextHeight - Improvement: Made TBaseVirtualTree.GetMaxColumnWidth virtual - Bug fix: TBaseVirtualTree.OnRemoveFromSelection is now triggered by TBaseVirtualTree.RemoveFromSelection as intended July 2010 - Bug fix: Toggling toShowFilteredNodes will now update the node counts in the tree even if its handle has not been allocated so far - Bug fix: TBaseVirtualTree.FindNodeInSelection should now work correctly with nodes above the 2gb boundary - Bug fix: Nodes that are about to be deleted are now removed from TBaseVirtualTree.FDragSelection - Bug fix: Changed TBaseVirtualTree.WMKeyDown to correctly handle special keys in Unicode based Delphi versions - Bug fix: Changed declaration of TBaseVirtualTree.EmptyListMessage to UnicodeString - Improvement: Added new property TBaseVirtualTree.EmptyListMessage. If this property is not empty, the assigned text will be displayed if there are no nodes to display, similar to the Windows XP file search. - Improvement: Added tstChecked to TVSTTextSourceType enumeration and support for the new flag to GetRenderStartValues(). So you can export only checked nodes. June 2010 - Bug fix: range select with no nodes will no longer result in an access violation - Bug fix: TBaseVirtualTree.SetVisible now correctly decrements the visible node count - Bug fix: TStringEditLink.BeginEdit now calls AutoAdjustSize to ensure a consistent size of the edit field - Improvement: TVTHeader.AutoFitColumns is now declared virtual - Bug fix: header captions were badly positioned text if Extra Large fonts have been activated in the Windows display options May 2010 - Improvement: TBaseVirtualTree.PaintTree is now declared virtual - Bug fix: corrected calculations regarding tree height and visible count when using filtered nodes April 2010 - Bug fix: Changed TBaseVirtualTree.SetChildCount and TBaseVirtualTree.InitNode to correctly handle filtered nodes - Bug fix: Ctrl+Click on a node often cause a delayed update of the displayed selection due to a missing (or misplaced) call to Invalidate() in HandleClickSelection(). - Bug fix: Shift+PgUp and Shift+PgDown now behave like a usual List(View) and select the node of the previous/ next page. The behaviourly that was formerly assigned to these shortcuts is now triggeres when using Shift+Alt+PgUp / Shift+Alt+PgDown March 2010 - Bug fix: TBaseVirtualTree.CMMouseLeave now checks if the header is assigned before working with it - Bug fix: TCustomVirtualTreeOptions.SetPaintOptions will now invalidate the node cache if toChildrenAbove is changed - Bug fix: TBaseVirtualTree.HandleMouseUp will no longer cause an AV if HitInfo.HitNode is not assigned and tsToggleFocusedSelection is set - Improvement: new properties TBaseVirtualTree.OnAddToSelection and TBaseVirtualTree.OnRemoveFromSelection - Bug fix: fixed a whole bunch of painting issues regarding drag & drop - Bug fix: fixed TBaseVirtualTree.DragFinished to generate a button up event in case of using OLE drag & drop - Bug fix: TBaseVirtualTree.DeleteChildren no longer fails if the given node is nil January 2010 - Bug fix: Removed defaults from TVirtualTreeColumn.BiDiMode and TVirtualTreeColumn.Color - Bug fix: Clearing the columns while editing no longer raises an exception - Improvement: refactored handling of long running operations - Bug fix: TBaseVirtualTree.OnGetHelpContext now delivers the currently focused column instead of always 0 - Improvement: the sort operation can now be canceled - Improvement: all BeginOperation/EndOperation pairs are now enclosed in try..finally blocks - Bug fix: the combination of toUseExplorerTheme and toFullRowSelect now also works correct when no columns are defined December 2009 - Bug fix: TVTHeader.HandleMessage now correctly handles double click autosizing when the index differs from its position November 2009 - Bug fix: TBaseVirtualTree.AdjustTotalHeight didn't change the height of invisible nodes which caused some trouble when making those nodes visible again - Improvement: a column is no longer painted 'down' if its check box was clicked - Bug fix: one can no longer toggle the check state of a column with the right mouse button - Bug fix: one can no longer toggle the check state of a node with the right mouse button - Bug fix: TCustomVirtualTreeOptions.SetPaintOptions no longer accidentally removed the the explorer theme - Bug fix: Fixed a potential Integer overflow in TBaseVirtualTree.CalculateVerticalAlignments October 2009 - Bug fix: enabling checkbox support for a column is now possible without assigning a dummy imagelist - Bug fix: checkboxes in the header are now correctly aligned - Improvement: changed TBaseVirtualTree.PaintCheckImage to be usable by TVirtualTreeColumns.PaintHeader to be able to paint themed header checkboxes - Bug fix: TBaseVirtualTree.GetCheckImage now correctly handles cases when Node is nil and ImgCheckType is either ctTriStateCheckBox or ctNone - Bug fix: TBaseVirtualTree.HasImage now implicitly initializes the given node if needed to avoid requesting the imageindex for nodes that are not initialized - Bug fix: fixed possible AV when setting toExplorerTheme with no columns defined - Improvement: new events TBaseVirtualTree.OnSaveTree and TBaseVirtualTree.OnLoadTree September 2009 - Bug fix: TBaseVirtualTree.OnColumnClick will no longer be triggered twice - Improvement: new TVirtualNodeInitState ivsReInit to indicate that a node is about to be re-initialized - Bug fix: TCustomVirtualStringTree.DoTextMeasuring now makes use of the parameter Width of the OnMeasureTextWidth event - Bug fix: TBaseVirtualTree.DetermineLineImageAndSelectLevel will no longer access LineImage[-1] - Bug fix: clearing the columns now correctly reset TBaseVirtualTree.FFocusedColumn - Improvement: explorer style painting is now more close to the real explorer - Bug fix: TCustomVirtualStringTree.TContentToHTML.WriteStyle will no longer produce invalid CSS - Bug fix: the parameter DragEffect of TBaseVirtualTree.DragAndDrop is now var as it should be August 2009 - Bug fix: TBaseVirtualTree.MoveTo now initializes the target node using the target tree - Bug fix: TBaseVirtualTree.FVisibleCount is now calculated correctly when using filtered nodes - Improvement: introduced new initial node state ivsFiltered July 2009 - Improvement: modified TVTHeader.HandleHeaderMouseMove to make resizing the autosize column with the mouse possible - Improvement: modified TBaseVirtualTree.DoCreateEditor so that applications can now return NIL in OnCreateEditor to use the standard editor of the tree - Bug fix: pressing CTRL + PgUp/PgDown no longer leads to an index-out-of-bounds exception if no columns are used - Bug fix: avoided race condition between TBaseVirtualTree.DeleteNode and the worker thread - Bug fix: TBaseVirtualTree.ToggleNode could produce an overflow if range checking was enabled - Bug fix: TWorkerThread will no longer reference the tree after it has been destroyed (Mantis issue #384) - Improvement: removed support for Delphi versions older than Delphi 7 - Improvement: removed local memory manager June 2009 - Bug fix: TBaseVirtualTree.InternalConnectNode checked the expanded state of the wrong node if Mode was amAddChildFirst or amAddChildLast - Improvement: 'hidden nodes' are now called 'filtered nodes' - Improvement: converted line endings back to CR/LF - Improvement: new events TBaseVirtualTree.OnCanSplitterResizeNode and TBaseVirtualTree.OnCanSplitterResizeHeader - Improvement: made TVirtualTreeColumns.DoCanSplitterResize virtual - Improvement: made some methods of TVirtualTreeHintWindow protected to make subclassing easier - Bug fix: fixed some issues concerning the vista theme handling - Improvement: unified source code indentation May 2009 - Improvement: new TVTMiscOption toEditOnClick, toEditOnDblClick to control if editing can be started with a single click or a double click - Bug fix: the internal pointers of TBufferedAnsiString are now PAnsiChar to work correctly with Delphi 2009 April 2009 - Bug fix: TBaseVirtualTree.GetVisibleParent no longer returns the given node in case it is fully visible - Improvement: fixed a potential issue in TVirtualTreeColumns.TotalWidth in case it is called before FPositionToIndex is initialized - Bug fix: TBaseVirtualTree.CollectSelectedNodesLTR and TBaseVirtualTree.CollectSelectedNodesRTL handle straight vertical selection rectangles no longer as empty - Bug fix: TCheckImageKind.ckSystemDefault now works as intended - Improvement: made the following methods of TBaseVirtualTree virtual: PrepareCell, AddChild, BeginUpdate, EndUpdate and SortTree - Improvement: made TBaseVirtualTree.PrepareCell protected - Improvement: moved some members of TVTEdit and TStringEditLink from private to protected - Improvement: re-designed header click handling - Improvement: new TVTPaintOption toShowHiddenNodes to globally ignore the hidden state of nodes - Improvement: individual nodes can now be hidden without affecting their children - Improvement: re-designed Explorer theme drawing - Bug fix: corrected allocation problems in TBufferedAnsiString and TWideBufferedString March 2009 - Bug fix: fixed an issue in TVirtualTreeColumns.HandleClick that could lead to a case where no header click event is triggered - Bug fix: fixed an issue in TBaseVirtualTree.HandleHotTrack that could lead to an endless loop under certain conditions - Improvement: removed unused variables in TVirtualTreeColumn.ComputeHeaderLayout - Bug fix: corrected TBaseVirtualTree.GetVisibleParent - Improvement: extended hot node tracking to track the hot column too - Improvement: new THitPosition hiOnItemButtonExact used to draw hot buttons when using Windows Vista's Explorer theme - Improvement: new TVTPaintOption toHideTreeLinesIfThemed to consider toShowTreeLines only if running unthemed - Improvement: new TVTPaintOption toUseExplorerTheme to draw the tree like Windows Vista's Explorer treeview February 2009 - Bug fix: reverted the implementation of DrawTextW back to the one prior to 4.8.1 as the line end detection lead to a compiler warning under Delphi 2009 - Bug fix: corrected implementation of GetStringDrawRect to match its declaration (UnicodeString vs WideString) - Bug fix: the node focus will no longer change if a TVTMiscOption.toGridExtensions is set and one clicks right of (or left of, if right-to-left reading) the last column - Bug fix: fixed an issue with TVTHeader.Assign that could lead to an access violation if the header is created at runtime - Bug fix: one can no longer change a node's height with the right mouse button even if toNodeHeightResize and toRightClickSelect are set - Improvement: TVTAutoOption.toDisableAutoScrollOnFocus now works for nodes too - Improvement: new property TBaseVirtualTree.SelectionLocked to disable changing the selection - Improvement: made the dual-scroll effect in TBaseVirtualTree.ToggleNode much smoother - Bug fix: removed off-by-1 errors in TBaseVirtualTree.ToggleNode - Bug fix: added a check for FUpdateCount to TBaseVirtualTree.SetUpdateState as otherwise every call to TBaseVirtualTree.DoBeforeCellPaint to get the cell content margin within an Begin/EndUpdate-block would re-enable painting - Bug fix: TVTHeader.HandleMessage could provide a wrong column index to OnBeforeColumnWidthTracking in some cases - Improvement: new properties TBaseVirtualTree.OnBeforeAutoFitColumn, TBaseVirtualTree.OnAfterAutoFitColumn - Improvement: new procedures TBaseVirtualTree.CancelOperation, TBaseVirtualTree.BeginOperation, TBaseVirtualTree.EndOperation and new property TBaseVirtualTree.OperationCanceled to enable the application to stop (possibly) long-running operations - Improvement: integrated changes from Andreas Hausladen - Improvement: integrated changes from Dmitry Zegebart where applicable - Bug fix: removed off-by-1 error in TBaseVirtualTree.GetDisplayRect - Bug fix: changed the size of the buffer used in TBaseVirtualTree.PaintTree to paint the area below the last node as the bitmap was not completely erased using previous size under certain conditions - Bug fix: fixed TBaseVirtualTree.GetPreviousLevel January 2009 - Bug fix: removed off-by-1 error in TBaseVirtualTree.GetBottomNode - Improvement: improved speed of TBaseVirtualTree.GetMaxColumnWidth when using UseSmartColumnWidth - Version is now 4.8.0 December 2008 - Bug fix: modified TBaseVirtualTree.UpdateHorizontalScrollbar and TBaseVirtualTree.UpdateVerticalScrollbar to recalculate the tree's dimensions even if an update is in progress - Improvement: renamed TVTHeaderState hsTracking and hsTrackPending to hsColumnWidthTracking and hsColumnWidthTrackPending - Improvement: modified TBaseVirtualTree.GetFirstVisible and TBaseVirtualTree.GetFirstVisibleNoInit to optionally take a node to specify where to start - Improvement: modified TVTAfterGetMaxColumnWidthEvent to make the result of TBaseVirtualTree.GetMaxColumnWidth changable - Bug fix: corrected TBaseVirtualTree.GetMaxColumnWidth to consider toFixedIndent and no longer take nodes into account that are just above or below the visible area - Improvement: new property TVirtualTreeColumns.DefaultWidth - Improvement: new property TVTHeader.FixedAreaConstraints (new class TVTFixedAreaConstraints) to limit the fixed area (header, fixed columns) to a percentage of the client area November 2008 - Improvement: new cursor added: crVertSplit used for height tracking - Improvement: changed type of TVTHeader.Height from Cardinal to Integer to make boundary checks easier - Improvement: new properties TVTHeader.MinHeight and TVTHeader.MaxHeight - Improvement: new VirtualTreeStates tsNodeHeightTracking and tsNodeHeightTrackPending - Improvement: new HeaderStates hsHeightTracking and hsHeightTrackPending - Improvement: new TVTMiscOption toNodeHeightResize to allow changing node heights via mouse - Improvement: new TVTHeaderOption hoHeightResize to allow changing header height via mouse - Improvement: new properties TBaseVirtualTree.OnHeaderHeightTracking, TBaseVirtualTree.OnHeaderDblClickResize, TBaseVirtualTree.OnColumnWidthTracking, TBaseVirtualTree.OnColumnWidthDblClickResize, TBaseVirtualTree.OnNodeHeightTracking, TBaseVirtualTree.OnNodeHeightDblClickResize - Improvement: new function TVTHeader.ResizeColumns to resize multiple columns at once - Improvement: TVTHeader.DetermineSplitterIndex is no longer influenced by non-resizable columns - Bug fix: TBaseVirtualTree.ToggleNode now uses DoStateChange to modify FStates - Bug fix: TBaseVirtualTree.DoBeforeCellPaint now saves the update rect if CellPaintMode is cpmGetContentMargin and restores it afterwards - Improvement: modified TBaseVirtualTree.CmMouseWheel to handle mice with wheel delta < 120 correctly - Improvement: modified TVTHeader.LoadFromStream and WriteToStream to save ParentFont - Improvement: TVTHeader.Font is now only stored by Delphi if ParentFont is False (Mantis issue #217) - Bug fix: corrected TVTHeader.Create to set TVTHeader.FOptions correctly to the default value (Mantis issue #333) - Improvement: new TVTAnimationOption toAdvancedAnimatedToggle to scroll the node to be toggled animatedly instead of just scroll its child nodes animatedly - Improvement: added VirtualTreeState tsToggling to eliminate artefacts caused by TBaseVirtualTree.DoSetOffsetXY while toggling - Bug fix: corrected button handling when toFixedIndent is set - Improvement: redesigned TBaseVirtualTree.ToggleNode to harmonize the visual toggle behaviour independent of toChildrenAbove - Improvement: made TBaseVirtualTree.CanEdit public - Improvement: added parameter ConsiderChildrenAbove to TGetNextNodeProc - Improvement: modified all variants of TBaseVirtualTree.GetFirst and TBaseVirtualTree.GetLast to optionally consider toChildrenAbove October 2008 - Bug fix: removed 'FVisibleCount := 0' from TBaseVirtualTree.Clear as this would lead to incorrect VisibleCount in read-only mode - Bug fix: fixed a condition in TBaseVirtualTree.ToggleCallback that could lead to artefacts - Improvement: changed the implementation of TBaseVirtualTree.GetNext/GetPrevious so that no penalties occur if toChildrenAbove is not set - Improvement: TBaseVirtualTree.ToggleNode will no longer leave nodes with state vsToggeling if an exception occurs - Improvement: improved behaviour of TBaseVirtualTree.ToggleNode in case toChildrenAbove is set - Bug fix: corrected TBaseVirtualTree.ScrollIntoView to behave as expected when no fixed columns exist - Bug fix: extended TBaseVirtualTree.InitializeLineImageAndSelectLevel to eliminate artifacts while scrolling with toChildrenAbove set - Bug fix: corrected CompareNodePositions to consider toChildrenAbove - Bug fix: corrected ToggleNode to scroll correctly if toChildrenAbove and toAnimatedToggle are set - Improvement: new TVTPaintOption toFixedIndent to draw the tree with a fixed ident (instead of node level dependent indents) - Improvement: new TVTPaintOption toChildrenAbove to draw children nodes above their parent August 2008 - Improvement: redesigned and overloaded TBaseVirtualTree.ScrollIntoView in order to use vertical scrolling separately - Improvement: optimized TBaseVirtualTree.ScrollIntoView for horizontal scrolling - Improvement: in TBaseVirtualTree.WMKeyDown column navigation for VK_PRIOR and VK_NEXT is now handled in same way as row navigation - Improvement: new TVTHeaderOption hoDisableAnimatedResize to disable animated resize for all columns - Improvement: new TVTColumnOption coDisableAnimatedResize to disable animated resize for a specific column - Improvement: in TBaseVirtualTree.UpdateHorizontalScrollBar and TBaseVirtualTree.UpdateVerticalScrollBar scrollbar updates now avoided for tsUpdating in FStates July 2008 - Improvement: in TBaseVirtualTree.WMHScroll the horizontal page scrolling now considers fixed columns - Improvement: in TBaseVirtualTree.ScrollIntoView the case of FFocusedColumn being invalid is considered - Improvement: in TBaseVirtualTree.HandleMouseDown DoFocusNode is not called if node focus did not change - Improvement: in TBaseVirtualTree.SetFocusedColumn the focused node will only be invalidate if it was actually scrolled into view - Improvement: new TVTColumnOption coAllowFocus to affect column focus behaviour - Improvement: new function TVTHeader.AllowFocus to check wether a column can be focused - Improvement: in TBaseVirtualTree.SetFocusedColumn the old colunm and the new column are both invalidated - Improvement: merged latest changes from Jim into current code base. June 2008 - Improvement: new property TVirtualTreeColumns.Count - Bug fix: in TVirtualTreeColumns.AnimatedResize the column is validated (to avoid "List index out of bounds") - Improvement: the content retangle of the cell can be modified via the OnBeforeCellPaint event, the cell paint mode indicates wether OnBeforeCellPaint is called for painting the cell or just for getting the cell content margin - Improvement: new functions added: TBaseVirtualTree.DoGetCellContentMargins, TCustomVirtualDrawTree.DoGetCellContentMargin - Improvement: new property: TCustomVirtualDrawTree.OnGetCellContentMargin - Improvement: in TBaseVirtualTree.GetMaxColumnWidth the cell content margin is considered - Improvement: in TBaseVirtualTree.CMHintShow the cell content margin is considered for singleline tooltips - Improvement: new function added: TVTHeader.DoGetPopupMenu (to query the application via TreeView.FOnGetPopupMenu for a column specific header popup menu) - Improvement: new property added: TBaseVirtualTree.OnCanSplitterResizeColumn, new function added: TVirtualTreeColumns.GetScrollWidth - Improvement: horizontal page scrolling now uses the average column width (of all visible, non-fixed columns) as scroll amount - Improvement: procedure TBaseVirtualTree.CMMouseWheel redesigned - Bug fix: TVTHeader.DetermineSplitterIndex works correctly even when using fixed columns - Bug fix: on right-to-left BiDiMode TVirtualTreeColumns.PaintHeader respects (left) scroll bar correctly - Bug fix: for multiline tooltips also the column width is checked to determine the tooltip is needed or unnecessary - Improvement: the result value of GetUseSmartColumnWidth is initialized correctly - Improvement: added hoFullRepaintOnResize to TVTHeaderOption to enable full header repainting (instead of repainting all subsequent columns only) on resizing a column - Bug fix: horizontal page scrolling via mouse wheel now works correctly, i.e. in TBaseVirtualTree.CMMouseWheel ScrollCount includes GetVisibleFixedWidth and FIndent - Improvement: new TVTColumnOption coSmartResize to avoid contradicting the virtual paradigm - Improvement: horizontal scrolling via mouse wheel can be forced by holding the shift key - Improvement: new parameter for function TBaseVirtualTree.GetMaxColumnWidth added: UseSmartColumnWidth (to avoid contradicting the virtual paradigm, i.e. leave nodes out of consideration which are not in view) - Improvement: new parameters for TVTHeader.AutoFitColumns added: SmartAutoFitType, RangeStartCol and RangeEndCol - Improvement: new parameters for events FOnAfterAutoFitColumns, FOnBeforeAutoFitColumns, FOnAfterGetMaxColumnWidth and FOnBeforeGetMaxColumnWidth added - Version is now 4.6.0 May 2008 - Improvement: new properties: FOnAfterAutoFitColumns, FOnBeforeAutoFitColumns, FOnAfterGetMaxColumnWidth and FOnBeforeGetMaxColumnWidth - Bug fix: FDropTargetNode is considered in TBaseVirtualTree.DoFreeNode August 2007 - for accessibility, added an OnGetImageText event that can be used to give accessible text to images used in nodes. - Implemented an ImageText property used by the VTAccessibility unit to retrieve text for a given node and its column. - Switched loading of accessibility libraries to dynamic from static to avoid problems in Win95 June 2007 - Bug fix: Fixed a problem with potentially large amount of nodes (larger than 2 billion) in TBaseVirtualTree.SetChildCount. - Bug fix: remove hint if any in case the tree loses the focus. - Improvement: TVirtualTreeColumns.HandleClick is now virtual, introduced TVTHeader.DoSetSortColumn. - Bug fix: compiler error due to old variable reference when enabling flat scrollbars. May 2007 - Improvement: new functions: GetPreviousSelected, GetPreviousChecked, GetCheckedCount, GetPreviousCutCopy, GetCutCopyCount, GetFirstLeaf, GetNextLeaf, GetPreviousLeaf, GetFirstLevel, GetNextLevel, GetPreviousLevel - Improvement: new properties: CheckedCount, CutCopyCount - Improvement: DoFocusChanging for finding a valid column (TBaseVirtualTree.WMKeyDown) March 2007 - Improvement: adjusted accessibility implementation to compile with pre-BDS IDEs. - If a column is not visible, MultiColumnAccessibility now will not include it. January 2007 - Improvement: added code donation from Marco Zehe (with help from Sebastian Modersohn) which implements the MS accessibility interface for Virtual Treeview. December 2006 - Improvement: bidi mode implementation finished (toAutoBidiColumnOrdering introduced) - Change: right-to-left flag removed from shorten string methods/events (not necessary) - Version is now 4.5.0 November 2006 - Bug fix: Total height is wrong on reading from stream September 2006 - Bug fix: Mantis issue #326 July 2006 - Change: value for crHeaderSplit cursor conflicts with other resource IDs, so I changed it. - Published OnStartDrag in VirtualDrawTree. April 2006 - Bug fix: check for MMX availabiltiy is missing in some places before calling MMX code - Bug fix: flag for VCL dragging was removed too late causing all kind of problems with mouse up code in VCL drag mode. - Bug fix: If the past mode in ProcessOLEData is amInsertAfter then nodes where inserted in the wrong order. March 2006 - Bug fix: total count and total height is wrong after loading from stream - Bug fix: variable node height computation - Bug fix: FLastChangedNode was not reset in DoFreeNode February 2006 - Improvement: GetFirstChecked now also has a default value for its state parameter. - Improvement: avoid potential reentrancy problems in paint code by checking for the paint state there. January 2006 - Bug fix: disabled images are now drawn like enabled ones (with respect to position, indices etc.). - Improvement: New property BottomSpace, allows to specify an additional area below the last node in the tree. - Bug fix: VT.EndUpdate did not invalidate the cache so the cache was never used again after that. - Improvement: tree states for double clicks (left, middle, right). December 2005 - Bug fix: check for column index for auto setting main column if the current one is deleted. For full document history see help file.