您需要分配(16×16你的情况)TImageList
到TVirtualStringTree.Images
属性,那么处理事件OnGetImageIndex
例如:
procedure TForm1.VirtualStringTree1GetImageIndex(Sender: TBaseVirtualTree;
Node: PVirtualNode; Kind: TVTImageKind; Column: TColumnIndex;
var Ghosted: Boolean; var ImageIndex: Integer);
var
NodeRec: PNodeRec;
begin
NodeRec := Sender.GetNodeData(Node);
if Assigned(NodeRec) then
begin
if (Column = 1) then
begin
if Kind in [ikNormal, ikSelected] then
begin
case NodeRec.Status of // check the needed status(es)
1: ImageIndex := 1; // whichever image you need
2: ImageIndex := 2; // whichever image you need
// ...
end;
end;
end;
end;
end;
上午我在尺寸有限的图片,也可以是不是图标更大? 如果是的话,我是否需要更改任何设置调整每个 行的高度(如果可能)
不知道你的什么意思,因为你说你需要一个16×16的图像。您可以使用OnGetImageIndexEx
,如果您需要不同的图像列表可能具有不同的尺寸。对于可变高度,您可以在TreeOptions.MiscOptions
中设置toVariableNodeHeight
并处理OnMeasureItem
事件。另一种将图形绘制到VTV画布上的方法是例如处理OnBeforeItemPaint
/OnAfterItemPaint
。
我的问题可能不是很清楚。我希望节点在特定列内的节点级显示。我编辑了这个问题来反映这一点。 – Ashlar
已添加程序代码 – Ashlar
我尝试添加if kind ...行,但仍未看到图标。我还在GIMIMageIndex的开头部署了一个showmessage,发现它在创建节点期间没有被调用,只有当程序运行时我将鼠标移动到节点中。 – Ashlar