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

如何在選取目錄時指定默認目錄

答題得分者是:timhuang
WoodTiger
初階會員


發表:35
回覆:90
積分:25
註冊:2003-08-01

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-08-21 00:11:47 IP:219.82.xxx.xxx 未訂閱
以前從網上摘下來的一段程式,用於選取目錄名,先謝過作者(記不起出處了),想請教的是如何改寫這段函數,使得可以指定起始的目錄,也就是不要每次都從"我的電腦"開始選目錄,請賜教,謝謝!(附程式) /////////////////////////////////////////////////////////////////////////////// >
------
-=-=-=-=-=-=-=-=-=-=-=
Eveything as your wish.
WoodTiger
初階會員


發表:35
回覆:90
積分:25
註冊:2003-08-01

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-08-22 11:59:15 IP:60.191.xxx.xxx 未訂閱
好像就是這置BROWSEINF的OpidlRoot,但不知道如何設置!請指教! ================================== 搞得懂就答人,搞不懂就問人,沒有人懂還可以問神!
------
-=-=-=-=-=-=-=-=-=-=-=
Eveything as your wish.
Clarinet
高階會員


發表:9
回覆:97
積分:126
註冊:2002-05-08

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-08-22 18:02:49 IP:61.30.xxx.xxx 未訂閱
引言:
   ulFlags := Flag;
   lpfn := BrowseDialogCallBack;
   //加入這一行  Directory就是你要的起始目錄
   lParam :=Integer(PChar(Directory));    
GPS(全球衛星定位系統) http://www.allgps.com
------
GPS(全球衛星定位系統)
http://www.allgps.com
WoodTiger
初階會員


發表:35
回覆:90
積分:25
註冊:2003-08-01

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-08-22 20:04:03 IP:219.82.xxx.xxx 未訂閱
引言:
   ulFlags := Flag;
   lpfn := BrowseDialogCallBack;
   //加入這一行  Directory就是你要的起始目錄
   lParam :=Integer(PChar(Directory));    
謝謝你的回答,試了一下: lParam:=Integer(PChar('c:\windows')); 好像沒有效果哎!是不是我這樣寫是不對的,還是有其他的地方還需要注意? 請指教!謝謝! 另外問一句,Delphi中要通過窗口來得到一個目錄名是這麽難的事嗎?還是另有辦法呢? ================================== 搞得懂就答人,搞不懂就問人,沒有人懂還可以問神! 發表人 - woodtiger 於 2005/08/22 20:05:15
------
-=-=-=-=-=-=-=-=-=-=-=
Eveything as your wish.
timhuang
尊榮會員


發表:78
回覆:1815
積分:1608
註冊:2002-07-15

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-08-22 23:04:35 IP:220.132.xxx.xxx 未訂閱
Hi, 改了一下, 你試看:    
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;    BrowseDialog('test', 'c:\test', 0)
因為最重要的, callback 通知要設置的預設目錄沒有改到, 所以沒有作用囉!!
WoodTiger
初階會員


發表:35
回覆:90
積分:25
註冊:2003-08-01

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-08-23 08:49:02 IP:60.191.xxx.xxx 未訂閱
謝謝timhuang,的確是這個原因,改了以後完成好用了,真是太感謝了!同時也感謝Clarinet,兩位又讓我學到了不少!下次請繼續指教! ================================== 搞得懂就答人,搞不懂就問人,沒有人懂還可以問神! 發表人 - woodtiger 於 2005/08/23 08:49:47
------
-=-=-=-=-=-=-=-=-=-=-=
Eveything as your wish.
Clarinet
高階會員


發表:9
回覆:97
積分:126
註冊:2002-05-08

發送簡訊給我
#7 引用回覆 回覆 發表時間:2005-08-23 09:14:47 IP:61.30.xxx.xxx 未訂閱
引言: .....略
還是 timhuang 大大細心。有發現在Callback少了Sendmessage() GPS(全球衛星定位系統) http://www.allgps.com
------
GPS(全球衛星定位系統)
http://www.allgps.com
系統時間:2024-04-26 16:52:22
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!