为了正常的体验网站,请在浏览器设置里面开启Javascript功能!
首页 > delphi 动态获取文件类型的图标

delphi 动态获取文件类型的图标

2018-07-14 5页 doc 22KB 20阅读

用户头像

is_721103

暂无简介

举报
delphi 动态获取文件类型的图标delphi 动态获取文件类型的图标 在应用程序的编写中,组合框(ComboBox)、列表框(ListBox)、等常见的部件,通常不仅要用于显示文字,而且还要显示其与文字相关的图标。在一般的Windows应用程序中,这些图标的显示都要随列出的显示文本的变化而变化,例如在组合框中列出当前目录下的所有文件时,在组合框左边就显示与文件名相关联的图标,这就是所谓的动态图标。在 Delphi中使用动态图标的步骤如下: 一、图标的获取 要使用动态图标,首先要解决的是如何获得显示文本和与其相关联的图标句柄。该图标通过文件关联由系统注册...
delphi 动态获取文件类型的图标
delphi 动态获取文件类型的图标 在应用程序的编写中,组合框(ComboBox)、列框(ListBox)、等常见的部件,通常不仅要用于显示文字,而且还要显示其与文字相关的图标。在一般的Windows应用程序中,这些图标的显示都要随列出的显示文本的变化而变化,例如在组合框中列出当前下的所有文件时,在组合框左边就显示与文件名相关联的图标,这就是所谓的动态图标。在 Delphi中使用动态图标的步骤如下: 一、图标的获取 要使用动态图标,首先要解决的是如何获得显示文本和与其相关联的图标句柄。该图标通过文件关联由系统注册表决定,并且在Windows编程中同一文件 (或子目录,或文件夹)在桌面上也可能有两种显示结果,这就是DOS文件名与显示名(Display Name)。如果我们的应用程序不需要有像Windows资源浏览器那样的效果,则可以使用FindFirst()和FindNext()二个函数以及 FindClose()过程来获得DOS文件名,否则我们就应当使用WindowsAPI来获 得显示名。在获得文件名的同时可通过使用 ShellAPI.pas中的SHGetFileInfo()函数来获得其图标句柄HICON,说明如下: function SHGetFileInfo(pszPath: PAnsiChar; dwFileAttributes: DWORD;var psfi: TSHFileInfo; cbFileInfo,uFlags: UINT): DWORDl; pszPath 参数:指定的文件名。当uFlags的取值中不包含 SHGFI_PIDL时,可直接指定;否则pszPath要通过计算获得,不能直接指定; dwFileAttributes参数:文件属性,仅当uFlags的取值中包含SHGFI_USEFILEATTRIBUTES时有效,一般不用此参数; psfi 参数:返回获得的文件信息,是一个记录类型,有以下字段: hIcon: HICON; //文件的图标句柄 iIcon: Integer; //图标的系统索引号 dwAttributes: DWORD; //文件的属性值 szDisplayName: array [0..MAX_PATH,1] of AnsiChar; //文件的显示名 szTypeName: array [0..79] of 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()不能获得"我的电脑"等虚似文件夹的信息。 二、图标的加载 使用Delphi提供的TImageList组件,通过调用CommCtrl .pas中的函数ImageList_AddIcon()来加载得到的图标,并要保证其索引号与显示文本相对应。说明如下: function ImageList_AddIcon(ImageList: HIMAGELIST; //加载图标的ImageList句柄 Icon: Hicon //加载的图标句柄 ): Integer; //返回图标在ImageList中的索引号 在需要指明图标索引号时可使用ImageList_AddIcon()的返回值。 三、图标和文本的绘图式输出 对于组合框、列表框等不能直接显示图标的组件,由于显示图标的同时又要同时显示文本,可通过设置其相应的Style属性达到目的,示例如下: 组合框:ComboBox1.Style:=csOwnerDrawVariable根据实际使用经验最好不要在ObjectInspector窗体中直接设置,而应将代码添加在程序的适当位置,否则可能出现绘图区域高度不规则变化 列表框:ListBox1.Style:=lbOwnerDrawVariable 状态栏:StatusBar1.Panels[i].Style:= psOwnerDraw 不能使用简单状态栏,i是状态栏中要绘制图标的某一窗格索引号,图形输出可使用TImageList的ImageList1.Draw(),而文本输出则可使用TCanvas的TextOut()方法,它由组件的Canvas属性继承得到,显然没有Canvas属性的组件不能使用此方法显示图标。 对于可直接显示图标的组件,直接指定其Images、StateImages等需要的图标属性为相应的TimageList组件名,并通过指定图标的索引号则可显示图标。需要注意的是:在使用大图标时,必须先调用TImageList的CreateSize()方法指定可加载图标的尺寸,并且在每次调用 TImageList的Clear方法后都要重新调用CreateSize()。 使用TImageList的ImageList1.Clear方法清除已加载的图标,常在需要刷新时使用。 这种方法只是取扩展名所示文件的图标,完全完全不需要文件存在!!!! procedure TForm1.FormCreate(Sender: TObject); var FileInfo: TSHFileInfo; begin //取得小图标集句柄 S_ImageListHandle := SHGetFileInfo('C:\',0,FileInfo, SizeOf(FileInfo),SHGFI_SYSICONINDEX or SHGFI_SMALLICON); //将小图标集句柄指给列表 SendMessage(Listview1.Handle, LVM_SETIMAGELIST, LVSIL_SMALL, S_ImageListHandle); end; 使用的时候: ListItem:=ListView1.Items.Add; FillChar(FileInfo, SizeOf(FileInfo), #0); if Ty='' then //取目录图标 SHGetFileInfo(Pchar(extractfilepath(application.ExeName )),0,FileInfo,sizeof(FileInfo), SHGFI_SYSICONINDEX or SHGFI_SMALLICON) else//取文件图标 SHGetFileInfo(Pchar(N),0,FileInfo,sizeof(FileInfo), SHGFI_SYSICONINDEX or SHGFI_USEFILEATTRIBUTES or SHGFI_SMALLICON); ListItem.ImageIndex :=FileInfo.iIcon ; 里面有些变量是我的局部变量,你看一下意思就OK了
/
本文档为【delphi 动态获取文件类型的图标】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
热门搜索

历史搜索

    清空历史搜索