我这段程序为什么有的图标能取出来,而有的却取不出来,请各位大侠帮助诊断一下。(50分)

  • 主题发起人 主题发起人 HD_Copy
  • 开始时间 开始时间
H

HD_Copy

Unregistered / Unconfirmed
GUEST, unregistred user!
新建一工程,立即保存于某目录中<br>在Form1上放置ToolBar1,ImageList1,Button1三个控件,在ToolBar1上单击右键,选择New Button,<br>加一个按钮,并将ToolBar1-&gt;Images = ImageList1;然后在Button1的OnClick事件中加入如下代码:<br>void __fastcall TForm1::Button1Click(TObject *Sender)<br>{<br>&nbsp; TIcon* Icon = new TIcon;<br>&nbsp; TSHFileInfo SHFileInfo;<br>&nbsp; SHGetFileInfo("C://CONFIG.SYS", //this<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 0,<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &amp;SHFileInfo,<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; sizeof(SHFileInfo),<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; SHGFI_ICON|SHGFI_SMALLICON);<br>&nbsp; Icon-&gt;Handle = SHFileInfo.hIcon;<br>&nbsp; ImageList1-&gt;AddIcon(Icon);<br>&nbsp; delete Icon;<br>}<br><br>这样,在//this的地方加入任何文件的全路径名,运行程序,单击Button1,就会在工具栏的按钮上显示<br>这个文件的图标,可是有一个文件的图标却怎么也取不过来,我百思不得其解!<br>我的系统是Windows2000,开始 -&gt; 设置 -&gt; 网络和拨号连接,将其中的“新建连接”在别处建一个快捷<br>方式,然后将这个快捷方式的全路径名写在//this处,就显示不出图标,请问:怎么办呢?<br>
 
快捷方式没有图标,应是原文件的全路径名。
 
我的win2000可以哦:<br>&nbsp; SHGetFileInfo("C://Documents and Settings//Administrator//桌面//快捷方式 连接到 163.lnk", //this<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 0,<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &amp;SHFileInfo,<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; sizeof(SHFileInfo),<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; SHGFI_ICON|SHGFI_SMALLICON);<br><br>
 
注意后缀: .lnk &nbsp;也要啊
 
to Pipi.:<br>&nbsp; &nbsp;老大,那些我都知道啊。可是在我这里就是不行,显示出来的是那种未知类型文件<br>的图标,怎么回事?
 
检查 SHGetFileInfo 返回值,如果是0,那么 RaiseLastWin32Error() ,看看是什么错误
 
把你的全路径名,注意 // 改成 / 在命令行dir一下看是不是真的有这个文件名<br>命令行看到的文件名才是真的,窗口下看到的不是很真
 
to Pipi.:<br>&nbsp; &nbsp;先谢谢老大,我去看看
 
HD-copy你真牛,玩完Delphi又来玩bcb,哎~~~~。你也是不搞数据库的?嘿嘿。我也是。
 
to 花 儿:<br>&nbsp; &nbsp;老大,不要取笑我了!前几天在回答别人问题时说错了话,被一个高手说了一顿,<br>脸红啊!!本想从此卧薪尝胆,先离开大富翁,好好修练两个月,但静下心来一想,<br>不是高手,不能总不是高手,以我现在的水平,也不是在哪都只有当学生的份,该问<br>还得问啊,不要计较那么多了,以后还要向你请教啊。 :-)
 
我的可以取出来,也是win2000,奇怪
 
干脆,你把不能取出来的代码贴出来,让大家看看是不是有指误:)<br>有时候搞错了一点小小的,自己怎么也看不出来,别人一眼就看出来了:)
 
to Pipi.:<br>&nbsp; &nbsp;老大,还是不行啊! :-(<br>&nbsp; &nbsp;路径是不会错的,若路径错了,根本什么都不会显示,命令行下路径也没错,返回值<br>&nbsp; &nbsp;也不等于0<br>&nbsp; &nbsp;源码也没什么呀,就象我在题目中说的那样,那就贴出来吧,同时给老大寄去一份(4K)<br>&nbsp; &nbsp;帮我看看,谢谢!<br><br>//---------------------------------------------------------------------------<br><br>#include &lt;vcl.h&gt;<br>#pragma hdrstop<br><br>#include "Unit1.h"<br>//---------------------------------------------------------------------------<br>#pragma package(smart_init)<br>#pragma resource "*.dfm"<br>TForm1 *Form1;<br>//---------------------------------------------------------------------------<br>__fastcall TForm1::TForm1(TComponent* Owner)<br>&nbsp; &nbsp; &nbsp; &nbsp; : TForm(Owner)<br>{<br>}<br>//---------------------------------------------------------------------------<br><br>void __fastcall TForm1::Button1Click(TObject *Sender)<br>{<br>&nbsp; TIcon* Icon = new TIcon;<br>&nbsp; TSHFileInfo SHFileInfo;<br>&nbsp; SHGetFileInfo("C://MyTools//上网.lnk", //this<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 0,<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &amp;SHFileInfo,<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; sizeof(SHFileInfo),<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; SHGFI_ICON|SHGFI_SMALLICON);<br>&nbsp; Icon-&gt;Handle = SHFileInfo.hIcon;<br>&nbsp; ImageList1-&gt;AddIcon(Icon);<br>&nbsp; delete Icon;<br>}<br>//---------------------------------------------------------------------------<br>&nbsp;
 
真是奇怪,我的怎么试都没问题
 
HD_Copy<br>祝你成功!努力!
 
又弄了半天,还是不行,放弃了!我越发觉得是我机器芯片组驱动程序的事,或者说是机器硬件的问题,<br>因为我用一块小硬盘干干净净的装了一个Win2000,不行,又装NT4.0,也不行,这么地吧,唉......<br><br>感谢Pipi.老大的帮助,虽没解决,但提供了不少思路。<br>同时,也多谢花儿的热心鼓励,我在别的帖子中给你分数
 
接受答案了.
 
或者是win2000补丁的问题?我的是win2000 sp2
 
后退
顶部