我的代码如下:var
str:TStrings;
strs:PChar;
i:Integer;
Flag: Integer;
info: TSHFILEINFO;
Icon: TIcon;
begin
strs:=rm_list;
str:=TStringList.Create;
ExtractStrings(['/'],[' '],strs,str);
for i:=0 to str.Count-1 do
begin
rm_diskview.SmallImages := ImageList1;
Icon := TIcon.Create;
form1.rm_diskview.Items.Add; //添加内容
Form1.rm_diskview.Items[Form1.rm_diskview.Items.Count-1].Caption:=str[i];
Flag := (SHGFI_DISPLAYNAME or SHGFI_TYPENAME or SHGFI_SMALLICON or SHGFI_ICON );
SHGetFileInfo(Pchar('C:\'+str[i]), 0, info, Sizeof(info), Flag);
Icon.Handle := info.hIcon;
Form1.ImageList1.AddIcon(Icon);
Form1.rm_diskview.Items[Form1.rm_diskview.Items.Count-1].ImageIndex := Form1.ImageList1.Count - 1;
end;
end;
以上代码其中我把flag变成:Flag := (SHGFI_DISPLAYNAME or SHGFI_TYPENAME or SHGFI_SMALLICON or SHGFI_ICON or SHGFI_USEFILEATTRIBUTES );的时候,就会显示本地文件类型的图标,如txt.exe.rar,但是无法显示文件夹的图标。
可是如果不加SHGFI_USEFILEATTRIBUTES的时候就只显示文件夹的图标,本地类型的图标也变成文件夹的图标了,请问各位,这是怎么回事?该如何去做呢?by the way在listview中,大图标与小图标如何切换?第一个问题是最重要的,谢谢各位了!!!又答案就结贴给分!!!
str:TStrings;
strs:PChar;
i:Integer;
Flag: Integer;
info: TSHFILEINFO;
Icon: TIcon;
begin
strs:=rm_list;
str:=TStringList.Create;
ExtractStrings(['/'],[' '],strs,str);
for i:=0 to str.Count-1 do
begin
rm_diskview.SmallImages := ImageList1;
Icon := TIcon.Create;
form1.rm_diskview.Items.Add; //添加内容
Form1.rm_diskview.Items[Form1.rm_diskview.Items.Count-1].Caption:=str[i];
Flag := (SHGFI_DISPLAYNAME or SHGFI_TYPENAME or SHGFI_SMALLICON or SHGFI_ICON );
SHGetFileInfo(Pchar('C:\'+str[i]), 0, info, Sizeof(info), Flag);
Icon.Handle := info.hIcon;
Form1.ImageList1.AddIcon(Icon);
Form1.rm_diskview.Items[Form1.rm_diskview.Items.Count-1].ImageIndex := Form1.ImageList1.Count - 1;
end;
end;
以上代码其中我把flag变成:Flag := (SHGFI_DISPLAYNAME or SHGFI_TYPENAME or SHGFI_SMALLICON or SHGFI_ICON or SHGFI_USEFILEATTRIBUTES );的时候,就会显示本地文件类型的图标,如txt.exe.rar,但是无法显示文件夹的图标。
可是如果不加SHGFI_USEFILEATTRIBUTES的时候就只显示文件夹的图标,本地类型的图标也变成文件夹的图标了,请问各位,这是怎么回事?该如何去做呢?by the way在listview中,大图标与小图标如何切换?第一个问题是最重要的,谢谢各位了!!!又答案就结贴给分!!!
解决方案 »
- 帮忙看一下,怎么解决?
- 睡眠与养生[转载]
- 求助: ini 文件 怎么删除小节里的 关键字 ? 谢谢!
- fastreport 报表问题
- 如何在程序内实现是如下步骤:控制面版-》打印机-》默认打印机(如:Epson LQ-1600K)-》属性,也就是说打开系统默认打印机的属性???
- 如何将EXE不加参数,如普通程序,而加一个命令行参数,则以服务运行
- 在dbgrid中动态设置字段的问题
- 小弟急呀!如何进行小票打印呀!!!请大家帮帮忙了!
- 將CachedUpdates設為true,怎樣利用事務更新數據庫
- GAUGE控件如何应用。
- 只有强迫才能行吗?
- activeform开发的问题:程序需要的文件怎么处理呢?
function GetFileIconByExt(const ExtName:string;SmallIcon:boolean):HICON;
var
sinfo: SHFILEINFO;
sFlag: INTEGER;
begin
ZeroMemory(@sinfo, sizeof(sinfo));
if smallicon then
sflag:=( SHGFI_USEFILEATTRIBUTES or SHGFI_SMAllICON or SHGFI_ICON)
else
sflag:=( SHGFI_USEFILEATTRIBUTES or SHGFI_LARGEICON or SHGFI_ICON);
SHGetFileInfo(pchar(ExtName), FILE_ATTRIBUTE_NORMAL,sinfo,sizeof(sinfo), sflag);
Result := sinfo.hIcon; //返回ICON的指针
end;function TFmain.GetIconIndexByImageList(ExtName:string):integer;
var
i:integer;
begin
for i:=5 to ExtList.Count-1 do
if ExtName=Extlist[i] then
begin
result:=i;
break;
exit;
end;
ImageList_AddIcon(self.FileSmallIcons.Handle,GetFileIconByExt(ExtName,true));
ImageList_AddIcon(FileIcons.Handle,GetFileIconByExt(ExtName,false));
ExtList.Add(ExtName);
result:=ExtList.Count-1;
end;