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

如何在你的程序中使用系統(tǒng)圖標(biāo)

[摘要]在資源管理器中,每一個目錄文件都有自已的圖標(biāo),如何在自已的應(yīng)用程序里使用它呢?下面給出相關(guān)的例程,以及簡單的調(diào)用實例。uses shellapi;第一步 取得系統(tǒng)的圖標(biāo)列表的句柄,將之賦予一個圖像列表控件。procedure GetSystemImageList(imagelist:TImage...
在資源管理器中,每一個目錄文件都有自已的圖標(biāo),如何在自已的應(yīng)用程序里使用它呢?
下面給出相關(guān)的例程,以及簡單的調(diào)用實例。

uses shellapi;

第一步  取得系統(tǒng)的圖標(biāo)列表的句柄,將之賦予一個圖像列表控件。
procedure GetSystemImageList(imagelist:TImageList);
var
    SysIL: THandle;
    SFI: TSHFileInfo;
begin
    // 取小圖標(biāo),如果將SHGFI_SMALLICON替換成
    //SHGFI_LARGEICON則表示取大圖標(biāo)
    SysIL := SHGetFileInfo('', 0, SFI, SizeOf(SFI),
        SHGFI_SYSICONINDEX or SHGFI_SMALLICON);
    if SysIL <> 0 then begin
        //將imagelist的圖像列表句柄指向系統(tǒng)圖像句柄
        imagelist.Handle := SysIL;
        //防止組件釋放時釋放圖像句柄,很重要
        imagelist.ShareImages := TRUE;
    end;
end;

第二步  取得要處理文件的圖標(biāo)索引
//取一個文件的圖標(biāo)索引
function GetIconIndex(const AFile: string; Attrs: DWORD): integer;
//Attrs可以為表示文件或路徑FILE_ATTRIBUTE_NORMAL or FILE_ATTRIBUTE_DIRECTORY
var
    SFI: TSHFileInfo;       
begin
    SHGetFileInfo(PChar(AFile), Attrs, SFI, SizeOf(TSHFileInfo),
     SHGFI_SYSICONINDEX or SHGFI_USEFILEATTRIBUTES);
    Result := SFI.iIcon;
end;

實例調(diào)用:
//如在TreeView中得到c:\mydir的圖標(biāo),因為是路徑所以要加上路徑的標(biāo)志
aNode.ImageIndex := GetIconIndex('c:\mydir\',
     FILE_ATTRIBUTE_NORMAL or FILE_ATTRIBUTE_DIRECTORY);
//如在TreeView中得到c:\index.html的圖標(biāo)
aNode.ImageIndex := GetIconIndex('c:\index.html',FILE_ATTRIBUTE_NORMAL);