呵呵呵,Firing_Sky 用delphi刚刚作了一个你可以找他
解决方案 »
- 学Delphi看啥书好呢?
- ◆◆◆◆ 求《Delphi 源代码分析》的光盘!我的光盘坏了!
- ***DBGridEH (EHLIB)有哪个属性可以设置Clumns 里的字母大小写
- N为整数,写个存储过程,算N的阶乘,要多少分给多少分,太急了。
- 有没有兄台知道TNmhttp接受数据时,有没有长度限制
- 哪里有免费的个人主页?
- 一个指针存取问题,100分!
- 急招Delphi程序员(杭州)
- delphi5 如何屏蔽dbgrid提示错误信息
- 菜鸟求助:怎么弹出打印对话框
- 为什么程序无缘无故的告诉我"驱动器中没有软盘,请插入软盘",十万火急!!!!!
- OCX中怎样对web发出转页的命令,好象在website中写的<a></a>?
若需要,请回复我!
取得扩展名:extractfileext();
取得关联图标:ExtractAssociatedIcon()
提取一个文件里面的图标:ExtractIcon() or ExtractIconEx()
要读取所有的系统已经注册的文件类型,只要搜索注册表中HKEY_CLASS_ROOT下所有以.开头的主键即可!
Uint ExtractIconEx(lpszFile:PAnsiChar;nIconIndex:integer;var LaregeIcon,SmallIcon:HICON;nIcons:UINT);
lpszFile:图标库的文件名;
nIconIndex:要读取的图标在图标库中的次序(从0开始编号);
LargeIcon、SmallIcon:如果读取成功时,图的句柄值;
Nicons:要读取的图标个数,通常设置为1;
该函数返回的值如果是0,表示读取失败。
要枚举一个图标库的所有图标,只要利用以上函数从读取序号0开始读取,1,2...直到函数返回值为0。这样就将所有图标全取出来了
但是存入ImageList后,16X16小图标显示效果不理想,到底是怎么回事?
用ExtractIconEx是可以提取图标库文件的所有图标,但怎么知道哪个文件是Windows系统的图标库文件,又怎么知道哪个图标又是对应什么扩展名呢?
to kingron:
用ExtractAssociatedIocn可以提取任何文件的图标,搜索注册表也可以得到所有已注册文件的扩展名,但ExtractAssociatedIocn中的参数需要指定具体的文件名,这样的话,要得到所有已注册的文件的图标,就不得不根据所得到的扩展名来找到一个相应的具体文件,这样一来,未免有点太麻烦了些吧,你说呢?
可能是我对相应的api函数不太熟,是否有这样的函数,它能根据文件的扩展名,直接找到相应的图标(好象是没有)。
我看过一些小软件,它们的功能是给Windows换肤的,其中就有给所有的某一类型的文件(例如.txt)换上一个统一的图标,我想如果完成这样一个功能的话,那么这个问题也应该可以解决了吧,不知我的思路对不对,希望大家指点,也希望对Windows比较熟悉的朋友说一些看法,大家交流交流!
function GetIconFromExt(ext:string;var filename:string;var index:integer):boolean;
var
reg:tregistry;
src:string;
begin
reg:=tregistry.create;
reg.RootKey:=hkey_classes_root;
result:=reg.OpenKey('.'+ext,false);
if result then
begin
src:=reg.ReadString('');
reg.CloseKey;
if reg.OpenKey(src+'\defaulticon',false) then
begin
src:=reg.ReadString('');
filename:=copy(src,0,pos(',',src)-1);
index:=strtoint((trim(copy(src,pos(',',src)+1,length(src)-pos(',',src)))));
end;
end;
reg.Free;
end;procedure TForm1.Button1Click(Sender: TObject);
var
filename:string;
index:integer;
begin
if geticonfromext(edit1.text,filename,index) then
begin
caption:=filename+','+inttostr(index);
image1.Picture.Icon.Handle:=extracticon(hinstance,pchar(filename),index);
end;
end;
var
FileInfo: TSHFileInfo;
Flags: Integer;
begin
FillChar(FileInfo, SizeOf(FileInfo), #0);
Flags := SHGFI_PIDL or SHGFI_SYSICONINDEX or SHGFI_ICON or SHGFI_IPENICON{或者 or SHGFI_LCARGEICON 或 or SHGFI_SMALLICON};
SHGetFileInfo(PChar(PIDL),
0,
FileInfo,
SizeOf(FileInfo),
Flags);
Result := FileInfo.iIcon;
end;
我对注册表不太熟悉,以至于你写的第一张帖子没能邻领悟上去,不好意思,看了你的例程后,又跟着F8了一下,才知道注册表那里是这么回事。非常感谢你的源程序,同时也感谢yangyun。
谢谢你们大家的参与,我感觉在这里探讨问题(虽然是一些小问题),还是蛮有氛围的,最起码大家的互助精神让我感觉到自己并不是孤单一人走在漫漫无涯的编程之路上。
你们的源代码相信也会给看到这个帖子的人一点启发(也许不仅仅是技术方面的)。
同时,也非常想同kingron等人交个朋友,有时间给我写封信吧,也许我也有些方面是你(你们)所不太熟悉的呢,呵呵,有学习才有进步吗!
my email: [email protected]
最后我还想问一下,%1 是否是通配符,只有 .exe 文件中才会出现吗?
不过,还是使用YangYun的方法简单一点儿。
有个问题我不知道如何去处理: HICON和TICON有什么不一样,
我用抓图标的API函数抓的是HICON,如何变成TICON?
大家谁有空帮着回答一下!