在Delphi中使用系统对应文件类型的图标

Delphi实现的系统服务及托盘图标程序实战 在本章中,我们将开始深入了解Delphi系统服务程序的基础知识,并介绍其在现代应用程序中的作用。Delphi是一种功能强大的开发环境,它允许开发者创建各种应用程序,包括系统服务程序。系统服务程序是一种特殊的应用程序,它们在后台运行,无需用户交互即可执行任务,这使得它们在自动化和系统级操作中非常有用。Delphi系统服务程序是一种特殊的可执行文件,它在Windows操作系统环境下以服务的形式运行。这种服务程序在不提供用户界面的情况下执行任务,例如备份、监控、日志记录等。 阅读详情
在应用程序的编写中,组合框(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方法清除已加载的图标,常在需要刷新时使用。

Delphi实例精讲:系统托盘图标与菜单实现 本文还有配套的精品资源,点击获取 简介:本资源深入探讨了使用Delphi编程语言实现程序最小化到系统托盘、创建托盘图标和关联菜单的功能。Delphi因其高效的Object Pascal语言和直观的VCL框架而知名。我们将了解如何通过TTrayIcon组件隐藏程序、设置托盘图标和菜单以及处理相关事件,提升用户体验。本实例不仅包含详细源码解析,还涵盖了组件编程、事件驱动编程、资... 阅读详情

相关推荐

Delphi7获取Windows文件图标实战项目

在 Delphi 中,PChar是指向字符数组的指针类型,常用于与 Windows API 交互。

weixin_42593701的博客 949

在Delphi中使用动态图标

   在应用程序的编写中,组合框(ComboBox)、列表框(ListBox)、等常见的部件,通常不仅要用于显示文字,而且还要显示其与文字相关的图标。在一般的Windows应用程序中,这些图标的显示都要随列出的显示文本的变化而变化,例如在组合框中列出当前目录下的所有文件时,在组合框左边就显示与文件名相关联的图标,这就是所谓的动态图标。在Delphi中使用动态图标的步骤如下:    一、

kxn的专栏 1467

终于解决了 Delphi XE 编译生成的EXE文件图标不变的问题!

一直没在意这个问题,这次委托人一定要更换EXE文件的图标,本以为很容易,在设计环境给窗体 ico 赋值就可以啦! 最后才发现即使在IDE内运行时,图标已经换好了。但离开环境一看,那个 EXE文件的图标却没有更换,还是那个DX图标! 网上找了很多解决方案和办法都没有更换成功!,什么RES啦!什么清缓存啦!什么更换文件夹啦!统统失败! 研究了好久,终于找到办法,详见内文! Delphi XE 好大的BUG呀!在设计环境下改了窗体ICO,内部运行没问题,但在生成EXE文件, 竟然没有自动更换生成的EXE文件图标!从而造成EXE文件无法自动更换图标的BUG! 我用以上简单方法解决了问题!现贡献大家,供同问题者参考!

delphi 获取系统注册的文件图标

var   Icon:TICON;   Key : string;   App : string;   Index : Integer; begin   FileName:=Edit6.Text;   if Pos('.',FileName)    begin     Exit;   end;   with TRegistry.Create do   try     Ro

fyl_077的专栏 939

Delphi 使任务栏中的小图标动起来

[Delphi]使任务栏中的小图标动起来

delphi_icon

delphi application icon

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

delphi 动态获取文件类型的图标.txt我不奢望什么,只希望你以后的女人一个不如一个。真怀念小时候啊,天热的时候我也可以像男人一样光膀子!在应用程序的编写中,组合框(ComboBox)、列表框(ListBox)、等常见的部件,通常不仅要用于显示文字,而且还要显示其与文字相关的图标。在一般的Windows应用程序中,这些图标的显示都要随列出的显示文本的变化而变化,例如在组合框中列出当前...

dkopg24406的专栏 526

Delphi所用的图标资源

Delphi所用的图标资源,安装后可直接搜索图标,如搜“球”,便可搜到上百种球类图标,非常实用

Delphi 7使用自定义图标关联文件类型

在开发过程中,我们经常需要属于自己的文件类型,自定义的后缀名不仅可以防止用户双击直接改动其中的内容,还可以根据后缀名形象的表示此文件代表的含义。在Delphi 7中要实现关联文件图标、关联文件打开,并且关联的图标可以自己指定,而仅非只能使用应用程序的标题图标。1.新建一个应用程序工程,准备两个ICO图标,其中一个作为应用程序的图标,另一个作为文件关联显示的图标; 2.在工程目录下新建一...

dkopg24406的专栏 215

delphi程序员常用图标

是我自己亲手做的图标,虽然不是最好,但用用还是可以的。

用delphi做的 icon转换bmp 工具

delphi 编写的 icon转换bmp器

delphi 获取文件图标

{根据文件的名字得到此文件在系统中对应大小的图标large=true(64*64) false(32*32)}procedure GetFileIcon(TypeName: Widestring; Icon: TIcon;Large:Boolean=False);var strTmp: Widestring; IndexS, IndexL: HIcon; ShFileInfo: T...

dkopg24406的专栏 615

DeepSeek-V3本地Docker容器化部署

通过以上步骤,你可以在本地上成功通过容器化部署DeepSeek-V3。安装完成后,启动Docker Desktop。如果需要后台运行,可以加上。

u013302168的博客 2123

在Delphi中显示Windows图标

栏目刊登了一篇《提取图标的Delphi控件》的文章,所介绍的方法可以用于提取包含在文件中的图标,但对于本身没有包含图标的文件却无法像Windows的“资源管理器”那样显示出其默认的图标。本文介绍了在Delphi的ListView组件中显示这种图标的方法,和《提取图标的Delphi控件》一文结合起来就可以显示出几乎所有的图标了。该方法的一大特色是不用绘制任何图标就能够显示许多Windows图标。 -

1790

番外篇:ADS功放设计实战——负载与源牵引的协同优化

本文深入探讨了ADS功放设计中负载牵引与源牵引的协同优化原理及实战技巧。通过2.4GHz Wi-Fi功放等案例,详细解析了基波阻抗迭代优化、谐波调谐高级技巧及收敛判断方法,帮助工程师显著提升功放效率至78%以上。文章特别强调ADS仿真工具的正确使用方法和实际调试经验,为射频功放设计提供实用指导。

weixin_33483304的博客 340

Vivado 2018.3实战:用IDELAYE3和ISERDESE3搞定高速ADC数据采集(附仿真源码)

本文详细介绍了在Vivado 2018.3中使用Xilinx UltraScale架构的IDELAYE3和ISERDESE3原语实现高速ADC数据采集的实战方法。通过分析5GHz采样系统的时序挑战,提供从PCB布局到Vivado实现的完整解决方案,包括精密时序校准、多相位数据重组及系统级调试技巧,并附赠仿真源码助力工程师快速掌握高速数据采集技术。

weixin_30567225的博客 582
上一篇: 使用Delphi解析XML 文档
下一篇: SHGetFileInfo函数 获取系统文件类型及图标
pgnet
博客等级 码龄20年 9粉丝 22原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值