TVirtualStringTree displays double images after update from 5.3 to 7.4

447 views Asked by At

After upgrading TVirtualStringTree from version 5.3 to version 7.4 I am getting 2 images on each node.

enter image description here

The OnGetImageIndex event is pretty straightforward :

procedure TvTreeControl.vTreeGetImageIndex(Sender: TBaseVirtualTree; Node: PVirtualNode; Kind: TVTImageKind; Column: TColumnIndex; var Ghosted: Boolean; var ImageIndex: Integer);
var pNode  : PNodeRec;
begin
     ImageIndex := -1;
     if Assigned(Node) then
          begin
          pNode  := Sender.GetNodeData( Node);
          if pNode.NodeData <> NIL then
               ImageIndex := pNode.NodeData.ImageIndex;
          end;
end; 

Any suggestions or ideas on what to look for would be greatly appreciated.

1

There are 1 answers

3
sbayli On

I am not completely sure why, but this code fixes the issue.:

procedure TvTreeControl.vTreeGetImageIndex(Sender: TBaseVirtualTree; Node: PVirtualNode; Kind: TVTImageKind; Column: TColumnIndex; var Ghosted: Boolean; var ImageIndex: Integer);
        var pNode  : PNodeRec;
        begin
             ImageIndex := -1;
             if Assigned(Node) then
                  begin
                  pNode  := Sender.GetNodeData( Node);
                  if pNode.NodeData <> NIL then
                       begin
                       if Kind <> ikState then
                            ImageIndex := pNode.NodeData.ImageIndex;
                       end;
                  end;
        end;

Skipping the ImageIndex assignment when Kind = ikState prevents the second image from showing up. This was not necessary in the earlier version.