如何利用SHBrowseForFolder瀏覽目錄時指定預設自訂目錄

有關Delphi 的語法, 程式, 等
回覆文章
頭像
tim
文章: 1379
註冊時間: 2008年 11月 26日, 00:49

如何利用SHBrowseForFolder瀏覽目錄時指定預設自訂目錄

文章 tim »

請參考,
http://delphi.ktop.com.tw/topic.asp?topic_id=77133

代碼: 選擇全部

     
    function BrowseDialogCallBack(Wnd: HWND; uMsg: UINT; lParam, lpData: LPARAM):integer stdcall; 
    var 
      wa, rect : TRect; 
      dialogPT : TPoint; 
    begin 
      //center in work area 
      if uMsg = BFFM_INITIALIZED then 
      begin 
        wa := Screen.WorkAreaRect; 
        GetWindowRect(Wnd, Rect); 
        dialogPT.X := ((wa.Right-wa.Left) div 2)-((rect.Right-rect.Left) div 2); 
        dialogPT.Y := ((wa.Bottom-wa.Top) div 2)-((rect.Bottom-rect.Top) div 2); 
        MoveWindow(Wnd,dialogPT.X,dialogPT.Y,Rect.Right - Rect.Left,Rect.Bottom - Rect.Top,True); 
        SendMessage(Wnd, BFFM_SETSELECTION, Integer(True), lpdata); 
      end; 
      Result := 0; 
    end; {BrowseDialogCallBack} 
     
    function BrowseDialog(const Title: string; defaultpath: string; const Flag: integer): string; 
    var 
      lpItemID : PItemIDList; 
      BrowseInfo : TBrowseInfo; 
      DisplayName : array[0..MAX_PATH] of char; 
      TempPath : array[0..MAX_PATH] of char; 
    begin 
      Result:=''; 
      FillChar(BrowseInfo, sizeof(TBrowseInfo), #0); 
      with BrowseInfo do begin 
        hwndOwner := Application.Handle; 
        pszDisplayName := @DisplayName; 
        lpszTitle := PChar(Title); 
        ulFlags := Flag; 
        lpfn := BrowseDialogCallBack; 
        BrowseInfo.lParam := Integer(PChar(defaultpath)); 
      end; 
      lpItemID := SHBrowseForFolder(BrowseInfo); 
      if lpItemId <> nil then begin 
        SHGetPathFromIDList(lpItemID, TempPath); 
        Result := TempPath; 
        GlobalFreePtr(lpItemID); 
      end; 
    end; 
多多留言, 整理文章, 把經驗累積下來.....
回覆文章