程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> Delphi >> WindowSubClassing另類運用(之二)

WindowSubClassing另類運用(之二)

編輯:Delphi

 

Window SubClassing另類運用(之二)


 


 


你大概已經熟悉通用對話框(打開/保存文件,選擇字體/顏色,以及查找和替換)的使用,不過你是否了解如何調用“選擇文件夾”對話框呢?如果答案是否的話,你可以先看看一個簡單的例子,籍以做個熱身。如果你自認為已經了解它的話,可以跳過下面這一段。


 


要調用“選擇文件夾”對話框,和其他通用對話框所使用的方法非常類似:一個結構(BROWSEINFO)加一個函數(SHBrowseForFolder)即可。請看代碼:


procedure TForm1.Button2Click(Sender: TObject);


var


  bi : BROWSEINFO;


  szDisplay : array[0..MAX_PATH] of char;


  pidl : PItemIDList;


  str : string;


begin


  with bi do begin


    hwndOwner := Handle;


    pidlRoot := nil;


    pszDisplayName := szDisplay;


    lpszTitle := Select a Directory;


    ulFlags := BIF_RETURNONLYFSDIRS or BIF_STATUSTEXT;


    lpfn := @BrowseCallback;


    lParam := 0;


  end;


  pidl := SHBrowseForFolder(bi);


  if pidl<>nil then begin


     SetLength(str, MAX_PATH);


     SHGetPathFromIDList(pidl, PChar(str));


     str := PChar(str);


     Caption := str;


     CoTaskMemFree(pidl);


  end;


end;


SHBrowseForFolder返回一個LPITEMIDLIST,你需要手動將它轉換成一個實際的文件路徑(除非你選擇的是回收站和控制面板這樣的虛擬路徑)。最後還要用Shell API把獲得的pidl釋放。上述代碼中,BrowseCallback是一個自己編寫的回調函數,如果不想處理回調的話,可以將它設置為nil。我還是處理了這個函數,因為我需要它的一些功能,如下:


function BrowseCallback(AWnd:HWND; uMsg:UINT; lp, lpData:LPARAM):Integer; stdcall;


var


  strPath : string;


  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved