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

---- 大量的图标显示是Windows中的一大特色,丰富多彩的图标 不仅美化了Windows的桌面,而且便于直观的操作,给用户带来 了极大的方便。可以说在某种程度上,图标的地位已经超过了文 件名的作用。

---- 但是,当我们用可视化编程工具进行Windows编程时,却很 少有方便的方法来加载和显示图标。一般来说,在我们的应用程 序中使用到图标资源时都是我们自己亲自绘制出来的。因此,在 我们编的程序中使用到的图标是很有限的。我们知道Windows中 有大量已知的系统图标,如文件夹的图标、磁盘驱动器的图标等 等。熟悉Windows编程的朋友也许知道这些图标在Windows内部是 有其特定的编号的,只要获取了这些编号就能够调用并显示对应 的图标了。通过比较,我选择了Delphi中的ListView组件来显示 图标,因为这种方法是最简单的。

---- 下面是一个例子,该程序在Delphi 4.0中编译通过。

---- 该演示程序可以显示各类Windows系统图标,包括文件图标、磁盘图标、文件夹图标、用户特定可执行文件图标(如:Delphi的火炬图标等等)。有趣的是,我们显示的这些图标没有一个需要我们自己亲自动手绘制。

---- 请先在Delphi环境下建立一个窗体Form1,并在Form1中添加 一个按钮Button1和一个列表框ListView1;然后请设置ListView1的属性ViewStyle为vsIcon。

---- 源程序清单:

