我不太懂你的意思,但我这儿有一遍相关的内容,供你参考:<br><br><br>大量的图标显示是Windows中的一大特色,丰富多彩的图标不仅美化了Windows的桌面,而且便于直观的操作,给用户带来了极大的方便。可以说在某种程度上,图标的地位已经超过了文件名的作用。 <br><br>但是,当我们用可视化编程工具进行Windows编程时,却很少有方便的方法来加载和显示图标。一般来说,在我们的应用程序中使用到图标资源时都是我们自己亲自绘制出来的。因此,在我们编的程序中使用到的图标是很有限的。我们知道Windows中有大量已知的系统图标,如文件夹的图标、磁盘驱动器的图标等等。熟悉Windows编程的朋友也许知道这些图标在Windows内部是有其特定的编号的,只要获取了这些编号就能够调用并显示对应的图标了。通过比较,我选择了Delphi中的ListView组件来显示图标,因为这种方法是最简单的。 <br><br>下面是一个例子,该程序在Delphi 4.0中编译通过。 <br><br>该演示程序可以显示各类Windows系统图标,包括文件图标、磁盘图标、文件夹图标、用户特定可执行文件图标(如:Delphi的火炬图标等等)。有趣的是,我们显示的这些图标没有一个需要我们自己亲自动手绘制。 <br><br>请先在Delphi环境下建立一个窗体Form1,并在Form1中添加一个按钮Button1和一个列表框ListView1;然后请设置ListView1的属性ViewStyle为vsIcon。 <br><br>最后不要忘了在“Object Inspector”中对事件处理过程赋予相应的方法。 <br><br><br>源程序清单: <br><br>unit Unit1; <br><br>interface <br><br>uses Windows, Messages, SysUtils, <br> Classes, Graphics, Controls, <br> Forms, Dialogs, ComCtrls, <br> StdCtrls, ShellAPI, ExtCtrls,ImgList; <br> type <br> TForm1 = class(TForm) <br> ListView1: TListView; <br> Button1: TButton; <br><br> procedure FormDestroy(Sender: TObject); <br> procedure FormCreate(Sender: TObject); <br> procedure Button1Click(Sender: TObject); <br><br> private <br> { Private declarations } <br> public <br> { Public declarations } <br> end; <br><br>const <br><br>Test='C:/'; <br>{ Test为测试数据,在本例中返回的是一个驱动器图标。<br>读者可以自行选择其他测试数据如:<br>Test:='C:/Autoexec.bat' 等等。} <br><br>var <br> Form1: TForm1; <br> ShFileInfo: TSHFILEINFO; <br><br>implementation <br><br>{$R *.DFM} <br><br>function GetFileIconIndex(FileName:string):integer; <br>{ 获取图标的序号函数 } <br>var <br> Ext:String; <br>begin <br> Ext:=FileName; <br> ShGetFileInfo(Pchar(Ext), 0, SHFileInfo,<br> SizeOf(SHFileInfo), SHGFI_LARGEICON or <br> SHGFI_SYSICONINDEX or SHGFI_TYPENAME); <br> Result:=SHFileInfo.iIcon; <br> {返回获取的图标序号 } <br>end; <br><br>procedure TForm1.FormCreate(Sender: TObject); <br>begin <br> with ListView1 do <br> begin <br> SmallImages:=TImageList.CreateSize(32,32); <br> SmallImages.ShareImages:=True; <br> SmallImages.Handle:=ShGetFileInfo('*.*',0, <br> SHFileInfo, SizeOf(SHFileInfo), <br> SHGFI_LARGEICON or <br> SHGFI_ICON or SHGFI_SYSICONINDEX); <br><br> LargeImages:=TImageList.CreateSize(32,32); <br> LargeImages.ShareImages:=True; <br> LargeImages.Handle:=ShGetFileInfo('*.*',0, <br> SHFileInfo, SizeOf(SHFileInfo), <br> SHGFI_LARGEICON or <br> SHGFI_ICON or SHGFI_SYSICONINDEX); <br> end;<br> {分配系统资源给ListView1组件以显示图标 } <br>end; <br><br>procedure TForm1.FormDestroy(Sender: TObject); <br>begin <br> ListView1.SmallImages.Free; <br> ListView1.LargeImages.Free; <br> {释放ListView1占用的系统资源 } <br>end; <br><br>procedure TForm1.Button1Click(Sender: TObject); <br>begin <br> ListView1.Items.Item[0]. <br> ImageIndex:=GetFileIconIndex(Test); <br> {为ListView1中的第一个项目绘制图标 } <br>end; <br><br>end. <br><br>以下程序在列表框中显示所有系统图标<br>procedure TForm1.Button3Click(Sender: TObject);<br>var i:integer;<br>begin<br> with listview1 do<br> begin<br> items.clear;<br> for i :=0 to smallimages.count-1 do<br> begin<br> items.add;<br> items.caption:=inttostr(i);<br> items.imageindex:=i;<br> end;<br> end;<br>end;<br><br>