procedure GetSystemImageList(imagelist:TImageList)varSysIL: THandle
SFI: TSHFileInfobegin// 取小图标,如果将SHGFI_SMALLICON替换成
//SHGFI_LARGEICON则表示取大图桥蚂标
SysIL := SHGetFileInfo('', 0, SFI, SizeOf(SFI),
SHGFI_SYSICONINDEX or SHGFI_SMALLICON)
if SysIL <0 then begin
//将imagelist的图像列表句柄指向系统图像句柄
imagelist.Handle := SysIL
//防止组件释放时释放图像句柄,很重要
imagelist.ShareImages := TRUEendend第二步取得要处理文件的图标索引
//取一个文件的图颤局标索引茄消让
方法1:文件类型关联到本地的图标。方法2:获取目标机器上的图标,传回本地。
方法2涉及到文件列表和图标列表的对应关系,文件的传输,imagelist图标文件的保存与加载。
...
方法1的简单代码:
Unit Unit1
Interface
Uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ComCtrls, ImgList
Type
TForm1 = Class(TForm)
ImageList1: TImageList
ListView1: TListView
Procedure FormCreate(Sender: TObject)
Private
Function ShowFileList(alist: TStrings): Boolean
Public
End
Var
Form1: TForm1
Implementation
Uses ShellAPI
{$R *.dfm}
{根据文件(或者后缀没胡汪枯仔)得到文件图标句柄}
//完整的文件路径才可得到实际的图标,只有文件名含后缀 可得到通用的做颤图标。
Function File_Get_OpenIcon(Const afile: StringSmallIcon: Boolean): HICON
Var
ShFileInfo: TShFileInfo
IconType: Integer
Begin
If SmallIcon Then
IconType := SHGFI_SMALLICON
Else
IconType := SHGFI_LARGEICON
ShGetFileInfo(PChar(afile), 0, ShFileInfo, SizeOf(TShFileInfo),
IconType Or SHGFI_USEFILEATTRIBUTES Or SHGFI_ICON)
Result := ShFileInfo.hIcon
End
Procedure TForm1.FormCreate(Sender: TObject)
Var
alist: TStringList
Begin
alist := TStringList.Create
Try
//文件列表
alist.Add('aaa.txt')
alist.Add('bbb.doc')
alist.Add('ccc.exe')
ShowFileList(alist)//显示文件
Finally
alist.Clear
alist.Free
End
End
Function TForm1.ShowFileList(alist: TStrings): Boolean//显示文件
Var
aICON: TICON
aFile: String
Begin
With ImageList1 Do //使用32×32的图标
Begin
Clear
BkColor := clwhite
Width := 32
Height := 32
End
With ListView1 Do
Begin
LargeImages := ImageList1
ViewStyle := vsIcon
Items.BeginUpdate
Items.Clear
End
aICON := TICON.Create
Try
While alist.Count <>0 Do
Begin
afile := alist[0]
alist.Delete(0)
With ListView1.Items.Add Do
Begin
caption := aFile
aICON.Handle := File_Get_OpenIcon(aFile, False)
ImageIndex := ImageList1.AddIcon(aICON)
End
End
Finally
aICON.Free
ListView1.Items.EndUpdate
End
Result := True
End
End.
完全可以啊。但你得先知道图标文件的路径,然后把它们加入到自己告族猜的项目中。**********************
全给你调用系统的穗漏了,有没想过如何跨平台?这个袜型图标在WIN7 里有,在XP里有么?在WIN2000里有么?
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)