六月婷婷综合激情-六月婷婷综合-六月婷婷在线观看-六月婷婷在线-亚洲黄色在线网站-亚洲黄色在线观看网站

明輝手游網(wǎng)中心:是一個(gè)免費(fèi)提供流行視頻軟件教程、在線學(xué)習(xí)分享的學(xué)習(xí)平臺(tái)!

在Delphi中使用動(dòng)態(tài)圖標(biāo)

[摘要]在應(yīng)用程序的編寫中,組合框(ComboBox)、列表框(ListBox)、等常見的部件,通常不僅要用于顯示文字,而且還要顯示其與文字相關(guān)的圖標(biāo)。在一般的Windows應(yīng)用程序中,這些圖標(biāo)的顯示都要隨列出的顯示文本的變化而變化,例如在組合框中列出當(dāng)前目錄下的所有文件時(shí),在組合框左邊就顯示與文件名相關(guān)...
在應(yīng)用程序的編寫中,組合框(ComboBox)、列表框(ListBox)、等常見的部件,通常不僅要用于顯示文字,而且還要顯示其與文字相關(guān)的圖標(biāo)。在一般的Windows應(yīng)用程序中,這些圖標(biāo)的顯示都要隨列出的顯示文本的變化而變化,例如在組合框中列出當(dāng)前目錄下的所有文件時(shí),在組合框左邊就顯示與文件名相關(guān)聯(lián)的圖標(biāo),這就是所謂的動(dòng)態(tài)圖標(biāo)。在Delphi中使用動(dòng)態(tài)圖標(biāo)的步驟如下:
  一、圖標(biāo)的獲取
  要使用動(dòng)態(tài)圖標(biāo),首先要解決的是如何獲得顯示文本和與其相關(guān)聯(lián)的圖標(biāo)句柄。該圖標(biāo)通過文件關(guān)聯(lián)由系統(tǒng)注冊(cè)表決定,并且在Windows編程中同一文件(或子目錄,或文件夾)在桌面上也可能有兩種顯示結(jié)果,這就是DOS文件名與顯示名(Display Name)。如果我們的應(yīng)用程序不需要有像Windows資源瀏覽器那樣的效果,則可以使用FindFirst()和FindNext()二個(gè)函數(shù)以及FindClose()過程來獲得DOS文件名,否則我們就應(yīng)當(dāng)使用WindowsAPI來獲得顯示名。在獲得文件名的同時(shí)可通過使用ShellAPI.pas中的SHGetFileInfo()函數(shù)來獲得其圖標(biāo)句柄HICON,說明如下:
  function SHGetFileInfo(pszPath: PAnsiChar; dwFileAttributes: DWORD;var psfi: TSHFileInfo; cbFileInfo,uFlags: UINT): DWORDl;
  pszPath 參數(shù):指定的文件名。當(dāng)uFlags的取值中不包含 SHGFI_PIDL時(shí),可直接指定;否則pszPath要通過計(jì)算獲得,不能直接指定;
   dwFileAttributes參數(shù):文件屬性,僅當(dāng)uFlags的取值中包含SHGFI_USEFILEATTRIBUTES時(shí)有效,一般不用此參數(shù);
  psfi 參數(shù):返回獲得的文件信息,是一個(gè)記錄類型,有以下字段:
  hIcon: HICON; //文件的圖標(biāo)句柄
  iIcon: Integer; //圖標(biāo)的系統(tǒng)索引號(hào)
  dwAttributes: DWORD; //文件的屬性值
  szDisplayName: array [0..MAX_PATH-1] of AnsiChar; //文件的顯示名
  szTypeName: array [0..79] of AnsiChar; //文件的類型名
  cbFileInfo 參數(shù):psfi的比特值;
  uFlags 參數(shù):指明需要返回的文件信息標(biāo)識(shí)符,常用的有以下常數(shù):
  SHGFI_ICON; //獲得圖標(biāo)
  SHGFI_DISPLAYNAME; //獲得顯示名
  SHGFI_TYPENAME; //獲得類型名
  SHGFI_ATTRIBUTES;//獲得屬性
  SHGFI_LARGEICON; //獲得大圖標(biāo)
  SHGFI_SMALLICON; //獲得小圖標(biāo)
  SHGFI_PIDL;// pszPath是一個(gè)標(biāo)識(shí)符
  函數(shù)SHGetFileInfo()的返回值也隨uFlags的取值變化而有所不同。通過調(diào)用SHGetFileInfo()可以由psfi參數(shù)得到文件的圖標(biāo)句柄,但要注意在uFlags參數(shù)中不使用SHGFI_PIDL時(shí),SHGetFileInfo()不能獲得"我的電腦"等虛似文件夾的信息。
  二、圖標(biāo)的加載
  使用Delphi提供的TImageList組件,通過調(diào)用CommCtrl .pas中的函數(shù)ImageList_AddIcon()來加載得到的圖標(biāo),并要保證其索引號(hào)與顯示文本相對(duì)應(yīng)。說明如下:
  function ImageList_AddIcon(ImageList: HIMAGELIST; //加載圖標(biāo)的ImageList句柄
  Icon: Hicon //加載的圖標(biāo)句柄 ): Integer; //返回圖標(biāo)在ImageList中的索引號(hào)
  在需要指明圖標(biāo)索引號(hào)時(shí)可使用ImageList_AddIcon()的返回值。
  三、圖標(biāo)和文本的繪圖式輸出
  對(duì)于組合框、列表框等不能直接顯示圖標(biāo)的組件,由于要求顯示圖標(biāo)的同時(shí)又要同時(shí)顯示文本,可通過設(shè)置其相應(yīng)的Style屬性達(dá)到目的,示例如下:
  組合框:ComboBox1.Style:=csOwnerDrawVariable根據(jù)實(shí)際使用經(jīng)驗(yàn)最好不要在ObjectInspector窗體中直接設(shè)置,而應(yīng)將代碼添加在程序的適當(dāng)位置,否則可能出現(xiàn)繪圖區(qū)域高度不規(guī)則變化
  列表框:ListBox1.Style:=lbOwnerDrawVariable
  狀態(tài)欄:StatusBar1.Panels[i].Style:= psOwnerDraw 不能使用簡(jiǎn)單狀態(tài)欄,i是狀態(tài)欄中要繪制圖標(biāo)的某一窗格索引號(hào),圖形輸出可使用TImageList的ImageList1.Draw()方法,而文本輸出則可使用TCanvas的TextOut()方法,它由組件的Canvas屬性繼承得到,顯然沒有Canvas屬性的組件不能使用此方法顯示圖標(biāo)。
  對(duì)于可直接顯示圖標(biāo)的組件,直接指定其Images、StateImages等需要的圖標(biāo)屬性為相應(yīng)的TimageList組件名,并通過指定圖標(biāo)的索引號(hào)則可顯示圖標(biāo)。需要注意的是:在使用大圖標(biāo)時(shí),必須先調(diào)用TImageList的CreateSize()方法指定可加載圖標(biāo)的尺寸,并且在每次調(diào)用TImageList的Clear方法后都要重新調(diào)用CreateSize()。
  使用TImageList的ImageList1.Clear方法清除已加載的圖標(biāo),常在需要刷新時(shí)使用。


主站蜘蛛池模板: 亚洲第一a | 中文字幕在线精品视频入口一区 | 欧美一区二区三区在线观看 | 青娱乐国产精品 | 啪啪国产视频 | 五月天婷婷精品免费视频 | 欧美亚洲福利 | 日韩伦理在线视频 | 日韩一级在线播放免费观看 | 亚洲高清综合 | 在线视频日韩精品 | 综合久久久久6亚洲综合 | 五月婷婷亚洲综合 | 日本高清二区 | 欧美一级黄色片 | 伊人看片| 五月婷婷丁香六月 | 五月婷婷激情综合 | 日韩黄色三级 | 日韩视频中文字幕专区 | 欧美视频手机在线 | 欧美视频免费在线播放 | 亚洲第一页在线播放 | 日韩欧美成人乱码一在线 | 在线观看中文字幕亚洲 | 日本高清视频一区二区 | 色婷婷色丁香 | 亚洲欧洲精品久久 | 天天干天天舔天天操 | 欧美一级免费大片 | 中文字幕35 | 在线观看 一区二区 麻豆 | 欧美一级xxxx俄罗斯一级 | 亚洲欧美中文日韩v在线观看 | 日日噜噜夜夜狠狠久久丁香 | 视频一区二区精品的福利 | 日本亚洲中午字幕乱码 | 亚洲福利在线看 | 日本96在线精品视频免费观看 | 日本叼嗨| 青娱乐极品视频在线观看 |