新手看招:Delphi编程中使用动态图标
在应用程序的编写中,通常使用组合框、列表框等常用组件不仅显示字符,还显示与字符相关的图标。在一般的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()无法获取“我的电脑”等虚拟文件夹的信息。
0条评论