Virtual Treeview history

This page contains the change log for the development of Virtual Treeview since the beginning.

With the release 5.4.0 my part on Virtual Treeview's development is over.
It's now maintained by JAM Software.



Virtual Treeview in Borland's BDS IDE

Version 5.3.0 (January 2014)

  • Added support for Delphi / RAD Studio XE5.
  • 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.

Version 5.2.2 (October 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 Windows classic theme for a VCL styled application.
  • Fixed issue #373: Scrollbar does not size properly for more than 2000 nodes with variable node height: t.he 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. 

Version 5.2.1 (September 2013)

  • Fixed issue #352 and issue #354 by modifying the implementation of issue #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 issues #359/#355
  • Fixed issue #358: Horizontal Scrollbar issue when expand ing and scrollbars get visible
  • Fixed issues #355/#345: exception regarding style services

Version 5.2.0 (August 2013)

  • OnMouseEnter and OnMouseLeave events have been added (Issue #238)
  • Improved dpi scaling for VirtualTreeView and Header
  • toAutoChangeScale and toAutoSort are now among the default 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.

Version 5.1.3 (April 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.

Version 5.1.2 (April 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

Version 5.1.1 (February 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()

Version 5.1.0 (November 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

Version 5.0.1 (September 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

Version 5.0.0 (February 2009 - July 2012)

In this period VIrtual Treeview did undergo some big changes. The project was moved to Google Code and the one man show became a team show with a varying list of members. These people worked a lot on the control leading to this major milestone of 5.0, released on July 3, 2012.

  • 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
  • Updated help file for V5.0
  • Added support for theming of hint window (thanks to Arno Garrels and Uwe Schuster)
  • TBaseVirtualTree.CheckParentCheckState: Fixed duplicate recursion to parent nodes
  • Fixed painting of Windows7/Vista style Explorer selection in case tsUseExplorerTheme is in TreeOptions
  • Ctrl + A now selects all items
  • Bug fix: Fixed a potential access violation in TBaseVirtualTree.FullCollapse in case of toChildrenAbove
  • Fixed compiler warning in RAD Studio XE2 regarding deprecated ThemeServices
  • 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
  • Improvement: Minor code improvements
  • 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().
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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)
  • 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
  • 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.
  • 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
  • Improvement: TBaseVirtualTree.PaintTree is now declared virtual
  • Bug fix: corrected calculations regarding tree height and visible count when using filtered nodes
  • 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
  • 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
  • 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
  • Bug fix: TVTHeader.HandleMessage now correctly handles double click autosizing when the index differs from its position
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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

Version 4.8.0 (July 2008 - January 2009)

  • Bug fix: removed off-by-1 error in TBaseVirtualTree.GetBottomNode
  • Improvement: improved speed of TBaseVirtualTree.GetMaxColumnWidth when using UseSmartColumnWidth
  • 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
  • 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
  • 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
  • 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
  • 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.

 

Version 4.6.0 (January 2007 - 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
  • Improvement: new properties: FOnAfterAutoFitColumns, FOnBeforeAutoFitColumns, FOnAfterGetMaxColumnWidth and FOnBeforeGetMaxColumnWidth
  • Bug fix: FDropTargetNode is considered in TBaseVirtualTree.DoFreeNode
  • 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
  • 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.
  • 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)
  • Improvement: adjusted accessibility implementation to compile with pre-BDS IDEs.
  • If a column is not visible, MultiColumnAccessibility now will not include it.
  • Improvement: added code donation from Marco Zehe (with help from Sebastian Modersohn) which implements the MS accessibility interface for Virtual Treeview.

Version 4.5.0 (December 2005 - December 2006)

  • Improvement: bidi mode implementation finished (toAutoBidiColumnOrdering introduced)
  • Change: right-to-left flag removed from shorten string methods/events (not necessary)
  • Bug fix: Total height is wrong on reading from stream
  • Bug fix: Mantis issue #326
  • Change: value for crHeaderSplit cursor conflicts with other resource IDs, so I changed it.
  • Published OnStartDrag in VirtualDrawTree.
  • 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.
  • 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
  • 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.
  • 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).
  • Bug fix: check for column index for auto setting main column if the current one is deleted.

Version 4.3.0 - 4.4.2 (December 2004 - November 2005)

  • Improvement: fixed column implementation completed (code donation by Igor Savkic)
  • Improvement: ShowScrollbar calls with conditional defines extracted into a new method. Added event that can be hooked by the application to get notified if a scrollbar is about to show or hide. Introduced OnShowScrollbar event.
  • Improvement: OnGetImageEx event to allow specifying a custom imagelist.
  • Improvement: GetFirstChecked, GetNextChecked, ClearChecked helper methods (code donation by Azza).
  • Bug fix: Reselection of a node in multi selection node did not refresh its visual selection appearance.
  • Bug fix: root node total count not updated during load of streamed nodes.
  • Bug fix: When loading a node from stream the initial total height is always set to the current default height of the tree, not the height of the node that is being loaded.
  • Bug fix: Mantis #260, TBaseVirtualTree.ReadChunk has applied total height of loaded nodes multiple times.
  • Change: Moved DoCancelEdit and DoEndEdit to the protected section. Don't know it ever could end up in the public section. Use CancelEditNode and EndEditNode instead.
  • Improvement: Hint window class dynamically assignable. TBaseVirtualTree.GetHintWindowClass
  • Change: A few GetPrevious* methods were still testing for an initialized parameter.
  • Change: OnMouseWheel published.
  • Improvement: Painting of normal, selected, state and overlay image is now done using standard image list access. This allows to use specialized image lists (e.g. with full alpha channel support).

Version 4.0.16 - 4.3.0 (December 2003 - December 2004)

  • Improvement: Delphi 2005 compatibility.
  • Bug fix: InternalData may return nil, so its result must be checked before accessing it.
  • Bug fix: WM_CURSOR in TVTHeader.HandleMessage used the screen standard cursors as default instead that of the tree.
  • Change: If the hot tracking cursor is crDefault when hot tracking is enabled then that of the tree is used instead.
  • Bug fix: TVirtualTreeColumn.SetIndex removed as it caused reindexing of the position array (which is wrong).
  • Bug fix: check for existing window handle before posting a message for the node editor.
  • Change: published events OnAdvancedHeaderDraw and OnHeaderDrawQueryElements in TVirtualDrawTree.
  • Improvement: tree state tsCheckPropagation is now only reset after a tristate check operation has finished (before the final OnChecked event). Therefore the tree state will include tsCheckPropagation while child nodes are checked or unchecked.
  • Change: ExecuteAction fixed (incorrect conditional definitions)
  • Change: DoBeforeItemErase was in the wrong place.
  • Bug fix in InternalDisconnectNode: When an invisble node is removed from its parent the height of this parent node no longer is changed.
  • Bug fix: Char handling for incremental search killed the dead char due to a problem with ToASCII.
  • Improvement: Removed ParentBackground property (also for D7), it is useless because of the own background handling of VT
  • Improvement: (better multimonitor support) Checks for true screen location for the hint.
  • Bug fix: TVirtualTreeColumn.SetOptions + : Check for a valid window handle of the tree before doing invalidation.
  • Improvement: In VT.WMKeyDown additional checks for page up/down, to scroll not more than what fits in one page under all conditions.
  • Bug fix: In VT.HandleMouseDown check for assigned hit node before doing selection with alt key.
  • Bug fix: VST.DoNewText, inserted call to UpdateHorizontalScrollbar to account for edited nodes, which now have a significant other length.
  • Change: Moved some methods to higher visibility.
  • Improvement: non-tiled background images (code donation by Richard Pringle).
  • Improvement: Configuration compiler switches are now located in an additional file (VTConfig.inc).
  • Improvement: Reset of all global objects to nil on finalization. Explicit initialization of Initialized and NeedToUnitialize because of trouble when VT is used in dynamically loaded packages.
  • Bug fix: Dragging did not work with full row selection and toFullRowDrag switched on while drag mode is dmManual.
  • Improvement: Mouse button flags are now passed through OnDragOver and OnDragDrop.
  • Bug fix: The internal node edit now uses clWindowText instead of clBlack as text color to work properly on high contrast color schemes.
  • Improvement: Introduction of toDisableAutoscrollOnEdit. It prevents a node with a large caption to scroll horizontally when is edited.
  • Change: Added test for HandleAllocated to TVirtualTreeHintWindow.AnimationCallback.
  • Improvement: Update edit bounds when a node's height is changed and editing is active.
  • Change: Partly took back the change for overlay images. VT still must support overlay indices the old way (e.g. for system image lists). Overlay indices >= 15 now use the new mechanism and are drawn without the need to set TCustomImagelist.Overlay.
  • Bug fix: Insertion order of nodes was wrong in MoveTo for amAddChildLast.
  • Change: removed change lock from worker thread. It isn't used any longer.
  • Bug fixes: Mantis bug entries #158, 162-172, 174-191, 192-196, 199, 202, 204, 205, 208, 212, 215, 216, 218, 220, 221, 228.
  • Other small improvements.

Version 3.8.3 - 4.0.15 (May - November 2003)

  • Bug fix: Initial draw selection with the mouse at the end of large trees (1+ million nodes) started with a huge delay.
  • Improvement: Better synchronization of tree windows and the worker thread.
  • Change: WM_RELEASEEDITLINK removed. It is sometimes problematic to release the link asynchroniously. Another mechanism is used instead.
  • Improvement: check images are now public, to allow to use them for own drawing code.
  • Bug fix: using Tree.CheckState[Node] in OnInitNode caused an infinite recursion.
  • Improvement: toFullRowDrag introduced
  • Improvement: tsCheckPropagation introduced
  • Improvement: node selection change with the mouse and modifier keys is now more consistent to Windows standard controls.
  • Improvement: new event OnGetCellIsEmpty
  • Improvement: TVTColors.HeaderHotColor introduced, default value is clBtnShadow as it was hard wired before.
  • Improvement: Auto spring feature. Size changes of the header are evenly spread over all columns, which are enabled for this feature. New options introduced: coAutoSpring, hoAutoSpring.
  • Change: Header stream version increased to 3. This was necessary because the new coAutoSpring options increased a column's option size from byte to word (now there are 9 options).
  • Improvement: Edit property of TStringEditLink promoted to public.
  • Improvement: ShortenString better takes right-to-left contexts into account.
  • Improvement: toAlwaysHideSelection introduced. Allows to hide node selections entirely.
  • Improvement: toUseBlendedSelection introduced. Allows to have translucent node selections.
  • Bug fix: Mantis bug entries #140, 144, 125, 122, 129, 147, 148, 149, 152 - 157.
  • Improvement: Mantis feature request #113, toSimpleDrawSelection introduced.
  • Improvement: ComputeNodeHeight introduced. Helper method to delegate node height calculation to the tree.
  • Improvement: Alt key might be pressed when clicking in the tree. This allows to start drawing the selection rectangle also on node captions and images (which would otherwise start dragging).
  • Bug fix: ValidateCache was not always called in ToggleNode when InvalidateCache was used.
  • Bug fix: FLastHintRect was sometimes not reset preventing so a new hint to appear.
  • Bug fix: Redundant ChangeCheckState in HandleMouseDown removed.
  • Bug fix: OnHeaderDblClick was triggered even if the column was set to be unclickable.
  • Bug fix: Wheel panning and scrolling was not possible if toAutoScroll was not set. This option has another meaning and should not impact wheel handling.
  • Bug fix: VT control could not be set as ActiveControl at design time.
  • Bug fix: In method ContentToText it could be that the text contained the separator char as regular character, so it was necessary to wrap the text with quotation marks then.
  • Bug fix: Bidi mode and aligment was not correctly considered in UpdateEditBounds when grid extensions were enabled.
  • Improvement: Check for nil hint data in TVirtualTreeHintWindow.CalcHintRect just to be on the safe side.
  • Improvement: TVirtualTreeColumn.ComputeHeaderLayout is now virtual to allow descendants to change the layout.
  • Improvement: toFullVertGridLines, vertical grid lines can be drawn over the full client area height.
  • Improvement: flickering on column resizing is gone.
  • Improvement: System conformal border width calculation for certain tasks.
  • Improvement: Animation parameter for TVTHeader.AutoFitColumns to avoid the size animation (default: True).
  • Improvement: ParentFont property for the header. Default is False to stay compatible with older tree versions.
  • Bug fix: cursor rectangle for spanned columns in normal hint mode was too small.
  • Feature: the implementation is now more than 30.000 lines in size.
  • Bug fix: Access violation fixed, which was sometimes caused by setting VT to edit mode if the old edit link was not freed yet (because it was still handling a message).
  • Improvement: Hint animation now does no longer stop quick switches to new hints.
  • Improvement: ParentBackground property published.
  • Bug fix: vsAllChildrenHidden and vsExpanded are now removed from a node's state if there are no child nodes anymore
  • Improvement: column width limit to 10000 is now only applied on non-NT systems (Win9x/Me).
  • Improvement: single letter mode in incremental search is not used if the current node also fits the repeated character.
  • Bug fix: correct theme change handling when switching to classic mode.
  • Improvement: new event OnMeasureItem, new handling for application driven node heights. TCustomVirtualStringTree.ComputeNodeHeight implementation to easy node height computation for multi line nodes.
  • Improvement: Header is nil'ed when the tree is destroyed and checked before used in TBaseVirtualTree.Notification in order to avoid potential problems accessing an invalid address.
  • Bug fix: The cut and copy pending states in the tree and participating nodes were not removed.
  • Bug fix: csPaintCopy was not considered when painting (used for TWinControl.PaintTo, e.g. in Form.Print).
  • Bug fix: DT_NOPREFIX added for header text output.
  • Bug fix: Thread safe check for current tree reference in the worker thread, as it can be reset before it was used.
  • Bug fix: Color change for non-standard background colors after all columns were hidden.
  • Improvement: new node background erase action (eaNone).

Helium2Preview

Version 3.6.3 - 3.8.2 (February - April 2003)

  • Bug fix: Local tree reference in worker thread is erased when a tree removes itself from the waiter list.
  • Improvement: TStringEditLink public methods are now virtual.
  • Change: A couple more methods in the header and columns are virtual now.
  • Improvement: Introduction of TVirtualTreeColumnsClass and GetColumnsClass in TVTHeader. This allows for more customization.
  • Improvement: DetermineHiddenChildrenFlagAllNodes, tsUpdateHiddenChildrenNeeded, Optimized flag determination to speed up mass changes of the visiblity state of nodes.
  • Improvement: Unicode support for inplace editing by utilizing the TNT controls package. This support is by default disabled and can be made active by enabling the compiler symbol TntSupport.
  • Improvement: MoveTo is now allowed with Source and Target being the same node, but only for amInsertBefore/After and child nodes only.
  • Bug fix: Mantis bug entry #112, #108, #100, #103, #119
  • Improvement: All public images properties changed from TImageList to TCustomImageList. (Mantis entry #110)
  • Bug fix: Handling for manipulating columns via index and manual deletion.
  • Improvement: Some small additions to aid customizations by descendants.
  • Bug fix: GetMaxColumnWidth did not consider if there were vertical tree lines.
  • Improvement: The internally used edit control in the tree edit link can be changed now by assigning a new control to the Edit property. The edit link will take over the ownership of the new control then!
  • Improvement: Header paint info in advanced custom draw events is now changable (declared as var instead const).
  • Bug fix: The number of visible nodes was not updated correctly under certain circumstances.
  • Bug fix: Invalid tree data in TVirtualTreeHintWindow.IsHintMsg was used under rare conditions.
  • Bug fix: Exception in FindInPositionCache due to invalid position cache data.
  • Improvement: VT may optionally use a local node memory manager for node allocations. This will increase allocation speed by about 200% for large trees (so node creation and destruction is about 3 times faster). Small trees do not benefit that much from it, so the node memory manager is disabled by default. See UseLocalMemoryManager for more information.
  • Bug fix: State change management used in the worker thread sometimes caused a deadlock.
  • Improvement: UpdateScrollBars is now virtual.
  • Bug fix: The structure change event was not triggered during ProcessOLEData when nodes were copied.
  • Bug fix: Failure to initialize the OLE subsystem does no longer throw an exception. It is a non-critical problem if it fails, only OLE drag'n drop and clipboard operations do not work then.
  • Bug fix: Check state changing did not consider the permission of the OnChecking event. Fixing this has the wanted side effect that you cannot change a node's check state if it has a tristate checkbox and none of its child nodes are initialized yet.
  • Bug fix: DT_NOPREFIX was not used for single line nodes.
  • Improvement: speed up for column erasing
  • Improvement: Advanced header custom drawing with the ability to schedule element drawing either by the application or the tree.
  • Bug fix: Node rectangle calculation in ClearSelection is wrong.
  • Bug fix: all remaining (and fixable) Mantis bug entries fixed.
  • Improvement: OnStateChange, DoStateChange, centralized state change method with notification for event sink.
  • Improvement: DeleteSelectedNodes is now virtual

Version 3.5.8 - 3.6.2 (December 2002, January 2003)

  • Improvement: hint flickering on key press is gone.
  • Improvement: Position cache filling is now more fail save.
  • Bug fix: Mantis bug entry #75.
  • Bug fix: Mantis bug entry #74.
  • Bug fix: Mantis bug entry #77.
  • Bug fix: Mantis bug entry #82.
  • Bug fix: system check images size does not fit.
  • Optimization: minimal change in HandleIncrementalSearch.
  • Improvement: Full boolean evaluation is permanently switched off as VT heavily relies on that setting.
  • Improvement: The buffer for incremental search is now public.
  • Bug fix: Column additions now set a column's default properties first before doing default notification handling in order to have them available when updating the header/tree as result of the TCollection.Changed event.
  • Improvement: The header font is adjusted according to the system font settings.
  • Improvement: Exit code for internal node editor does no longer prevent focus switch to other controls.
  • Improvement: Multiline support for node captions. New node state vsMultiline (default: off). Note: This support requires Windows NT (4.0/2000/XP and up) for word breaking. The word breaking feature is not available on Windows 95/98/Me systems.

Version 3.5.1 - 3.5.7 (November 2002)

  • Improvement: CanFocus is not virtual in Delphi 4 (-> conditional definition of the override keyword).
  • Improvement: Most of the properties for the internal edit control are now public.
  • Improvement: Edit control in the standard edit link is now accessible via a protected read only property.
  • Improvement: Initialization of global structures is now delayed until the first tree is created. This allows use of VT also in special applications like property sheet extensions.
  • Improvement: Updating/Updated pair included in VT.Loaded to avoid design time modification state changes.
  • Work around: CM_AUTOADJUST introduced to decouple edit window notification and resizing for Win9x/Me systems.
  • Improvement: Reintroduction of automatic exit handling for the internal node editor.
  • Improvement: System check and flat check images introduced.
  • Improvement: Exchanged 'x' for ' ' as the dummy hint string to avoid showing up a 'x' when using TAppliction.Hint.
  • Improvement: The virtual string tree does incremental search independently. Use OnIncrementalSearch if you want to override the default behavior.
  • Improvement: VK_BACK can be used in incremental search to return to the previous pattern (deletes the last char in the current pattern and search temporarily backwards).

Version 3.4.10 - 3.5.0 (October 2002)

  • License: Virtual Treeview is now released under a double license: MPL or LGPL.
  • Bug fix: hit test in other than the main column sometimes returned a check box hit.
  • Improvement: new property SelectionBlendFactor. Can be used to adjust the blend effect of the selection rectangle (if it is used).
  • Improvement: Painting of node images improved to have it exactly as used in standard controls.
  • Bug fix: pressed state for a checked node is now reset if another key than VK_SAPCE is pressed.
  • Bug fix: font handling in Print caused wrong output on screen after print.
  • Improvement: Ability to link Troy Wolbrink's Unicode aware popup menu added. See VTHeaderPopup.pas for more details.
  • Bug fix: vsAllChildrenHidden is now removed from the parent node in AddChild.
  • Work around: focus changes between VT and wrapped non-VCL controls like TWebBrowser should be accompanied by resetting the ActiveControl property of the tree's owner form.
  • Improvement: Consideration of drag objects not derived from the base control drag object.
  • Improvement: Keyboard handling for expand/collapse extended to main keyboard (formerly only numpad).
  • Improvement: Consideration of the parent form when checking if focusing of a tree is allowed (the VCL doesn't this).
  • Work around: When used in a package the special hint window is not freed correctly by the VCL, which causes an access violation on shut down.
  • Bug fix: Clipboard format enumeration should be sorted by priority.
  • Improvement: TVTHeader.CanWriteColumns introduced to allow descendants to avoid writing columns to the DFM.
  • Renamed Canvas to TargetCanvas in TVTBeforeItemEraseEvent (for consistency).
  • Support for application defined drag objects (VCL drag'n drop only).
  • Bug fix: NC border painting considers now client edge too (if border width is > 0 and border style = bsSingle).
  • ChangeScale implementation / toAutoChangeScale, This is used for big fonts to scale the default node height automatically.
  • Text alignment is preserved in DrawTextW.
  • WM_THEMECHANGED also wrapped with ifdef ThemeSupport.
  • More default values added.
  • Tree states property is now writable. Writing to it will not trigger any action, but can be used by descendants.

Version 3.4.1 - 3.4.9 (August - September 2002)

  • Bug fix: Delphi Gems Issue Tracker #41.
  • Bug fix: Delphi Gems Issue Tracker # 38, The MDI problem work around code in TBaseVirtualTree.WMKillFocus was removed as the problem it was to fix does no longer appear but another problem was created by it.
  • Bug fix: The tree options were freed in the tree's destructor but used again afterwards (in Clear).
  • Bug fix: inherited call in TBaseVirtualTree.Notification included.
  • Selection with Ctrl-klick is handle the same way as Explorer does it (selection on mouse up instead down).
  • Added reset for last searched node (incrementals search) when the search timer is deactivated.
  • Work around problems with keypresses while doing hint animation in IsHintMsg
  • Change in Animate, use Cardinal instead Integer.
  • Bug fix in ScrollIntoView, scrollbar visibility was not correctly tested.
  • Bug fix in WMKillFocus, if toGhostedIfUnfocused is used then the focused node should be redrawn too.
  • Bug fix in CopyTo, if user canceled node copy then result is nil now.
  • Correction, NewParent in TVTNodeMovingEvent and TVTNodeCopyingEvent is now Target, because the attach operation might have been a sibling action, where NewParent would be inappropriate.
  • Added all possible default values to TVirtualTreeColumn.
  • Drop effect support for VCL drag'n drop.

Version 3.3.3 - 3.4.0 (July 2002)

  • Delphi 7 compatibility.
  • Bug fix for clipboard formats. The internal clipboard formats array was erronously never used.
  • Bug fix for freeing image lists if they can get destroyed before the tree.
  • Bug fix for ChildrenOnly in IterateSubtree, if the given node has no child nodes.
  • Introduced NodeParent property in Virtual Treeview to ease navigation and manipulations.
  • Improved client area invalidation check.
  • New paint option introduced (toGhostedIfUnfocused).
  • New option toDisableAutoscrollOnFocus introduced, to prevent a tree from scrolling horizontally after a column received the focus, but was not fully visible.
  • GetTotalCount does not use BeginUpdate/EndUpdate but simple increment/decrement of FUpdateCount to avoid recursion problems.
  • DetermineHitPositionLTR and DetermineHitPositionRTL are now virtual.
  • PaintCheckImage, PaintImage, PaintNodeButton and PaintTreeLines are now protected (instead private) and also virtual. This will allow for even further customizations of VT.
  • Check for FSelectionCount > 0 in RemoveFromSelection to improve stability.
  • toReadOnly introduced.
  • SetItemHeight renamed to SetDefaultNodeHeight.
  • TVTHeader.Invalidate promoted to public.
  • Update lock for DeleteChildren operations to avoid access to invalid pointers under certain circumstances.

Version 3.2.0 - 3.3.2 (May - June 2002)

  • Fixed hit determination bug (appeared when using margins in the tree).
  • Support for Visual Form Inheritance (VFI) for the header.
  • Bug fix for loading nodes from stream which are invisible but their parent is expanded.
  • Improved theme support. Now TThemeServices from the Windows XP Theme Services (another free software from Delphi Gems) is used. You must now explicitely add a manifest to your application! This is no longer done automatically by the tree.
  • Bug fix: autoscroll in VCL drag mode.
  • Bug fix: shifted characters for incremental search.
  • VST lets now first the ancestor/application render to clipboard before it tries itself.
  • Application might modify TargetCanvas.TextFlags in OnPaintText to control the output of normal and static text (currently background only).
  • Correct bidi mode window styles.
  • Bug fix regarding vsAllChildrenHidden node state (DetermineHiddenChildrenFlag).
  • Bug fix in NC painting (removed child window clipping).
  • Bug fix horizontal scrolling (ScrollIntoView). Improved horizontal scroll into view.
  • InternalConnectNode and InternalDisconnectNode are protected now.
  • InitNode in GetHitTestInfoAt to avoid access to uninitialized nodes under certain circumstances.
  • Default node text is only stored if it differs from 'Node'.
  • Printer font assignment fixed.
  • Bug PaintTree for OnPaintBackground fixed. The owner draw mode is now called with the correct window origin set.
  • New event OnHeaderDraggedOut.
  • Switch to minor version 3.2.
  • Hide selection in full row selection mode.
  • bug fixes
  • other small changes

Version 3.0 - 3.1.9 (January - April 2002)

  • First public beta version of the Virtual Treeview CLX version.
  • DetermineNextCheckState is now protected and virtual.
  • Tree printing.
  • UpdateAction only if tree is focused.
  • Consideration of the user setting for wheel scroll lines.
  • Limit drag over node hits for report mode (like listview).
  • All column indexes are now consistently using TColumnIndex (instead Integer).
  • Minor changes to make custom implementations of auto column resize possible.
  • Wheel panning and auto scrolling, option toWheelPanning.
  • vsClearing node state for optimizations.
  • Update*Scrollbar methods are now public.
  • toAutoAcceptEditChange.
  • MoveTo within a tree now keeps focused node instead resetting it.
  • WMContextMenu cancels now also drag operations.
  • PaintTree is now public.
  • WM_CANCELMODE included.
  • Bug fix: IStream storage format does not work with OLEFlushClipboard > had to remove it (HGlobal is still available).
  • Other bug fixes.

Version 2.7. build 2-6 (December 2001)

  • child controls are now correctly scrolled too if there is a background image
  • tree cursor is now only applied when there is no global cursor (Screen.Cursor) is set
  • prevented resize of the edit when grid extensions are active
  • selection anchor setting when the first selected node is set in code
  • compiler switch ReverseFullExpandHotKey introduced
  • Renamed CreateEditor to DoCreateEditor to be consistent with similar methods (DoCreateDataObject
  • drastically simplified auto expand code, it also works now as in Explorer
  • space handling limited to nodes which have a check box/radio button and if check support is enabled, otherwise space characters are used for incremental search
  • change events rework
  • ScrollIntoView allows now for vertical centering, option toCenterScrollIntoView
  • help contexts for exceptions, EVirtualTreeError now in interface section to allow testing for it in apps.
  • ResetRangeAnchor
  • VT allows now two storage formats for drag'n drop and clipboard transfers (HGlobal and IStream). Default format is IStream as it does not need as much memory during construction as HGlobal. It is also a faster in usage.
  • implementation of events in IDataObject (advise/unadvise sinks etc.) using IDataAdviseHolder
  • overloaded GetNodeAt variant which only takes X and Y (in client coordinates)
  • ILC_COLOR32 for image lists is only used for Windows NT systems, this will help avoiding GDI trouble on Win9x/Me
  • small changes
  • bug fixes

Version 2.6, build 3-14, Version 2.7.1 (November 2001)

  • F2 alone makes the tree going into edit mode, no longer any modifier key allowed
  • added Canvas.Lock/Unlock in PaintTree
  • added TDragControlObject assignment in CMDrag
  • further small changes for BCB compatiblity
  • drag imager helper interface support included thank Jim Kueneman's excellent preparatory work
  • structure change event trigger in AddChild
  • some minor optimizations
  • initial check state setting when changing a check box type
  • fmTransparent (button fill mode)
  • correct tree window border for themes (still flickers a bit, need any documentation for this)
  • theme style is cached now to speed up frequent checks
  • improved editing (default editor behavior), correct frame for themed application
  • custom checkimages work now also with a themed tree
  • OnGetCursor, OnGetHeaderCursor, TVTGetCursorEvent, TVTGetHeaderCursorEvent, DoGetCursor, DoGetHeaderCursor
  • changed coMovable to coDraggable, (it was never used so far) and made it actually working
  • published Action property
  • categorisation of properties for the IDE
  • toAutoDeleteMovedNodes
  • visible count bug fix
  • improved header rect determination and usage
  • reset of hot node if focused node is changed
  • check button improvement for XP styles
  • small tree painting rework
  • TColumnIndex, TColumnPosition (to utilize better type checking)
  • overloaded ColumnFromPosition variant to get a column index from a position index
  • TVTHeaderDraggedEvent, new parameter in OnHeaderDraggedEvent
  • scrollbar reset when hiding it
  • Ctrl A now considers selection constraints
  • no image blending if the tree is unfocused
  • improved VCL drag handling
  • HasPopupMenu
  • other small changes
  • bug fixes

Version 2.5, build 39-40; 2.6, build 0-2 (October 2001)

  • Release candidate 2 for the beta testers and early adopters
  • Full Windows XP theme support
  • Legacy code included for XP style support on non XP systems (TCheckImageKind, TVTHeaderStyle, TVTButtonFillMode, XPImages, DrawXPButton, node buttons)
  • Node height bug fix for loading trees from stream
  • VCL drag handling improved
  • Update blocker in AddChild
  • Property DragCursor published
  • ILC_COLOR32 is now used for image list creation (instead ILC_COLOR16) to allow for XP alpha blending
  • ContentToXXX routines consider now hidden columns
  • toFullRepaintOnResize
  • Header drop mark is not shown if the column being dragged is also the current drop target
  • TBaseVirtualTree.GetHeaderClass (allows creating an own header class)
  • Correct space distribution for centered column headers showing also the sort indicator
  • Reset of FRangeAnchor when node is deleted
  • Conditional compilation of flat scroll bars (see symbol UseFlatScrollbars)
  • Synchronous update mode (BeginSynch, EndSynch, tsSynchMode, usBeginSynch, usSynch, usEndSynch)
  • toReportMode in TreeOptions.MiscOptions, to even better simulate TListView
  • TVTDropMarkMode for header custom draw
  • Other small changes
  • Bug fixes

Version 2.5, build 23-38 (September 2001)

  • Windows XP style check images
  • more available check images
  • MDI child parent form problem work around in TBaseVirtualTree.WMKillFocus
  • check for destruction of the header popup
  • published OnContextPopup
  • stop draw selection mode before inherited mouse button up handler opens a popup menu
  • corrected some spelling errors
  • SetVisible improvements
  • FullCollapse changed again, it does not initialize nodes anymore
  • CanShowDragImage is now virtual
  • changes to provide a drag image of the tree without showing it (for descendants which have own image handling)
  • conditional focus setting
  • GetFirstVisibleChild(NoInit), GetNextVisibleSibling(NoInit), GetPreviousVisibleSibling(NoInit)
  • VisiblePath now checks for vsVisible style and sets it if VisiblePath is set to True
  • bug fixes in visibility setting
  • toAutoHideButtons auto option
  • vsAllChildrenHidden node flag
  • VCL drag image bug fix (external drag images)
  • small improvement in DrawTextW
  • bug fixes background painting
  • bug fixes VCL drag image painting (for external drag images)
  • changed OnDrawHeader to OnHeaderDraw to fit it closer to the other header events
  • shadows for hints and tooltips
  • Windows XP style header drawing
  • TVTButtonFillMode, ButtonFillMode
  • alpha blended selection rectangle
  • properties DrawSelectionMode, SelectionRectangleBlendColor and SelectionRectangleBorderColor
  • OnHeaderDragged published
  • removed TVTEdit.WMKillFocus
  • TCustomStringTreeOptions
  • adjustments so that TCustom... trees only use and return TCustom... options versions
  • other small changes
  • bug fixes

Version 2.5, build 1-22 (August 2001)

  • removed TVTEdit.WMKillFocus
  • TCustomStringTreeOptions
  • adjustments so that TCustom... trees only use and return TCustom... options versions
  • hint positioning
  • tree options are now really overrideable and extendable
  • IsVisible[Node] := True now makes a node really visible (expands all parent nodes)
  • significant speed improvements for ContentToXXX routines
  • better Delphi 6 compliance
  • EndUpdate does nothing if the tree is being destroyed
  • double click on state icon does toggle node too
  • InvalidateNode checks now for allocated handle
  • GetMaxRightExtend now correctly includes FMargin in entire width
  • DoCanEdit, GetImageIndex (separated from DoGetImageIndex), DoGetText called by GetText
  • improved key conversion for incremental search
  • support for standard actions
  • options splitted into sub-options, property Options is now a class instead of a set
  • new options toUseBlendedImages and toAutoScrollOnExpand
  • DoBeforeCellPaint is now called in PrepareCell to allow customization after column color application
  • consolidated DoDrag* and Drag* methods, DoDrag* methods only call their appropriate events
  • AddChild and InsertNode can now take a pointer to user data which is placed into the first four bytes of a node's user data area (there must of course at least be 4 bytes user data).
  • vsInitialUserData to indicate a node needs OnFreeNode even if it is not "officially" initialized
  • FDragSelection is now also a protected property
  • LineMode
  • ContentToRTF improvements for correct table building
  • ContentToHTML improvments and bug fixes
  • changed CF_RTF* to CF_VRTF* to avoid identifier conflicts
  • internal data handling improved, method AllocateInternalDataArea, method InternalData
  • improved text painting
  • rounded selection rectangles, property SelectionCurveRadius
  • selection border colors
  • hatSystemDefault, DoGetAnimationType
  • small changes
  • bug fixes

Version 2.4, build 1-34 (May to June 2001)

  • introduced build numbers
  • Delphi 6 compatibility
  • brush alignment bug for dotted lines fixed
  • test for TYMED_HGLOBAL is now done using a mask instead of direct comparation
  • tree column classes can now be changed by descendants, see TBaseVirtualTree.GetColumnClass
  • TVTRenderOLEDataEvent, property OnRenderOLEData, DoRenderOLEData TVTGetUserClipboardFormats, DoGetUserClipboardFormats, property OnGetUserClipboardFormats
  • removed ScrollIntoView from AddChild and InsertNode
  • property OnPaintBackground, DoPaintBackground
  • TVirtualTreeColumn.LoadFromStream adjustments for the new header stream version
  • BeginDrag is again public, TControl already has this method in the public section
  • GetFirstSelected and GetNextSelected iterate now through the tree as every other of those methods returning so the nodes in logical order
  • GetFirstCutCopy, GetNextCutCopy
  • ContentToRTF, ...HTML, ...CSV, ContentToClipboard
  • GetFirstInitialized, GetNextInitialized, GetPreviousInitialized, GetLastInitialized
  • on expanding scroll child nodes into view
  • new property editor for clipboard formats
  • procedures RegisterVTClipboardFormat etc. added
  • property ClipboardFormats added
  • IDataObject handling and customization added
  • trees render their clipboard formats now on their own behalf, IDataObject does only dispatch calls
  • OLEFormats property removed
  • clipboard handling reworked
  • TVTDataObject, to have two instances (one for dragging, one for clipboard)
  • IDataObject is no longer implemented by the drag manager
  • renamed TVTMoveRestriction to TVTDragMoveRestriction
  • correct background erasing for animated toggle
  • Incremental search included in WM_KEYDOWN handling instead WM_CHAR with proper ANSI to Unicode char conversion.
  • OnUpdating event, DoUpdating method
  • improved FullExpand, FullCollapse
  • improved AutoFitColumns
  • header stream version increase
  • Color, coParentColor, poColumnColor for columns (streaming and assignment updated accordingly)
  • no scrollbar updates anymore in AdjustTotalHeight to avoid unwanted side effects
  • Editors can now prevent node edit stop. CancelEditNode, EndEditNode, DoCancelEdit and DoEndEdit are now functions and return True if editing was stopped.
  • small changes in ReinitNode/Children
  • workaround for an unwanted drop action when dropping while auto scrolling
  • IVTDragManager
  • tsNeedRootCountUpdate
  • WM_NCRBUTTONDOWN in header
  • change of focused column with hot keys in grid mode is now limited to not-full-row-select mode
  • checks for update count in ToggleNode
  • CM_FONTCHANGED
  • SetChildCount/property ChildCount accepts now nil to change the top level node count
  • improved GetHasChildren
  • incremental search improvements
  • GetLastVisible, GetLastVisibleNoInit
  • Changed semantic for GetLastChild, GetLastVisibleChild, GetLastChildNoInit and GetLastVisibleChildNoInit. They do not iterate the entire child and grand child list but only the child list of the given node.
  • Deeper iteration to grand children is done via GetLast, GetLastNoInit, GetLastVisible and GetLastVisibleNoInit
  • customizable line styles
  • DoGetPopupMenu
  • OnDragDrop event has a changed parameter list (no open array as parameter to avoid trouble with BCB)
  • public property Image of TVTDragImage to have access to the internal drag image bitmap
  • TVTNodeAlignment, property NodeAlignment
  • incremental search
  • key handling for non-grid mode improved
  • small improvements
  • bug fixes

Version 2.4 (April to May 2001)

  • key handling for non-grid mode improved
  • voDisableDrawSelection (32 bits are now used for options, can't add any more)
  • voHideSelection
  • GetLast, GetLastNoInit
  • incremental search (TVTSearchDirection, TVTIncrementalSearch, SearchTimer, event OnIncrementalSearch, DoIncrementalSearch, TVTIncrementalSearchEvent, TVTSearchStart, IncrementalSearchStart)
  • improved header timer handling
  • improved key navigation in grid mode
  • Virtual Explorer Tree (VET) written by Jim Kueneman is now part of the package
  • VK_HOME and VK_END set now first and last column correctly
  • removed ivsVisible style because of unpredictable interferences with other code
  • columns store their last width and can restore it
  • TVirtualTreeColumn.RestoreLastWidth, TVTHeader.RestoreColumns
  • restore last column widths
  • workaround for bad implementation of disabled images in TImageList
  • brush alignment for drawing of nodes with odd height
  • dotted lines implementation improved, tree lines are now dotted drawn too
  • Column parameter in TVTDragAllowedEvent
  • flat check images, ckFlat
  • InvalidateChildren
  • arrow key navigation limited to grid extension, otherwise (extended focus) normal behavior
  • VK_TAB handling, WantTabs property
  • published OnShortenString in the string tree
  • introduced a build number in the main version number
  • toggle animation only if not the last visible node to be expanded
  • CharCode in OnKeyAction is now a variable to allow changing it
  • nodes in SelectAll are now initialized
  • Position in TVTPopupMenu event
  • tsVCLDragging, tsOLEDragPending, tsOLEDragging
  • limited auto scroll to draw selection and dragging
  • AutoFitColumns
  • public property EditLink
  • ProcessMessage in IVTEditLink
  • improved change handling
  • InvalidateColumn
  • TVirtualTreeColumns.IsValidColumn
  • draw selection is now also possible with full row select
  • OnScroll, DoOnScroll, TVTOnScrollEvent
  • scrolling if scrollbar is not visible
  • UnselectNodes
  • deselection with Ctrl+Shift if last focused node is not selected
  • node toggle improvements
  • background image offsets as properties
  • more BCB adjustments
  • animated hints improved
  • animated toggle improved
  • method Animate (general animation support)
  • initial range anchor setting if there was not yet a focused node
  • animation duration
  • PaintImage improvements for transparent images and full row selection
  • function Path
  • other small changes
  • bug fixes

Version 2.3 (March to April 2001)

  • tsIterating state (checks in DeleteNode and DeleteChildren)
  • paint optimizations
  • selected images are dimmed now
  • ShortenString, DoShortenString, OnShortenString event
  • OnKeyAction
  • scroll bar improvements
  • application defined check image list
  • internal data handling
  • drag image implementation finished (finally, this was really tough stuff because of the alpha blended image and updates in non client area)
  • FormatEtcList in the drag manager is now accessible through a property
  • clipboard handling
  • GetFirstNoInit (renamed GetFirstNode to GetFirst as it is more consistent)
  • small changes in TBaseVirtualTree.DoEdit;
  • restructuring of node checking
  • high color format for internal image lists
  • NewParent in OnNodeCopying
  • other small changes
  • bug fixes

Version 2.2 (March 2001)

  • MMX feature check
  • property OffsetXY
  • drag image
  • improved dragging
  • general drag management improvements
  • TVTDragImage
  • alpha blending
  • Watcher (critical section) introduced
  • MMX AlphaBlend implementation
  • improved image painting (ghosted, overlay etc.)
  • hoDblClickResize
  • TVirtualTreeColumns.AnimatedResize
  • column resize on double click
  • GetMaxColumnWidth
  • poDrawFocusRect, poDrawSelection in paint options
  • ChildNodesOnly in IterateSubtree
  • OnColumnClick, OnColumnDblClick
  • HandleMouseDblClick, WM_RBUTTONDBLCLK, WM_MBUTTONDBLCLK
  • TVTDragDropManager.SetOLEFormats is now overridable
  • hint positioning
  • reset of node widths on main column switch
  • optimized tree and header painting
  • edit mode for item clicks beside the label when grid extensions are set
  • TVirtualTreeColumn.GetAbsoluteBounds
  • tsPainting state
  • simple DrawTextW implementation (works also on Win9x)
  • improved selection rect painting
  • tsValidationNeeded
  • check event rework
  • PrepareGridExtensions
  • CM_ENABLEDCHANGED for desgin time
  • public header click index
  • draw selection improvement for all text alignments and bidi modes
  • more header mouse events (OnHeaderDblClick, OnHeaderMouseDown, OnHeaderMouseMove, OnHeaderMouseUp)
  • virtual event trigger methods for those mouse events
  • multiline hints
  • THitPositions
  • other small changes
  • bug fixes

Version 2.0 to 2.1 (January to February 2001)

  • improved hinting (accounts now for alignment and directionality)
  • improved GetDisplayRect
  • FNodeCache removed
  • BidiMode in OnDrawNode
  • DetermineHitPositionLTR, DetermineHitPositionRTL
  • improved GetHitTestInfoAt
  • improved GetNodeAt method
  • FindInPositionCache
  • made the header the sender in all events related to the header (e.g. OnHeaderClick)
  • WM_PRINT, WM_PRINTCLIENT
  • Text property for TVirtualStringTree
  • corrected header painting for various border style combinations (WS_BORDER, WS_THICKFRAME, WS_EX_CLIENTEDGE)
  • check for recursive hint animation loop entrance
  • voPopupMode
  • Tree.Assign
  • Ctrl A handling (select all)
  • context menu key handling (popup menu)
  • DoPopupMenu
  • right to-left drawing
  • some more adjustments for C++ Builder
  • improved column auto sizing and recover for zero-sized columns
  • columns can now be used even if the header is invisible
  • column autosizing and hints while editing
  • GetNodeAt can now take absolute and relative coordinates
  • TWMContextMenu declaration for Delphi 4
  • TChangeReason for OnStructureChange
  • hint window improvements for RTL columns and user defined fonts
  • drag manager referencing redesigned, no explicit reference count modifications necessary anymore
  • complete paint restructuring, now there is only one method to paint the tree: PaintTree, which can be used for normal paint, printing, drag image etc.
  • TVirtualTreeColumn.GetDisplayName changed to show a column's name in the property inspector if it only contains ANSI characters
  • column alignment and bidi consideration, added general property in TVirtualTreeColumn
  • properties IsVisible (changed semantic), VisiblePath, FullyVisible
  • filtered IterateSubtree
  • WM_CONTEXTMENU
  • vsVisible, full visibility implementation for individual nodes (see also GetVisibleParent, GetNextVisibleNoInit etc.)
  • included FlatSB.pas in uses list to use the flat scrollbar wrapper in case there is a system not providing flat scrollbars
  • ShortenString speed improvements
  • introduced stream version for header
  • OnCreateDragManager event
  • EditDelay property
  • dropmark can now be switched off (voShowDropmark)
  • tree colors class which unites all customizable colors into one tree property
  • sort enhancements (auto sort option, sort column, sort direction and sort glyph in header)
  • new tree states for left, middle and right mouse button presses
  • VCL drag'n drop is now also possible (left mouse button only)
  • many minor changes
  • bug fixes

Versions 1.30 to 1.31 (December 2000 to January 2001)

  • adjustments for C++ Builder (some type declarations moved)
  • voSiblingSelectConstraint
  • full MainColumn implementation, the column containing the tree can now freely be chosen
  • DragOperations property
  • AutoExpandDelay
  • header image list
  • canvas font change tracking during paint cycles
  • WM_ENABLE
  • Tag property for a column
  • OnAfterCellPaint, OnBeforeCellPaint
  • item customization reworked, TDrawInfo as well as OnGetDrawInfo is no longer needed
  • InitNode in DoGetText
  • BeginDrag is now protected and should no longer be used by applications
  • many minor changes
  • bug fixes

Versions 1.22 to 1.29 (November 2000)

  • many other minor adjustments
  • OnDragAllowed for selective drag start
  • edit improvements
  • VK_MULTIPLY handling
  • TScreen.HintFont replacement and Rectangle() version for Delphi 4
  • column options
  • bug fixes

Version 1.21 (Oktober 2000)

  • header drag mark improvements
  • utility images (internal use, e.g. for header drag mark)
  • node focus change events
  • column options
  • collapse/expand animations
  • hint animations
  • paint improvements
  • splitted stream and tree versions
  • property IsDisabled
  • bug fixes

Versions 1.17 to 1.20 (September 2000 to Oktober 2000)

  • single scroll bar properties class
  • property IsDisabled
  • separate tree and stream versions
  • bug fixes

Versions 1.5 to 1.16 (August 2000 to September 2000)

  • small improvments
  • InternalAddFromStream, AddFromStream
  • grid and tree line colors
  • improved constrained selection
  • bug fixes

Versions 1.8 to 1.14 (June 2000 to August 2000)

  • header streaming
  • header hints
  • header drag events
  • node button
  • wide string streaming support
  • margins
  • gridline color
  • improved drag image handling
  • generic editing
  • non client area clipping
  • worker thread improvements (for use in DLLs, services etc.)
  • initial help file and preparation for first public release
  • hit test for spanned columns
  • clipboard and drag'n drop improvements
  • header owner draw
  • node sorting (merge sort)
  • bug fixes

Versions 1.6 to 1.7 (May 2000)

  • initial expand state (ivsExpanded)
  • node sort
  • MarkCutCopyNodes
  • InitChildren, ValidateChildren
  • improved clipboard handling (WM_CUT, WM_COPY, WM_PASTE and more)
  • voInitOnSave
  • overlay images
  • no width cache anymore, GetMaxRightExtend instead
  • column resize event
  • header popup menus, custom draw, dragging, switchable images
  • new tree states (expanding, collapsing, updating)
  • header options
  • auto span coulumns
  • bug fixes

Version 1.5 (April 2000)

  • own implementation for scroll bars
  • background image
  • improved NC painting
  • improved hit test
  • new events and methods (OnNodeCopying, ReinitNode etc.)
  • generic node edit improved
  • property vsHasChildren for nodes, properties ChildCount, ChildrenInitialized and HasChildren in tree
  • header painting improved (is now also double buffered)
  • node hint improvements
  • improved/extended column handling (hit test, FocusedColumn, voExtendedFocus, GetNext(Visible)Column, GetPrevious(Visible)Column, improved autoexpand, voAutoSpanColumns)
  • custom draw (paint cycles introduced: On(Before/After)[Item]Paint)
  • many other small improvements and bug fixes

Version 1.4 (February 2000 to March 2000)

  • node editing, IVTEditLink, WM_RELEASEEDITLINK, application defined node editor
  • streaming, tree virtualization, application driven save and restore nodes
  • OLE clipboard support
  • OLE support by the tree to simplify the work the app. must do (ProcessDrop, ProcessOLEData)
  • switchable OLE formats the tree should provide
  • tooltips, node hints
  • GetSortedSelection, GetSortedCutCopySet
  • improved accessibility like: TopNode, auto expand/collapes on node focuse change, DeleteSelectedNodes, SelectAll, InvertSelection, GetNext(Previous)Sibling
  • splitted change event into two, one for node focus change and one for structure change (Add, Delete etc.)
  • disabled nodes, disabled tree, cutted nodes (with proper visual feedback)
  • column images
  • hideable columns, columns auto sizing and reordering
  • normal and static text for captions
  • general optimizations
  • application driven help and popup menu
  • compatibility for Delphi 4
  • bug fixes

Versions 1.2 to 1.3 (January 2000)

  • various new navigation functions (GetFirstSelected etc.)
  • VCL and OLE drag'n drop united (accept only) plus some support routines (e.g. MoveTo, ConvertSubTree)
  • new options (auto tristate, auto focus etc.), constrained selection
  • header and columns (plus support functions)
  • crossed 10.000 code lines boundary on 31. January
  • bug fixes

Version 1.1 (December 1999)

  • OLE drag'n drop
  • check support
  • multi selection and other optimizations
  • bug fixes

Version 1.0 (July 1999 to November 1999)

  • base implementation (buttons, lines, general window handling, base mouse handling)
  • caching for optimal speed
  • multi selection
  • OLE drag'n drop
  • common tree functions and properties (InvalidateNode, GetNodeData, Visible, Selected, Expanded...)

Google Code

For collaborative development I use Google Code since a while. At the time being only Virtual Treeview is hosted there.

Donate

Writing Open Source software has costs (for the server, domains etc.). So if you think my work is worth a donation to support further development then don't hesitate. Either do a single time donation via Paypal

or a repeating donation via Git Tip (use my GitHub account mike-lischke).

Forums Registrations

If you want to register in the Soft Gems forums please do so but additionally send me an e-mail, so I can activate your account. This countermeasure is necessary to fight spammers.

The VIP code to use for registration is 33209.