如何在你的程序中使用系统图标

如何在你的程序中使用系统图标,第1张

uses shellapi

第一步取得系统的图标列表的句柄,将之赋予一个图像列表控件。

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里有么?


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12416874.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-25
下一篇 2023-05-25

发表评论

登录后才能评论

评论列表(0条)

保存