新手看招:Delphi编程中使用动态图标

新手看招:Delphi编程中使用动态图标,第1张

新手看招:Delphi编程中使用动态图标,第2张

在应用程序的编写中,通常使用组合框、列表框等常用组件不仅显示字符,还显示与字符相关的图标。在一般的Windows应用程序中,这些图标的显示会随着列出的显示文本而变化。例如,当组合框中列出当前目录下的所有文件时,与文件名相关联的图标会显示在组合框的左侧,这称为动态图标。在Delphi中使用动态图标的步骤如下:

第一,图标的获取

要使用动态图标,首先要解决的是如何获取显示文本和与之关联的图标句柄。这个图标是系统注册表通过文件关联确定的,同一个文件(或者子目录,或者文件夹)在Windows编程中桌面上可能有两种显示结果,分别是DOS文件名和显示名。如果我们的应用程序不需要具有与Windows资源管理器相同的效果,我们可以使用FindFirst()和FindNext()函数以及FindClose()过程来获取DOS文件名,否则我们应该使用WindowSAPI来获取显示名称。在获取文件名时,可以通过使用ShellAPI.pas中的SHGetFileInfo()函数来获取它的图标句柄HICON,如下所示:

函数SHGetFileInfo(PSZ path:pansi char;dwfile attributes:DWORD;var psfi:TSH fileinfo;cbFileInfo,u flags:UINT):DWORDl;

PszPath参数:指定的文件名。当uFlags的值不包含SHGFI_PIDL时,可以直接指定;否则会计算pszPath,不能直接指定;

DwFileAttributes参数:文件属性,只有当uFlags的值包含SHGFI_USEFILEATTRIBUTES时才有效,一般不使用该参数;

Psfi参数:返回获取的文件信息,是一种记录类型,有以下字段:

hIcon:hIcon;//文件的图标句柄

iIcon:整数;//图标的系统索引号

dw attributes:DWORD;//文件的属性值

szDisplayName: array [0..AnsiChar的MAX _ PATH-1];//文件的显示名称

szTypeName:数组[0..79]的AnsiChar//文件的类型名

CbFileInfo参数:psfi的位值;

UFlags参数:表示要返回的文件信息标识符。以下是常用的常量:

SHGFI _ ICON//获取图标

SHGFI _ DISPLAYNAME//获取显示名称

SHGFI _ TYPENAME//获取类型名称

SHGFI _ ATTRIBUTES//获取属性

SHGFI _ LARGEICON//获取大图标

SHGFI _ SMALLICON//获取小图标

SHGFI _ PIDL;// pszPath是一个标识符。

函数SHGetFileInfo()的返回值也随着uFlags的值而变化。通过调用SHGetFileInfo(),可以通过psfi参数获取文件的图标句柄,但需要注意的是,当uFlags参数中没有使用SHGFI_PIDL时,SHGetFileInfo()无法获取“我的电脑”等虚拟文件夹的信息。

位律师回复
DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
白度搜_经验知识百科全书 » 新手看招:Delphi编程中使用动态图标

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情