i am trying to add small icon to VirtualTreeview in delphi2010 i have ImageList attached to VirtualTreeview using the property images
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;
but after adding the icons look too dark:
FileInfo Strucutre (Record with methods) filled whene i load the files so what i need is just to add the fileico from fileinfo to imagelist and display in treeview
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;
the constructor:
constructor TFileInfoRec.Create(const FilePath: string);
var
FileInfo: SHFILEINFO;
begin
vFullPath := FilePath;
.
.
.
vFileIco := TIcon.Create;
vFileIco.Handle := FileInfo.hIcon;
// vFileIco.Free;
end;
so where is the probleme ? ! thanks
Let's have an image list ImageList1
and assign it to VirtualStringTree1.Images
property. Then joining to the previous commenters, before you use FileInfo
, assign something to it, like: FileInfo := Sender.GetNodeData(Node)
, than you can use FileInfo.FileIco
. But you should add your icon to the imagelist not in the OnGetImageIndex
. You should do it in OnInitNode (if you follow the virtual paradigm, what you should do), than store the index of the added icon in FileInfo. example:
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;
than in 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;
If it's not adequate, please post more sample code, to enlighten us about your problem.
来源:https://stackoverflow.com/questions/11098822/add-small-icon-to-virtualtreeview