272 lines
18 KiB
TeX
272 lines
18 KiB
TeX
@@Features.htm
|
|
<title Features overview>
|
|
|
|
<image Hierarchy>
|
|
|
|
Virtual Treeview is "pure VCL" which means it is not based on any of the system controls but was written from scratch. As
|
|
the name already indicates, this control uses a different paradigm for tree management than other controls of this kind.
|
|
It does not know anything about the data it manages (except its size), not even the captions of a node. Everything is
|
|
retrieved from the application via events (or descendants via overridden methods). Virtual Treeview has been carefully
|
|
designed and thoroughly tested. The control proved its concept as well as everyday fitness already in many commercial
|
|
products and freeware projects.The following list summarizes in categories the most important features:
|
|
|
|
<table noborder>
|
|
<image Topaz> General
|
|
-------------- --------
|
|
</table>
|
|
|
|
* Virtual Treeview is <b>extremely fast</b>. Adding one million nodes takes only 700 milliseconds* ! This makes it
|
|
currently the fastest treeview publicly available on the Delphi/BCB market.
|
|
* Virtual Treeview has a <b>very small memory</b> foot print. By only allocating about 60 bytes per node (in the string
|
|
tree, the base tree uses only 56 bytes) it is well prepared to hold a million of them.
|
|
* Virtual Treeview is <b>optimized for high speed access</b>. It takes as few as 0.5 seconds to traverse one million
|
|
nodes* depending on needed validation and node validation states.
|
|
* <b>Multiselection</b> is supported, including <b>constrained selection</b> so that only nodes of a certain initial
|
|
level can be selected. A lot of effort has been put into the development of <b>effective algorithms</b> e.g. to allow for
|
|
modifying an already large selection set still interactively.
|
|
* <b>Drawing</b> the entire tree <b>to a bitmap or the printer</b> is supported by the central PaintTree method. The
|
|
messages WM_PRINT and WM_PRINTCLIENT are handled correctly which allow things like drawing a tree into a bitmap (e.g. <b>for
|
|
layered windows</b> or to implement animated drop down of controls which use VT as drop down control).
|
|
* There is an OnHint event to display <b>node specific hints</b>.
|
|
* There is an OnGetHelpContext event to retrieve <b>node specific help context IDs</b>. This includes automatic tree
|
|
and window parent control traversal as is invoked when the user pressed F1
|
|
* There is an OnGetPopupMenu event to retrieve <b>node specific popup menus</b>, includes automatic tree traversal.
|
|
* <b>Middle</b> and <b>right mouse buttons</b> can be used in addition to the left button and support everything which
|
|
is possible with the left button (dragging, selection etc.). These alternative buttons can be switched, of course.
|
|
* A <b>fixed background image</b> can be used in the tree and can be given a certain offset, e.g. to simulate shared
|
|
backgrounds.
|
|
* <b>Hot style</b> for nodes is supported (just like links in a browser window). A special cursor can be assigned for
|
|
this task.
|
|
* String trees support so called <b>static text</b> which appears after a node's caption (in every column) and which
|
|
can be formatted differently to the caption but cannot be edited, selected etc.
|
|
* An <b>auto span column</b> mode is supported which allows a column to take up more space for its caption if there are
|
|
empty columns to its right. This avoids clipping of long captions but still allows using multiple columns.
|
|
* A <b>node</b> can be <b>selected in every column</b> (this is switchable) as well as edited, making Virtual Treeview
|
|
some kind of a grid too. The tabulator key can be used to switch the focus between cells. A special option
|
|
(toGridExtensions) exist to support grid specific tasks.
|
|
* Nodes can have <b>individual heights</b> and the <b>vertical alignment</b> of a node's images and lines can be
|
|
adjusted individually.
|
|
* Virtual Treeview exposes its <b>internal states</b> like pending drag or edit events, multi selection or expanding in
|
|
progress. Using this information an application can <b>optimize its code execution</b> (state updates etc.).
|
|
* <b>Sorting a node</b> is supported via an application defined <b>compare call back</b>. Additionally, a tree can be
|
|
set to <b>auto sort</b>.
|
|
* <b>Hints</b> can contain <b>multiple lines</b> of text and mirror the <b>alignment and directionality</b> of the node
|
|
\or column they are displayed for. For their animation <b>sliding and alpha blending</b> is available.
|
|
* <b>Incremental search</b> with various options and directions is available too.
|
|
* <b>Auto scrolling</b> of the client area happens when the mouse is near the borders while dragging and draw selecting
|
|
(multi selection).
|
|
* <b>Default node height</b> and <b>default node text for string trees</b> can be used to avoid setting many nodes
|
|
explicitly to the same start value.
|
|
|
|
<table noborder>
|
|
<image Topaz> Newest technologies
|
|
-------------- --------------------
|
|
</table>
|
|
|
|
* For <b>smooth animations</b> (e.g. hint fading) Virtual Treeview uses <b>hand optimized MMX assembler</b> routines.
|
|
This code is also used to draw the translucent selection rectangle in multi selection mode. This is very much like what
|
|
Windows 2000 and Windows XP support but works also on Windows 95/98/Me.
|
|
* An <b>alpha blended image</b> of the tree window is shown while doing drag and drop. On Windows 2000 and Windows XP <b>IDropTargetHelper
|
|
and IDragSourceHelper interfaces</b> are supported which allow for some very neat effects (as used by Explorer). On older
|
|
consumer Windows versions the drag image is simulated by the tree but underlies there some minor limitations.
|
|
* Virtual Treeview supports <b>Windows XP themes</b>. It acts properly on theme changes and uses for all visual
|
|
elements which are themed the correct image by using native APIs. Under other Windows systems these styles are supported
|
|
by separate legacy code. Theme awareness can be switched.
|
|
* Virtual Treeview supports the 64Bit compiler of Delphi XE2
|
|
|
|
<table noborder>
|
|
<image Topaz> Unicode
|
|
-------------- --------
|
|
</table>
|
|
|
|
* TVirtualStringTree is implemented using <b>Unicode/wide strings</b> exclusively.
|
|
* The tree saves and reads all Unicode properties (e.g. column captions, default node text and the like) correctly
|
|
to/from DFM.
|
|
* All Unicode drawing <b>fully supports bidirectionality</b> (i.e. right-to-left drawing), column alignment
|
|
(left, center, right) and correctly aligned hints. Of course also this feature is available on Windows 95/98/Me.
|
|
* On Windows NT/2000/XP multiline captions are fully supported (on Win9x/Me there is limited support).
|
|
* In order to have also <b>Unicode editing capabilities</b> Virtual Treeview supports the TNT controls written by Troy
|
|
Wolbrink. This support can be enabled via a compiler switch named <b>TntSupport</b>. You must download and install the
|
|
TNT package first, however.
|
|
|
|
<table noborder>
|
|
<image Topaz> Drag'n drop and clipboard support
|
|
-------------- ----------------------------------
|
|
</table>
|
|
|
|
* <b>OLE drag and drop</b> and <b>OLE clipboard transfers</b> are supported with the tree as source and target.
|
|
Alternatively, VCL drag'n drop can still be used for compatibility.
|
|
|
|
These formats are support by the standard implementation:
|
|
|
|
* <b>Native serialized format</b> (CF_VIRTUALTREE and CF_VTREFERENCE), which is a compact form to exchange data between
|
|
Virtual Treeviews (also between applications). Two storage formats are available: HGlobal and IStream.
|
|
* <b>Plain ANSI text</b> string format.
|
|
* <b>Plain Unicode text</b> string format.
|
|
* <b>Rich Text (RTF)</b> string format (with Unicode text).
|
|
* <b>HTML text</b> string format (<b>UTF-8</b>). This is the preferred clipboard format for Word 2000 etc. and
|
|
allows copy and paste tree content to a word document with nearly no application code.
|
|
|
|
There is a registration scheme which allows descendants to specify and implement their own clipboard formats. Via a drop
|
|
handler the application can accept any OLE format without deriving an own tree class. In order to aid processing of the
|
|
native tree data specialized methods are implemented. See also: ProcessOLEData and ProcessDrop.<b>Dropmarks</b> show
|
|
during drag'n drop where data will be inserted. This works also with VCL drag'n drop. The drop target model has been
|
|
extended to allow <b>drop actions above, below or on a node</b>. Meanwhile vendors of other treeview controls have
|
|
started using this little but powerfull idea too.<b>Auto expand</b> of nodes which are the drop target for more than an
|
|
adjustable time interval is performed if enabled.
|
|
|
|
<table noborder>
|
|
<image Topaz> Header and columns
|
|
-------------- -------------------
|
|
</table>
|
|
|
|
* <b>Multiple columns</b> are supported by an own header implementation. This header takes up space in the non-client
|
|
area of the tree control and supports <b>various buttons styles</b> (standard listview thick buttons, flat buttons,
|
|
plates, Windows XP style and owner draw).
|
|
* Columns can <b>appear in every order</b> in the tree window.
|
|
* <b>Each column can be hidden</b> including the main column which holds the actual tree.
|
|
* <b>Each column</b> can become the <b>main column</b>.
|
|
* <b>Columns</b> can be shown also <b>without</b> the <b>header</b>.
|
|
* Columns can have <b>various options</b> (visible, clickable, resizable, draggable etc.).
|
|
* You can set <b>individual alignments</b> for each column as well as right-to-left or left-to-right <b>directionality</b>
|
|
(again: available also on non-middle-east and older Windows consumer systems).
|
|
* Each column can have an <b>own color</b>.
|
|
* The header as well as the columns collection class and the actual <b>column classes support streaming</b>. This is
|
|
independant from the treeview streaming.
|
|
* Each column can individually be customized by the application. An advance custom draw handling is implemented, which
|
|
allows for very sophisticated effects, including animations.
|
|
|
|
<table noborder>
|
|
<image Topaz> Check support
|
|
-------------- --------------
|
|
</table>
|
|
|
|
* <b>Each node</b> in the tree can have its <b>own check type</b>. This can either be <b>check box</b> (also tristate),
|
|
<b>radio button</b> or <b>node button</b>. These types can <b>freely be mixed</b> so you can for instance have a node
|
|
with 10 nodes of which 5 comprise a radio group (where only one of these 5 nodes can be checked) and the other 5 nodes
|
|
can have a check box (or no check type at all).
|
|
* Mixed (tri-state) <b>check boxes</b> with proper handling for <b>partial checking</b> of child nodes are
|
|
supported (as often used in install and backup programs).
|
|
* <b>Automatic state change propagation</b> for mixed check button type is possible (if enabled).
|
|
* Check events <b>OnChecking</b> and <b>OnCheck</b> events are supplied too.
|
|
* For special purposes a small <b>flat button</b> can be used, which is called a <b>node button</b>.
|
|
* <b>7 different</b> kinds of <b>check images</b> are possible. Dark and light check marks, dark and light tick marks,
|
|
flat check images, Windows XP style check images and application defined check images. For an overview see property
|
|
CheckImageKind.
|
|
|
|
<table noborder>
|
|
<image Topaz> Design time
|
|
-------------- ------------
|
|
</table>
|
|
|
|
* Virtual Treeview's properties and methods are registered with <b>Delphi categories</b> (Delphi 5 and BCB 5 or
|
|
higher).
|
|
* A special <b>property editor</b> for the <b>clipboard formats</b> is included which allows a simple format choice.
|
|
This is particularly important since the available clipboard formats must be given as strings and it is also quite handy
|
|
to have a list of available formats, even if they are not enabled yet (to know what can be enabled).
|
|
|
|
<table noborder>
|
|
<image Topaz> Customization
|
|
-------------- --------------
|
|
</table>
|
|
|
|
* <b>Custom draw and paint cycles</b> are supported via paint events (for the entire tree and for each node)
|
|
* Apart from the built-in check types a <b>user defined check image</b> can be used which is supported by a
|
|
separate image list.
|
|
* Each button in the header can be drawn individually.
|
|
* Three different lines styles are available: dotted lines, solid lines and application defined lines.
|
|
* Applications and descendants can provide their <b>own node editor</b> (which has not necessarily to be a single
|
|
control) by handling the OnCreateEditor event or overriding DoCreateEditor. This allows to completely replace node
|
|
editing by own (business) rules.
|
|
|
|
*
|
|
|
|
* Applications and descendants can provide their <b>own drag manager interface</b> by handling the
|
|
* OnCreateDragManager event or overriding DoCreateDragManager. This allows to customize the entire OLE drag handling of
|
|
the
|
|
* tree. Note: VCL drag'n drop is managed by the VCL so this cannot be customized.
|
|
* Applications and descendants can provide their <b>own data object interface</b> by handling the OnCreateDataObject
|
|
event or overriding DoCreateDataObject. This allows to provide own clipboard formats.
|
|
* There is registration function (RegisterVTClipboardFormat) which allows to register tree descendants with <b>own
|
|
clipboard and/or storage formats</b>. Applications get provide own clipboard formats (without deriving new tree classes)
|
|
by handling the GetUserClipboardFormats event.
|
|
* Applications and descendants can completely <b>modify the tree's key handling</b> by handling the OnKeyAction event
|
|
\or overriding DoKeyAction. This works also for incremental search.
|
|
* Applications and descendants can <b>customize the tree's background</b> which is not covered by nodes by handling the
|
|
OnPaintBackground event or overriding DoPaintBackground. For nodes there are further events for customization.
|
|
* Applications and descendants can <b>customize how the string tree shortens too long captions</b> by handling the
|
|
OnShortenString event or overriding DoShortenString.
|
|
|
|
<table noborder>
|
|
<image Topaz> Scrolling
|
|
-------------- ----------
|
|
</table>
|
|
|
|
* <b>Flat scroll bars</b> are supported. But since they conflict with Windows XP this support is switched off by a
|
|
compiler symbol (<b>UseFlatScrollbars</b>). Enable this symbol if you really want to use flat scroll bars before
|
|
compiling the tree unit.
|
|
* Every scroll operation triggers an OnScroll event. This allows to synchronize trees with other controls.
|
|
* There are properties (e.g. OffsetXY) which allow to scroll the tree content to any postion in code without sending
|
|
messages around.
|
|
|
|
<table noborder>
|
|
<image Topaz> Streaming
|
|
-------------- ----------
|
|
</table>
|
|
|
|
* <b>Sophisticated tree content serialization</b> has been implemented to allow saving and restoring a tree to/from
|
|
streams. This includes also user data as long as it can be written to a stream.
|
|
* Virtual Treeview allows also to <b>add data from stream</b> instead replacing the entire content.
|
|
* The internal format of the <b>stream is chunk based</b> which makes it very flexible for future enhancements but
|
|
still keeps compatibility with older implementations.
|
|
* There is a user chunk which takes data written to the stream in the OnSaveNode event. The data of this user chunk is
|
|
can be read in OnLoadNode.
|
|
|
|
<table noborder>
|
|
<image Topaz> Developer support
|
|
-------------- ------------------
|
|
</table>
|
|
|
|
* Special care has been taken to format the <b>source code</b> of Virtual Treeview <b>consistently</b>.
|
|
* A <b>large part</b> of the entire implementation are <b>comments</b> which describe the inner workings.
|
|
* Methods and properties are <b>consequently ordered alphabetically</b> within their scope (private, protected, public,
|
|
published). The only exception are the constructors and destructors which always appear at the top of the public section
|
|
in the class declaration and are always the first methods in the class implementation.
|
|
* For <b>every event</b> there is a <b>virtual method</b> which calls the event handler. This allows descendants to get
|
|
notice of <b>every</b> event without assigning a handler. The names of these methods correspond directly to the events by
|
|
using the pattern: Do<i>EventName</i>.
|
|
* Many measures have been taken to ensure <b>Borland C++ Builder compatibility</b>. This is particularly difficult
|
|
because the automatic translation from Delphi to C++ code in BCB is buggy.
|
|
* There is an easy and <b>powerfull mechanism</b> for descendants writers to allocate their <b>own data</b> on a <b>per
|
|
node</b> basis. Simply call AllocateInternalData to register your needs. This will not influence existing or future
|
|
application code if it consequently uses GetNodeData for user data access.
|
|
|
|
<table noborder>
|
|
<image Topaz> Editing
|
|
-------------- --------
|
|
</table>
|
|
|
|
* <b>Application defined editors</b> are supported via an edit link interface. A generic (non-Unicode) editor
|
|
implementation is available too.
|
|
* <b>Every column</b> in the tree is <b>editable</b> if enabled (see toExtendedFocus).
|
|
* By supporting the TNT controls library (see chapter Unicode above) it is also possible to have full Unicode editing
|
|
capabilities.
|
|
|
|
<table noborder>
|
|
<image Topaz> Utilities
|
|
-------------- ----------
|
|
</table>
|
|
For your convenience some of the internally used functions which are of general interest are exposed.
|
|
|
|
* <b>AlphaBlend</b>: a general purpose procedure to blend a source onto a target bitmap using several different modes.
|
|
* <b>DrawTextW</b>: a partial implementation of the DrawText API which supports Unicode. This method is not used on
|
|
Windows NT/2000/XP machines.
|
|
* <b>ShortenString</b>: a general purpose function which makes a given WideString fitting into a given space. This is
|
|
partially implemented by the Windows DrawText API but takes additionally care for right-to-left alignment and
|
|
works with Unicode also on Windows 95/98/Me.
|
|
|
|
<table>
|
|
\* Times given here are taken on a Windws XP professional system running on an Athlon 650 MHz with 256MB RAM. All
|
|
possible optimization were applied.
|
|
</table>
|