如何最好地在基本Delphi TVirtualTreeView节点图标上呈现叠加图标

时间:2011-06-03 13:22:36

标签: delphi icons overlay virtualtreeview tvirtualstringtree

我正在从标准TTreeView转换树视图以使用TVirtualStringTree。我最后的挑战是实现一个功能,我需要在已知节点图标的顶部绘制“通过/失败”状态指示器。使用TTreeView我使用:

  var
   R : TRect;
  begin
    R := Node.DisplayRect( True );
    StatusIconList.Draw( TreeView1.Canvas,
                         R.Left - StatusIconList.Width - 14,
                         R.Top,
                         3 {MyOverlayImageIndex} );

结果是基本图标上的红叉,如下所示:

enter image description here

使用TVirtualStringTree,我希望找到更好的方法,或者为所需的叠加图标位置获得更好的已知位置。我在做:

   procedure DrawFailed;
    var
     R : TRect;
    begin
      R := CellRect;
      StatusIconList.Draw( TargetCanvas,
                           R.Left - StatusIconList.Width + 49 + Sender.GetNodeLevel( Node ) * 16,
                           R.Top,
                           siiFailed );
    end;

这是最好的解决方案吗?在没有可怕的节点级别调用的情况下,是否有更好的方法来获取基本图标的左上角?

1 个答案:

答案 0 :(得分:9)

您的Kind: TVTImageKind事件处理程序中有OnGetImageIndex个参数。检查ikOverlay并返回相应的图像索引。