添加小图标virtualtreeview(add small icon to virtualtree

2019-06-25 14:33发布

我试图小图标在delphi2010添加到VirtualTreeview使用属性图片我已经ImageList中连接到VirtualTreeview

procedure TMainFrm.VSTGetImageIndex(Sender: TBaseVirtualTree;
  Node: PVirtualNode; Kind: TVTImageKind; Column: TColumnIndex;
  var Ghosted: Boolean; var ImageIndex: Integer);
var
  FileInfo: PFileInfoRec;
begin
  if Kind in [ikNormal , ikSelected] then
  begin
    if Column = 0 then
    ImageIndex :=ImageList1.AddIcon(FileInfo.FileIco);
  end;
end;

但增加后的图标看起来太黑:

FileInfo的Strucutre(与方法记录)充满whene我加载文件,所以我需要的是刚刚从FileInfo的添加fileico到图像列表和树状显示

type
  PFileInfoRec= ^TFileInfoRec;
  TFileInfoRec = record
  strict private
    vFullPath: string;
      .
      .
      .
    vFileIco : TIcon;
  public
    constructor Create(const FilePath: string);
    property FullPath: string read vFullPath;
      .
      .
      .
    property FileIco : TIcon  read vFileIco;
  end;

构造函数:

constructor TFileInfoRec.Create(const FilePath: string);
var
  FileInfo: SHFILEINFO;
begin
  vFullPath := FilePath;
    .
    .
    .
  vFileIco        := TIcon.Create;
  vFileIco.Handle := FileInfo.hIcon;
//  vFileIco.Free;
end;

所以哪里是probleme? ! 谢谢

Answer 1:

让我们的图像列表ImageList1并将其分配给VirtualStringTree1.Images财产。 然后加入到以前的评论者,可以使用之前FileInfo ,分配的东西给它,如: FileInfo := Sender.GetNodeData(Node) ,比你可以使用FileInfo.FileIco 。 但你应该你的图标添加到ImageList不在OnGetImageIndex 。 你应该这样做在OnInitNode(如果按照虚拟模式,你应该做的),比存储在FileInfo中添加图标的索引。 例:

procedure TForm1.VirtualStringTree1InitNode(Sender: TBaseVirtualTree;
  ParentNode, Node: PVirtualNode; var InitialStates: TVirtualNodeInitStates);
var
  FileInfo: PFileInfoRec;
begin
  FileInfo := Sender.GetNodeData(Node);
  //...
  FileInfo.FileIcoIndex := ImageList1.AddIcon(FileInfo.FileIco);

end;

onGetImageIndex

procedure TMainFrm.VSTGetImageIndex(Sender: TBaseVirtualTree;
  Node: PVirtualNode; Kind: TVTImageKind; Column: TColumnIndex;
  var Ghosted: Boolean; var ImageIndex: Integer);
var
  FileInfo: PFileInfoRec;
begin
  FileInfo := Sender.GetNodeData(Node);
  if Kind in [ikNormal , ikSelected] then
  begin
    if Column = 0 then
    ImageIndex :=FileInfo.FileIcoIndex;
  end;
end;

如果这是不够的,请发布更多示例代码,让我们认识了你的问题。



文章来源: add small icon to virtualtreeview