unit Unit1;
interface
uses
Windows, Messages, SysUtils,
Classes, Graphics, Controls,
Forms, Dialogs, ComCtrls,
StdCtrls, ShellAPI, ExtCtrls,
ImgList;
type
TForm1 = class(TForm)
ListView1: TListView;
Button1: TButton;
procedure FormDestroy(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
const
Test='C:/';
{ Test为测试数据,在本例中返回的是一个驱动器图标。读者
可以自行选择其他测试数据如:Test:='C:/Autoexec.bat'
等等。}
var
Form1: TForm1;
ShFileInfo: TSHFILEINFO;
implementation
{$R *.DFM}
function GetFileIconIndex
(FileName:string):integer;
{ 获取图标的序号函数 }
var
Ext:String;
begin
Ext:=FileName;
Result:=ShGetFileInfo(Pchar
(Ext), 0, SHFileInfo,
SizeOf(SHFileInfo), SHGFI_LARGEICON or
SHGFI_SYSICONINDEX or SHGFI_TYPENAME);
Result:=SHFileInfo.iIcon;
{ 返回获取的图标序号 }
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
with ListView1 do
begin
SmallImages:=TImageList.CreateSize(32,32);
SmallImages.ShareImages:=True;
SmallImages.Handle:=ShGetFileInfo('*.*',0,
SHFileInfo, SizeOf(SHFileInfo),
SHGFI_LARGEICON or
SHGFI_ICON or SHGFI_SYSICONINDEX);
LargeImages:=TImageList.CreateSize(32,32);
LargeImages.ShareImages:=True;
LargeImages.Handle:=ShGetFileInfo('*.*',0,
SHFileInfo, SizeOf(SHFileInfo),
SHGFI_LARGEICON or
SHGFI_ICON or SHGFI_SYSICONINDEX);
end;
{ 分配系统资源给ListView1组件以显示图标 }
end;
procedure TForm1.FormDestroy
(Sender: TObject);
begin
ListView1.SmallImages.Free;
ListView1.LargeImages.Free;
{ 释放ListView1占用的系统资源 }
end;
procedure TForm1.Button1Click
(Sender: TObject);
begin
ListView1.Items.Item[0].
ImageIndex:=GetFileIconIndex(Test);
{ 为ListView1中的第一个项目绘制图标 }
end;
end.

在Delphi中显示Windows图标相关推荐

  1. Delphi:显示Windows图标

    ---- 大量的图标显示是Windows中的一大特色,丰富多彩的图标不仅美化了Windows的桌面,而且便于直观的操作,给用户带来了极大的方便.可以说在某种程度上,图标的地位已经超过了文件名的作用. ...

  2. win7任务栏计算机怎么显示桌面图标,怎么在Win7任务栏中显示计算机图标

    问题描述: 如何在Windows7系统任务栏中显示计算机图标 Windows 7系统默认关闭了快速启动栏,引入了新的功能"库",锁定到任务栏的计算机默认仍然打开"库&qu ...

  3. 任务栏上有计算机和网络图标,如何在Win7任务栏中显示计算机图标

    问题描述: 如何在Windows7系统任务栏中显示计算机图标 问题分析: Windows 7系统默认关闭了快速启动栏,引入了新的功能"库",锁定到任务栏的计算机默认仍然打开&quo ...

  4. vue在列表和下拉框中显示icon图标

    vue在列表和下拉框中显示icon图标 一. 在项目中引入阿里云icon图标 二. 在data中定义icon图标列表 三. 在下拉框中显示icon图标 四. 在列表中显示icon图标 五. 在el-c ...

  5. delphi语音_在Delphi中使用Windows文本语音转换

    In this tutorial I will show you how to use the Windows Speech API in Delphi. I will only cover basi ...

  6. java web 中 读取windows图标并显示

    java web中读取windows对应文件名的 系统图标 ....显示 1.获取系统图标工具类 package utils;  import java.awt.Graphics;  import j ...

  7. php添加网站ico图标,phpcms在地址栏中显示网站图标的方法(增加网站ico图标)

    本文关键详细介绍了phpcms在地址栏中显示信息网站图标的方式(提升网站ico图标),必须的盆友能够参照下 phpcms怎样在地址栏中显示信息网站的图标 最先寻找网站的css文件,刚开始在里面改动. ...

  8. android png图片背景黑色,Android中显示PNG图标背景变黑色

    最近项目中遇到一个问题:就是从网络获取应用PNG图标后,显示到GridView中,发现图标透明的地方都变成了黑色?为什么呢? 个人习惯有问题先梳理一遍代码: 一.从网络异步下载图标并显示代码 clas ...

  9. Delphi隐藏/显示Windows桌面上的图标

    //隐藏桌面上的图标 procedure DesktopHideIcon; var   h: THandle; begin   h := FindWindow('Progman', nil);   S ...

最新文章

  1. 分布式服务框架 Zookeeper — 管理分布式环境中的数据
  2. andorid 第五天 了解xml与应用程序之间的关系
  3. a programmer should know...
  4. Java语言编程基础:数组
  5. supersu_SuperSU已从Play商店中删除,这是替代使用的方法
  6. 端午粽香html5游戏,《快乐端午粽飘香》亲子活动教案
  7. 笔记 编写可读性代码的艺术
  8. ionic3.0--angular4.0 引入第三方插件库的方法
  9. java手机号正则校验工具类
  10. java se 通用能力-判断推理专项练习(选择题)
  11. 3D图形渲染及数字图像处理算法相关文集
  12. 第七周助教工作总结——NWNU李泓毅
  13. luffy-16/订单表设计,立即付款接口/前端,支付成功get回调用户展示,支付成功post回调修改订单状态
  14. CRISPR-Cas9实验常见问题及解决方案
  15. 悖论对计算机科学影响,科学界最著名的几大悖论,你能解释吗?
  16. ProcessOn -在线绘图
  17. 谁是滕尚华?两获哥德尔奖,上交大校友,喜欢「躺平式」科研
  18. 使用Synopsys VCS使用constraint遇到的一个奇怪问题
  19. bilinear interpolation是什么
  20. Python实现冒泡排序的代码

热门文章

  1. Windows系统如何自动关机?1行代码就能实现自动关机(超简单)
  2. UI设计指南之可视化大屏【快速理解版】
  3. java设计模式例题
  4. 常用名称含义(笔记)
  5. 冲上市三年,米哈游终迎IPO“崩坏”
  6. 打印机不打印故障简单排除方法
  7. 使用阈值图修改角色脸部阴影
  8. 激光打标技术在玻璃酒瓶中的应用
  9. Jupyter Notebook 怎样打开指定文件夹 详解
  10. 解决Edge浏览器无法同步问题