5

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

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

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

在此处输入图像描述

使用 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;

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

4

1 回答 1

9

您在事件处理程序中获取Kind: TVTImageKind参数。OnGetImageIndex检查它ikOverlay并简单地返回适当的图像索引。

于 2011-06-03T13:43:12.760 回答