houngjc
一般會員
發表:12 回覆:13 積分:5 註冊:2004-11-21
發送簡訊給我
|
因為小弟一直找不出如何來做,所以想請問各位大大,一般我們開檔讀檔時都要在程式設定好路徑,但這樣很麻煩,想請問有沒有跟windows一樣,我只要用瀏覽方式,就可指定所要的路徑,當目錄更改時,也不必自行在程式裡更改路徑,只要用瀏覽指定設定更改方式就可以了,不曉得要如何著手?? 請各位大大幫忙!謝謝
|
folkchen
高階會員
發表:9 回覆:232 積分:173 註冊:2003-10-09
發送簡訊給我
|
你試試 OpenDialog
若不會用的話,可以在站內搜尋一下
|
segat80
一般會員
發表:5 回覆:24 積分:15 註冊:2003-02-10
發送簡訊給我
|
houngjc你好:
你所說的是指像windows開啟檔案時,會有一個檔案選擇視窗嗎??
若是的話,你可以使用OpenDialogs這個元件來達到此功能。
關於用法請參照各BCB書籍都介紹~
|
houngjc
一般會員
發表:12 回覆:13 積分:5 註冊:2004-11-21
發送簡訊給我
|
感謝大大回答,那不知我使用OpenDialogs的方法,可否抓取我要的目錄路徑,因為每次開檔存檔時,如目錄改變了,就得到程式裡改路徑,我想說能不能跟環境設定一樣,將預設目錄指定好後,如果將來目錄改了的話,用瀏覽的icon就可指定設定我要的路徑了!我想要的功能是這樣!不知各位大大!這樣會很難嗎??(想從一般的C轉成BCB)
|
rogan321
高階會員
發表:21 回覆:307 積分:200 註冊:2003-05-15
發送簡訊給我
|
執行碼是不能更改的
要紀錄路徑可用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
發送簡訊給我
|
|
pika2005
初階會員
發表:27 回覆:48 積分:25 註冊:2005-02-17
發送簡訊給我
|
引言:
因為小弟一直找不出如何來做,所以想請問各位大大,一般我們開檔讀檔時都要在程式設定好路徑,但這樣很麻煩,想請問有沒有跟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
發送簡訊給我
|
引言:
引言:
#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
發送簡訊給我
|
引言:
引言:
引言:
#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
發送簡訊給我
|
pika2005你好 你好像是沒把你的include放在(插入Code)的代碼裡面,所以才出不來
|
houngjc
一般會員
發表:12 回覆:13 積分:5 註冊:2004-11-21
發送簡訊給我
|
感謝大大的解題!可是我照上面做還是不行內!有錯誤!因為不曉得如何加內!以下是我作小小測試!
//---------------------------------------------------------------------------
#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
發送簡訊給我
|
pika2005大大可以了!謝謝!但是它有個警告說!!就是此行#pragma hdrstop
有加會有警告!這是什原因ㄚ!謝謝!
|
pika2005
初階會員
發表:27 回覆:48 積分:25 註冊:2005-02-17
發送簡訊給我
|
引言:
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
發送簡訊給我
|
引言:
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
|