我正在从标准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;
这是最好的解决方案吗?在没有可怕的节点级别调用的情况下,是否有更好的方法来获取基本图标的左上角?
答案 0 :(得分:9)
您的Kind: TVTImageKind
事件处理程序中有OnGetImageIndex
个参数。检查ikOverlay
并返回相应的图像索引。