標籤:
欄目刊登了一篇《提取表徵圖的Delphi控制項》的文章,所介紹的方法可以用於提取包含在檔案中的表徵圖,但對於本身沒有包含表徵圖的檔案卻無法像Windows的“資源管理員”那樣顯示出其預設的表徵圖。本文介紹了在Delphi的ListView組件中顯示這種表徵圖的方法,和《提取表徵圖的Delphi控制項》一文結合起來就可以顯示出幾乎所有的表徵圖了。該方法的一大特色是不用繪製任何表徵圖就能夠顯示許多Windows表徵圖。
原文來自: 【100指令碼網 www.pc100.net】
---- 大量的表徵圖顯示是Windows中的一大特色,豐富多彩的表徵圖 不僅美化了Windows的案頭,而且便於直觀的操作,給使用者帶來 了極大的方便。可以說在某種程度上,表徵圖的地位已經超過了文 件名的作用。
---- 但是,當我們用可視化編程工具進行Windows編程時,卻很 少有方便的方法來載入和顯示表徵圖。一般來說,在我們的應用程 序中使用到表徵圖資源時都是我們自己親自繪製出來的。因此,在 我們編的程式中使用到的表徵圖是很有限的。我們知道Windows中 有大量已知的系統表徵圖,如檔案夾的表徵圖、磁碟機的表徵圖等 等。熟悉Windows編程的朋友也許知道這些表徵圖在Windows內部是 有其特定的編號的,只要擷取了這些編號就能夠調用並顯示對應 的表徵圖了。通過比較,我選擇了Delphi中的ListView組件來顯示 表徵圖,因為這種方法是最簡單的。
---- 下面是一個例子,該程式在Delphi 4.0中編譯通過。
---- 該示範程式可以顯示各類Windows系統表徵圖,包括檔案表徵圖、磁碟表徵圖、檔案夾表徵圖、使用者特定可執行檔表徵圖(如:Delphi的火炬表徵圖等等)。有趣的是,我們顯示的這些表徵圖沒有一個需要我們自己親自動手繪製。
---- 請先在Delphi環境下建立一個表單Form1,並在Form1中添加 一個按鈕Button1和一個列表框ListView1;然後請設定ListView1的屬性ViewStyle為vsIcon。
---- 來源程式清單:
unit Unit1;interfaceuses 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 orSHGFI_ICON or SHGFI_SYSICONINDEX); LargeImages:=TImageList.CreateSize(32,32); LargeImages.ShareImages:=True; LargeImages.Handle:=ShGetFileInfo(‘*.*‘,0,SHFileInfo, SizeOf(SHFileInfo),SHGFI_LARGEICON orSHGFI_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.
http://www.zhihu.com/question/23952865http://www.zhihu.com/question/22481342http://www.iqiyi.com/u/1110574148http://wenku.baidu.com/view/d159f2455a8102d276a22fb0http://www.docin.com/p1-1076470440.htmlhttp://f.dataguru.cn/thread-482973-1-1.htmlhttp://www.yangtai.com/bbs/321319http://www.sharejs.com/codes/javascript/9063http://www.sharejs.com/codes/php/9062http://www.360doc.com/myfiles.aspx?app=1&type=3
在Delphi中顯示Windows表徵圖