Also der VST ruft die GetImageIndex Funktion jeweils 2x für jede Node auf. Das erste mal mit ikNormal und das zweite Mal mit ikOverlay. So funktioniert es nun:
Delphi-Quellcode:
procedure TfrmFileManager.vtFileListGetImageIndex(Sender: TBaseVirtualTree;
Node: PVirtualNode; Kind: TVTImageKind; Column: TColumnIndex;
var Ghosted: Boolean; var ImageIndex: Integer);
var
NodeData: PFileNodeData;
begin
if (Kind = ikOverlay) or (Column <> 0) then Exit;
NodeData := vtFileList.GetNodeData(Node);
if Assigned(NodeData) then
begin
ImageIndex := NodeData^.ImageIndex;
end;
end;
Vorher hatte ich nur die erste Zeile weggelassen. Das Komische ist, dass auch im Overlay Call der ImageIndex korrekt gesetzt wird. Das normale Icon wird dann allerdings komplett mit clWindow übermalt. Mir als Benutzer des VST erscheint dieses Verhalten auch eher ungewollt. Zumindest erkenne ich keine Logik dahinter.