I'm converting a tree view from the standard TTreeView to use TVirtualStringTree. My final challenge is to implement a feature where I need to draw a 'pass/fail' status indicator on top of the known node icon. With TTreeView I used:
var
R : TRect;
begin
R := Node.DisplayRect( True );
StatusIconList.Draw( TreeView1.Canvas,
R.Left - StatusIconList.Width - 14,
R.Top,
3 {MyOverlayImageIndex} );
The result is the red cross over the basic icon as shown below:
With TVirtualStringTree I hoped to find either a better way, or to get better known positions for the required overlay icon position. I'm doing:
procedure DrawFailed;
var
R : TRect;
begin
R := CellRect;
StatusIconList.Draw( TargetCanvas,
R.Left - StatusIconList.Width + 49 + Sender.GetNodeLevel( Node ) * 16,
R.Top,
siiFailed );
end;
Is this the best solution? Is there a better way of getting the top/left corner of the basic icon without the horrible node level call?
You get Kind: TVTImageKind
parameter in your OnGetImageIndex
event handler. Check it for ikOverlay
and simply return the appropriate image index.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With