网上基本都是VC的代码,又说要回调,我(新手+菜鸟一个)都晕掉了,不会改写~

解决方案 »

  1.   

    在TBrowseInfo结构的
    lParam := LongInt(PChar('初始目录')));然后在回调中
    function BrowseCallbackProc(hwnd: HWND; uMsg: UINT; lParam: LPARAM; lpData: LPARAM): Integer; stdcall;
    begin
     Case uMsg of
      BFFM_INITIALIZED:
        SendMessage(hwnd, BFFM_SETSELECTION, 1, lpData);
      ....
      ....
     end;
     Result := 0
    end
      

  2.   


    var
     TitleName : string;
     lpItemID : PItemIDList;
     BrowseInfo : TBrowseInfo;
     DisplayName : array[0..MAX_PATH] of char;
     TempPath : array[0..MAX_PATH] of char;
     function BrowseCallbackProc(hwnd: HWND; uMsg: UINT; lParam: LPARAM; lpData: LPARAM): Integer; stdcall; 
     begin
       Result := 0;
       case uMsg of
         BFFM_INITIALIZED://初始化時發送選擇文件夾消息
           SendMessage(hwnd,BFFM_SETSELECTION,1,lpData);
       end;
     end;
    begin
       FillChar(BrowseInfo, sizeof(TBrowseInfo), #0);
       BrowseInfo.hwndOwner := Self.Handle;
       BrowseInfo.pszDisplayName := @DisplayName;
       TitleName := 'Please specify a directory';
       BrowseInfo.lpszTitle := PChar(TitleName);
       BrowseInfo.ulFlags := BIF_RETURNONLYFSDIRS;//只顯示路徑
       BrowseInfo.lParam := LongInt(PChar('C:\'));//指定默認路徑
       BrowseInfo.lpfn := @BrowseCallbackProc;//設定回調
       lpItemID := SHBrowseForFolder(BrowseInfo);
       if lpItemId <> nil then
       begin
         SHGetPathFromIDList(lpItemID, TempPath);//返回選擇的路徑
         GlobalFreePtr(lpItemID);//釋放空間
       end;
    end;