⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 021.htm

📁 Delphi书籍--Delphi网上教程
💻 HTM
字号:
<HTML><HEAD><meta http-equiv="Content-Type" content="text/html; charset=GB2312"><TITLE>-->DELPHI专题--API应用-->在Delphi中使用动态图标</TITLE>
<META NAME="keywords" CONTENT=" DELPHI专题--API应用 在Delphi中使用动态图标">
<META NAME="description" CONTENT=" - DELPHI专题--API应用 - 在Delphi中使用动态图标">

<style>
<!--
#page {position:absolute; z-index:0; left:0px; top:0px}
.tt3 {font: 9pt/12pt "宋体"}
.tt2 {font: 12pt/15pt "宋体"}
a {text-decoration:none}
a:hover {color: blue;text-decoration:underline}
-->
</style>
</HEAD>
<a href="index2.html">返回</a>

<body text="#000000" aLink=#9900ff link=#006699 vLink=#006699 bgcolor="#FFFFFF" leftmargin="3" topmargin="3" marginheight="3" marginwidth="3">
<TABLE WIDTH="100%" CELLPADDING=10 CELLSPACING=0 BORDER=0>
<TR>

<TD class="tt2" bgcolor="#F5F8F8" width="84%"><center><B><FONT style="FONT-SIZE: 16.5pt" COLOR="#FF6666" FACE="楷体_GB2312">在Delphi中使用动态图标</FONT></B></center>
<hr color="#EE9B73" size="1" width="94%">
<p><span style="font-size: 9pt">  在应用程序的编写中,组合框(ComboBox)、列表框(ListBox)、等常见的部件,通常不仅要用于显示文字,而且还要显示其与文字相关的图标。在一般的Windows应用程序中,这些图标的显示都要随列出的显示文本的变化而变化,例如在组合框中列出当前目录下的所有文件时,在组合框左边就显示与文件名相关联的图标,这就是所谓的动态图标。在Delphi中使用动态图标的步骤如下:<br>
</span></p>
<BR>
<p><span style="font-size: 9pt">  <b>一、图标的获取</b><br>
  要使用动态图标,首先要解决的是如何获得显示文本和与其相关联的图标句柄。该图标通过文件关联由系统注册表决定,并且在Windows编程中同一文件(或子目录,或文件夹)在桌面上也可能有两种显示结果,这就是DOS文件名与显示名(Display 
Name)。如果我们的应用程序不需要有像Windows资源浏览器那样的效果,则可以使用FindFirst()和FindNext()二个函数以及FindClose()过程来获得DOS文件名,否则我们就应当使用WindowsAPI来获得显示名。在获得文件名的同时可通过使用ShellAPI.pas中的SHGetFileInfo()函数来获得其图标句柄HICON,说明如下:<br> 
  function SHGetFileInfo(pszPath: PAnsiChar; dwFileAttributes: DWORD;var psfi: 
TSHFileInfo; cbFileInfo,uFlags: UINT): DWORDl;<br> 
  pszPath 参数:指定的文件名。当uFlags的取值中不包含 SHGFI_PIDL时,可直接指定;否则pszPath要通过计算获得,不能直接指定;<br> 
   dwFileAttributes参数:文件属性,仅当uFlags的取值中包含SHGFI_USEFILEATTRIBUTES时有效,一般不用此参数;<br> 
  psfi 
参数:返回获得的文件信息,是一个记录类型,有以下字段:<br> 
  hIcon: HICON; //文件的图标句柄<br> 
  iIcon: Integer; //图标的系统索引号<br> 
  dwAttributes: DWORD; //文件的属性值<br> 
  szDisplayName: array [0..MAX_PATH-1] of AnsiChar; //文件的显示名<br> 
  szTypeName: array [0..79] of AnsiChar; //文件的类型名<br> 
  cbFileInfo 参数:psfi的比特值;<br> 
  uFlags 
参数:指明需要返回的文件信息标识符,常用的有以下常数:<br> 
  SHGFI_ICON; //获得图标<br> 
  SHGFI_DISPLAYNAME; //获得显示名<br> 
  SHGFI_TYPENAME; //获得类型名<br> 
  SHGFI_ATTRIBUTES;//获得属性<br>
  SHGFI_LARGEICON; //获得大图标<br> 
  SHGFI_SMALLICON; //获得小图标<br> 
  SHGFI_PIDL;// pszPath是一个标识符<br> 
  函数SHGetFileInfo()的返回值也随uFlags的取值变化而有所不同。通过调用SHGetFileInfo()可以由psfi参数得到文件的图标句柄,但要注意在uFlags参数中不使用SHGFI_PIDL时,SHGetFileInfo()不能获得&quot;我的电脑&quot;等虚似文件夹的信息。<br>
</span></p>
<BR>
<p><span style="font-size: 9pt">  <b>二、图标的加载</b><br>
  使用Delphi提供的TImageList组件,通过调用CommCtrl .pas中的函数ImageList_AddIcon()来加载得到的图标,并要保证其索引号与显示文本相对应。说明如下:<br> 
  function ImageList_AddIcon(ImageList: HIMAGELIST; //加载图标的ImageList句柄<br> 
  Icon: Hicon //加载的图标句柄 ): Integer; //返回图标在ImageList中的索引号<br> 
  在需要指明图标索引号时可使用ImageList_AddIcon()的返回值。<br>
</span></p>
<BR>
<p><span style="font-size: 9pt">  <b>三、图标和文本的绘图式输出</b><br>
  对于组合框、列表框等不能直接显示图标的组件,由于要求显示图标的同时又要同时显示文本,可通过设置其相应的Style属性达到目的,示例如下:<br>
  组合框:ComboBox1.Style:=csOwnerDrawVariable根据实际使用经验最好不要在ObjectInspector窗体中直接设置,而应将代码添加在程序的适当位置,否则可能出现绘图区域高度不规则变化<br>
  列表框:ListBox1.Style:=lbOwnerDrawVariable <br>
  状态栏:StatusBar1.Panels[i].Style:= psOwnerDraw 不能使用简单状态栏,i是状态栏中要绘制图标的某一窗格索引号,图形输出可使用TImageList的ImageList1.Draw()方法,而文本输出则可使用TCanvas的TextOut()方法,它由组件的Canvas属性继承得到,显然没有Canvas属性的组件不能使用此方法显示图标。<br> 
  对于可直接显示图标的组件,直接指定其Images、StateImages等需要的图标属性为相应的TimageList组件名,并通过指定图标的索引号则可显示图标。需要注意的是:在使用大图标时,必须先调用TImageList的CreateSize()方法指定可加载图标的尺寸,并且在每次调用TImageList的Clear方法后都要重新调用CreateSize()。<br>
  使用TImageList的ImageList1.Clear方法清除已加载的图标,常在需要刷新时使用。<br>
<b></b></span></p>
<BR>
<hr color="#EE9B73" size="1" width="94%">

</TD>

</TR>
</table>
</BODY></HTML>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -