全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1252
推到 Plurk!
推到 Facebook!

各位大大請問一下,如何像windows一樣設定執行路徑目錄?

尚未結案
houngjc
一般會員


發表:12
回覆:13
積分:5
註冊:2004-11-21

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-03-10 16:25:04 IP:203.204.xxx.xxx 未訂閱
因為小弟一直找不出如何來做,所以想請問各位大大,一般我們開檔讀檔時都要在程式設定好路徑,但這樣很麻煩,想請問有沒有跟windows一樣,我只要用瀏覽方式,就可指定所要的路徑,當目錄更改時,也不必自行在程式裡更改路徑,只要用瀏覽指定設定更改方式就可以了,不曉得要如何著手?? 請各位大大幫忙!謝謝
folkchen
高階會員


發表:9
回覆:232
積分:173
註冊:2003-10-09

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-03-10 16:34:24 IP:211.20.xxx.xxx 未訂閱
你試試 OpenDialog 若不會用的話,可以在站內搜尋一下
segat80
一般會員


發表:5
回覆:24
積分:15
註冊:2003-02-10

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-03-10 16:37:54 IP:203.69.xxx.xxx 未訂閱
houngjc你好: 你所說的是指像windows開啟檔案時,會有一個檔案選擇視窗嗎?? 若是的話,你可以使用OpenDialogs這個元件來達到此功能。 關於用法請參照各BCB書籍都介紹~
houngjc
一般會員


發表:12
回覆:13
積分:5
註冊:2004-11-21

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-03-10 18:25:38 IP:203.204.xxx.xxx 未訂閱
感謝大大回答,那不知我使用OpenDialogs的方法,可否抓取我要的目錄路徑,因為每次開檔存檔時,如目錄改變了,就得到程式裡改路徑,我想說能不能跟環境設定一樣,將預設目錄指定好後,如果將來目錄改了的話,用瀏覽的icon就可指定設定我要的路徑了!我想要的功能是這樣!不知各位大大!這樣會很難嗎??(想從一般的C轉成BCB)
rogan321
高階會員


發表:21
回覆:307
積分:200
註冊:2003-05-15

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-03-10 18:42:32 IP:203.204.xxx.xxx 未訂閱
執行碼是不能更改的 要紀錄路徑可用ini檔來讀取,或利用windows的Registry,將路徑參數寫入每次執行時去抓 給個Registry方式,範例片段你參考看看,相關參數下法請參考書籍 此範例為寫入/讀取以下該路徑的regedit HKEY_CURRENT_USER->Software->StyxSoft
 
