【发布时间】:2012-06-25 14:03:39
【问题描述】:
这是我将文件名及其关联图标添加到 virtualtreeview 的简单代码
PFileInfoRec = ^TFileInfoRec;
TFileInfoRec = record
strict private
vFullPath: string;
vFileName: string;
vFileIcon: hIcon;
public
constructor Create(const FullPath: string);
property FullPath: string read vFullPath;
property FileNam : string read vFileName;
property FileIcon: hIcon read vFileIcon;
end;
在我使用 shGetFileInfo Api 获得图标句柄后
procedure TMainFrm.VSTGetImageIndex(Sender: TBaseVirtualTree;
Node: PVirtualNode; Kind: TVTImageKind; Column: TColumnIndex;
var Ghosted: Boolean; var ImageIndex: Integer);
var
FileInfo: PFileInfoRec;
Icon: TIcon;
begin
FileInfo := Sender.GetNodeData(Node);
Icon := TIcon.Create;
try
Icon.Handle := FileInfo.FileIcon;
if Kind in [ikNormal , ikSelected] then
begin
if Column = 1 then ImageIndex := ImageList.AddIcon(Icon);
end;
finally
Icon.Free; //here the probelme
end;
end;
删除 Icon.Free 时让我感到困惑的是什么;代码工作正常文件添加了图标 但是当免费的 TIcon 对象添加图标失败!任何人向我解释 这段代码有什么问题??
提前感谢您的帮助...
【问题讨论】:
-
@S.FATEH,首先,VirtualTreeView 不需要
class record,除非您具有需要记录构造函数和属性的特定功能。您需要一个简单的packed record。其次,在设计时将那个图标加载到TImageList,然后在运行时只在OnGetImageIndex中设置它的ImageIndex。其他都不需要。 -
我错过了“使用 shGetFileInfo 获取图标句柄”部分。您应该在应用程序启动时将所需的图像加载到
TImageList。然后将vFileIcon字段设置为Integer,并将其设置为指向该文件对应图像的Index。最后,在OnGetImageIndex中使用 vFileIcon 来告诉 VirtualTreeView 为该文件显示哪个图标。基本上,您需要检查您的逻辑,因为必须以特定方式使用 VirtualTreeView。 -
LightBulb 这正是我所做的记录在另一个单元中,是的,还有另一个功能,我在上面添加的代码用于说明,对不起我的床英语:)...
标签: delphi icons virtualtreeview