开发者

How best to render an overlay icon on top of basic Delphi TVirtualTreeView node icon

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:

How best to render an overlay icon on top of basic Delphi TVirtualTreeView node icon

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.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