Stage \Description Comments
----------------- ----------------------------- ------------------------------------------------------------------------------------------
before paint This stage is entered only This stage is typically used to do any further setup of the target canvas of the paint
\once per paint cycle. After \operation (e.g. the window or a printer canvas), like changing the mapping mode or
setting the vsPainting state setting another clipping region. Since the passed canvas is not directly used to do the
it is the very first actual painting setting its font or colors has no effect. Basically only properties which
instruction in a cycle. affect blitting a bitmap to the target canvas have an effect at all.
before item This stage is entered once In the event for this stage you can tell the tree whether you want to paint the node
paint per node to be drawn and entirely on your own or let the tree paint it. As this happens on a per node basis it is
allows directly to control the perfect place to maintain a special layout without doing everything in the paint
the path which is the taken cycle. Note: setting the CustomDraw parameter in the event to True will skip the node
to paint the node. entirely, without painting anything of the standard things like tree lines, button,
images or erasing the background. Hence to display any useful information for the node do
it in the OnBeforeItemPaint event.
This is the first stage which gets the double buffer canvas which is used to draw a node
so if you want to set special properties this is a good opportunity. Keep in mind though
that in particular the colors are set by the tree according to specific rules (focus,
selection etc.).
before item This stage is also entered This stage and its associated event is usually used to give the node a different
erase \only once per node and background color or erase the background with a special pattern which is different to
allows to customize the what the tree would draw.
node's background.
after item erase This stage is also entered This stage and its associated event is used to do additional drawings after the
\only once per node. background has been erased.
before cell This paint stage is the While internally a full setup for this node happened before the stage is entered (if it
paint first of the cell specific is the first run) the only noticeable effect for the application which has changed
stages used to customize a compared to after item erase is that the painting is limited to the current
single cell of a node and is column. There are still no lines or images painted yet.
called several times per
node, depending on the
number of columns. If no
columns are used then it is
called once.
\on paint text After default stuff like Because Virtual Treeview does not know how to draw the content of a node it delegates
lines and images has been this drawing to a virtual method called DoPaintNode. Descendants override this method and
painted the paint node/paint do whatever is appropriate. For instance TVirtualDrawTree simply triggers its OnDrawNode
text stage is entered. event while the TVirtualStringTree prepares the target canvas and allows the application
to override some or all canvas settings (font etc.) by triggering OnPaintText. After this
event returned the text/caption of the node is drawn. Changed font properties are taken
into account when aligning and painting the text.
Note: The string tree triggers the OnGetText event two times if toShowStaticText
is enabled in the TVirtualStringTree.TreeOptions.StringOptions property. Once for the
normal text and once for the static text. Use the event's parameter to find out what is
required.
after cell paint This stage is entered This stage can be used to add whatever you like to a single cell after everything has
immediately after the cell been painted there and is triggered once per column.
is drawn.
after item paint This stage is entered after The after item paint stage is used to add node specific stuff like frames and the like
all cells of an item are which concern all columns of that node and is called once per node.
drawn.
after paint The after paint stage is the In this stage everything of the tree (related to the current update area) has been drawn,
last stage in the long chain including the selection rectangle.
\of paint stages and is
entered after when paint
cycle is complete.
Summary
The most complex process in Virtual Treeview is without doubts its painting. Read here what stages Virtual Treeview
enters during paint and how you can customize this process.