線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1710
推到 Plurk!
推到 Facebook!

為什麼無法抓到Desktop的圖示?

尚未結案
look4help
一般會員


發表:9
回覆:8
積分:3
註冊:2005-07-26

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-09-07 23:16:06 IP:218.164.xxx.xxx 未訂閱
各位好,一個問題請教各位。因為我想要利用TTreeView撰寫一個類似檔案總管的畫面,之前參考了不少程式範例。我抄了一個函式內容如下,若是取我的電腦,或是我的最愛等資料夾,都可以正確顯示圖示,唯讀「桌面」無法正常顯示,每次都顯示一支手的圖樣,請問是哪裏出現問題?請高手指點一下,拜託拜託,謝謝~~~~ < class="code"> //取得Windows系統預設的圖示 extern int GetTreeViewShellImage(char* str, bool Open) { 參數str -->為資料夾或檔案之路徑,我也有看過傳入機碼, 例如"::{{20D04FE0-3AEA-1069-A2D8-08002B30309D}}",可以正確得到我的電腦的圖示。 //抓取某個Node的Icon SHFILEINFO FileInfo; char afterReplace_Str; int Flags; int Result; memset(&FileInfo, 0, sizeof(FileInfo)); Flags = SHGFI_SYSICONINDEX | SHGFI_ICON; if(Open) Flags = Flags | SHGFI_OPENICON; Flags = Flags | SHGFI_SMALLICON; SHGetFileInfo(str, 0, &FileInfo, sizeof(FileInfo), Flags); //ps str=不知道值該為如何。若是用C:\Documents and Settings\Administrator\桌面,Show出來 也只是一個資料夾的圖示。但除此路徑之外,我不曉得該放什麼路徑才能正確顯示桌面圖示。 Result = FileInfo.iIcon; return Result; } //按下按鈕時,取圖示,並展開第一個節點 void __fastcall TForm1::Button1Click(TObject *Sender) { int ImageIndex, SelectedIndex; TTreeNode *TreeView_Main_Root; AnsiString SpecialFolderPath; SpecialFolderPath = "C:\Documents and Settings\Administrator\桌面"; ............ ImageIndex = GetTreeViewShellImage(SpecialFolderPath.c_str(), false); SelectedIndex = GetTreeViewShellImage(SpecialFolderPath.c_str(), true); TreeView_Main_Root = TreeView_Main->Items->AddChild(NULL, "桌面"); TreeView_Main_Root->ImageIndex = ImageIndex; TreeView_Main_Root->SelectedIndex = SelectedIndex; ..... } 發表人 - look4help 於 2005/09/08 00:15:02
taishyang
站務副站長


發表:377
回覆:5490
積分:4563
註冊:2002-10-08

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-09-08 00:05:28 IP:218.168.xxx.xxx 未訂閱
您好:    PO程式碼的方式與版規說明請參考下面連結,煩請修改謝謝您的配合 >
RedSnow
版主


發表:79
回覆:1322
積分:845
註冊:2003-12-15

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-09-26 22:17:58 IP:61.217.xxx.xxx 未訂閱
look4help 您好:    系統目錄圖示可以使用 ItemList (使用 LPITEMIDLIST) 來配合 SHGetFileInfo() 取得,將欲取得圖示的系統目錄 ID ("桌面" 的 ID 是 0) 代入 SHGetSpecialFolderLocation() 可獲得 ItemIdList 的資訊,接著以 SHGetDesktopFolder() 偵測是否能正確取得系統目錄的資訊,可以的話就將前述的 ItemIdList 代入 SHGetFileInfo() 來取得圖示了。      7 天天敲鍵盤 v 時時按滑鼠 8
bugmans
高階會員


發表:95
回覆:322
積分:188
註冊:2003-04-12

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-09-30 20:28:30 IP:218.166.xxx.xxx 未訂閱
提供另一種方法 http://www.binbin.net/messages/qa_win_xp/0057.htm IconFile=explorer.exe,3  在explorer.exe檔案中第四個icon(從0開始數) 範例程式http://delphi.ktop.com.tw/topic.php?topic_id=25911
TIcon* icon = new TIcon;
USHORT idx = 3;
icon->Handle = ExtractAssociatedIcon(HInstance,"C:\\WINNT\\explorer.exe",&idx);
//ImageList1->AddIcon(icon);
// ImageList1->InsertIcon(1,icon);
// Image1->Picture->Assign(icon);
Form1->Canvas->Draw(10,10,icon);
delete icon;
icon=NULL;
系統時間:2024-03-29 17:22:55
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!