H file
#include 
TRegistry *Registry;
cpp file
void __fastcall TForm1::FormCreate(TObject *Sender)
{
  Registry=new TRegistry;
  Registry->RootKey=HKEY_CURRENT_USER;
  bool result=Registry->OpenKey("Software",false);
  result=Registry->OpenKey("StyxSoft",false);
  if(result)
  {
   SaveInit=Registry->ReadString("SaveInit");
   SaveInitMon=Registry->ReadString("SaveInitMon");
   SaveInitCust=Registry->ReadString("SaveInitCust");
   SaveInitCust=Registry->ReadString("SaveInitProv");
   initBtn=StrToIntDef(Registry->ReadString("initBtn"),0);
   if(StrToIntDef(Registry->ReadString("SafeStock"),-1)==-1) SafeStock="10";
   else SafeStock=Registry->ReadString("SafeStock");
   Registry->CloseKey();
  }
  else//表示此程式第一次執行,先於此電腦regedit建立各機碼的初值
  {
   SaveInit=ExtractFilePath(Application->ExeName);
   SafeStock="10";
   SaveInitMon=SaveInit;
   SaveInitCust=SaveInit;
   SaveInitProv=SaveInit;
   Registry->CloseKey();
   Registry->OpenKey("Software",true);
   Registry->OpenKey("StyxSoft",true);
   Registry->WriteString("bool","ok");
   Registry->WriteString("ID","Admin");
   Registry->WriteString("Data","xxxxx");
   Registry->WriteString("initBtn","5");
   Registry->WriteString("SaveInit",SaveInit);
   Registry->WriteString("SaveInitMon",SaveInitMon);
   Registry->WriteString("SaveInitCust",SaveInitCust);
   Registry->WriteString("SaveInitProv",SaveInitProv);   
   Registry->WriteString("SafeStock",SafeStock);
   Registry->CloseKey();
  }
blk5743
高階會員


發表:34
回覆:371
積分:236
註冊:2003-11-17

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-03-10 18:59:51 IP:61.66.xxx.xxx 未訂閱
houngjc你好  是指想用相對路徑嗎    http://delphi.ktop.com.tw/topic.php?TOPIC_ID=66567 【問題】如何表示相對路徑
pika2005
初階會員


發表:27
回覆:48
積分:25
註冊:2005-02-17

發送簡訊給我
#7 引用回覆 回覆 發表時間:2005-03-11 04:52:30 IP:220.141.xxx.xxx 未訂閱
引言: 因為小弟一直找不出如何來做,所以想請問各位大大,一般我們開檔讀檔時都要在程式設定好路徑,但這樣很麻煩,想請問有沒有跟windows一樣,我只要用瀏覽方式,就可指定所要的路徑,當目錄更改時,也不必自行在程式裡更改路徑,只要用瀏覽指定設定更改方式就可以了,不曉得要如何著手?? 請各位大大幫忙!謝謝 < face="Verdana, Arial, Helvetica"> houngjc你好,使用shlobj.h,以下程式是我參考delphi.ktop前輩的, 應該符合你的需求,拉一個Edit1和SpeedButton1在Form上面... 按SpeedButton1選擇目錄,會顯現在Edit1
#include    // 要在#include 上面 
#define NO_WIN32_LEAN_AND_MEAN
#include 
#include     #pragma hdrstop    #include "MDIMAIN.h"    void __fastcall TChildFrame02::SpeedButton1Click(TObject *Sender)
{
         BROWSEINFO bi;
          char WDir[MAX_PATH];
          char FolderName[MAX_PATH];
          LPITEMIDLIST ItemID;              memset(&bi, 0, sizeof(BROWSEINFO));
          memset(WDir, 0, MAX_PATH);
          bi.hwndOwner = Handle;
          bi.pszDisplayName = FolderName;
          bi.lpszTitle = "Select Working Directory!";
          ItemID = SHBrowseForFolder(&bi);
          SHGetPathFromIDList(ItemID, WDir);
         Edit1->Text = String(WDir);
}
發表人 - taishyang 於 2005/03/11 09:14:13
pika2005
初階會員


發表:27
回覆:48
積分:25
註冊:2005-02-17

發送簡訊給我
#8 引用回覆 回覆 發表時間:2005-03-11 04:57:53 IP:220.141.xxx.xxx 未訂閱
引言:
引言:
#include // 要在#include 上面 #define NO_WIN32_LEAN_AND_MEAN #include #include
更正上一篇 #include // 要放在#include上面 #define NO_WIN32_LEAN_AND_MEAN #include #include
pika2005
初階會員


發表:27
回覆:48
積分:25
註冊:2005-02-17

發送簡訊給我
#9 引用回覆 回覆 發表時間:2005-03-11 05:06:24 IP:220.141.xxx.xxx 未訂閱
引言:
引言:
引言:
#include // 要在#include 上面 #define NO_WIN32_LEAN_AND_MEAN #include #include
更正上一篇 #include // 要放在#include上面 #define NO_WIN32_LEAN_AND_MEAN #include #include
怎麼跑不出來..>.< 引言又會出來..
blk5743
高階會員


發表:34
回覆:371
積分:236
註冊:2003-11-17

發送簡訊給我
#10 引用回覆 回覆 發表時間:2005-03-11 08:33:22 IP:61.66.xxx.xxx 未訂閱
pika2005你好 你好像是沒把你的include放在(插入Code)的代碼裡面,所以才出不來
houngjc
一般會員


發表:12
回覆:13
積分:5
註冊:2004-11-21

發送簡訊給我
#11 引用回覆 回覆 發表時間:2005-03-11 10:46:40 IP:203.204.xxx.xxx 未訂閱
感謝大大的解題!可是我照上面做還是不行內!有錯誤!因為不曉得如何加內!以下是我作小小測試! //--------------------------------------------------------------------------- #include  #include #pragma hdrstop #include "Unit1.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- void __fastcall TForm1::SpeedButton1Click(TObject *Sender) { BROWSEINFO bi; char WDir[MAX_PATH]; char FolderName[MAX_PATH]; LPITEMIDLIST ItemID; memset(&bi, 0, sizeof(BROWSEINFO)); memset(WDir, 0, MAX_PATH); bi.hwndOwner = Handle; bi.pszDisplayName = FolderName; bi.lpszTitle = "Select Working Directory!"; ItemID = SHBrowseForFolder(&bi); SHGetPathFromIDList(ItemID, WDir); Edit1->Text = String(WDir); } } //--------------------------------------------------------------------------- 不曉得是否跟大大說的一樣,那.h的檔都不用改嗎??,
houngjc
一般會員


發表:12
回覆:13
積分:5
註冊:2004-11-21

發送簡訊給我
#12 引用回覆 回覆 發表時間:2005-03-11 11:04:49 IP:203.204.xxx.xxx 未訂閱
pika2005大大可以了!謝謝!但是它有個警告說!!就是此行#pragma hdrstop 有加會有警告!這是什原因ㄚ!謝謝!
pika2005
初階會員


發表:27
回覆:48
積分:25
註冊:2005-02-17

發送簡訊給我
#13 引用回覆 回覆 發表時間:2005-03-11 13:33:35 IP:218.162.xxx.xxx 未訂閱
引言: pika2005你好 你好像是沒把你的include放在(插入Code)的代碼裡面,所以才出不來
blk5743您好啊,我早上看沒有,剛剛看又有..
引言: 是此行#pragma hdrstop 有加會有警告!這是什原因ㄚ!謝謝!
houngjc您好,我用BCB6.0 WinXP沒有這個警告呢..至於.h檔不用改.. #define NO_WIN32_LEAN_AND_MEAN 這行的用意參考底下連結的文章.. SHBrowseForFolder編譯錯誤 http://delphi.ktop.com.tw/topic.php?topic_id=26601 發表人 - pika2005 於 2005/03/11 18:35:36
pika2005
初階會員


發表:27
回覆:48
積分:25
註冊:2005-02-17

發送簡訊給我
#14 引用回覆 回覆 發表時間:2005-03-11 13:42:43 IP:218.162.xxx.xxx 未訂閱
引言: pika2005你好 你好像是沒把你的include放在(插入Code)的代碼裡面,所以才出不來
blk5743您好啊,上一篇PO錯.. "我使用(GB內碼)發言,請系統幫我自動轉碼",我還以為用這個..
引言: 就是此行#pragma hdrstop,有加會有警告!
houngjc你好,我用BCB6.0 WinXp沒有這個問題.. #define NO_WIN32_LEAN_AND_MEAN用意 參考以下連結文章 SHBrowseForFolder編譯錯誤 http://delphi.ktop.com.tw/topic.php?topic_id=26601
系統時間:2024-05-19 18:52:30
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!