您需要分配(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