时间: 2021-07-31 作者:daque
在运用步调的编写中,拉拢框(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本领废除已加载的图标,常在须要革新时运用。