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

BCB 編輯item 檔案內容

答題得分者是:herbert2
nba2005mt
一般會員


發表:5
回覆:9
積分:2
註冊:2012-09-03

發送簡訊給我
#1 引用回覆 回覆 發表時間:2012-09-28 09:56:27 IP:125.224.xxx.xxx 訂閱
 請教各位先進   我做了一個小程式 (類似檔案管理)
有五個按鈕 open save saveas delete edit 功能就像名稱
一個 listbox 顯示檔案名稱 一個richbox 顯示檔案內容 (.txt 檔)

現在碰到一個問題
edit 這個功能上面 richbox 本身可以編輯
不過當我開了一個以上檔案 檔案內容 只會顯示最後開的檔案
要如何 從listbox(已open過的) 裡選擇檔案來編輯呢?

請各位先進 指點迷津

herbert2
尊榮會員


發表:58
回覆:632
積分:878
註冊:2004-04-16

發送簡訊給我
#2 引用回覆 回覆 發表時間:2012-09-29 00:52:35 IP:202.39.xxx.xxx 訂閱
RichTextBox 只有一份記憶區,存著目前 Active 的資料內容。

A.txt 檔 Open 存入 RichTextBox 後,除非將其資料先另存至別處,
否則再開另一 B.txt 檔存進 RichTextBox,A.txt 檔的資料就被蓋掉不見了。
除非您重新 Open 該 A.txt 檔,存入 RichTextBox,
或將修改後另存別處的 A.txt 內容,再次存入 RichTextBox,
才會再重現 A.txt 的內容。
nba2005mt
一般會員


發表:5
回覆:9
積分:2
註冊:2012-09-03

發送簡訊給我
#3 引用回覆 回覆 發表時間:2012-10-01 12:13:12 IP:125.224.xxx.xxx 訂閱
不好意思  我貼上我的程式碼   請問該如何改呢?
如果我開啟超過兩個檔案 我點Edit按鈕時 Memo 會出現Item 項次(我是要顯示TXT檔內容)
請問我這樣 有把檔案內容 暫存到嗎?
又該如何讀出呢?


這是我 Open Button的程式碼
void __fastcall TForm1::Open_BtClick(TObject *Sender)
{
AnsiString Name;
TStringList *pSList = new TStringList; //- --memo01
OpenDialog1->Filter = "TXT files (*.TXT)";
if(OpenDialog1->Execute())
{
RichEdit1->Lines->LoadFromFile( OpenDialog1->FileName );
FileName = OpenDialog1->FileName;
//--------------------------------------- Memo1
Memo1->Lines->LoadFromFile( OpenDialog1->FileName );
FileName = OpenDialog1->FileName;
for (int i =0;iItems->Count; i )
pSList->Add(ListBox1->Items->Strings[i]);
pSList->SaveToFile("c:\\temp.txt");
delete pSList;
AnsiString FileName = ChangeFileExt(ExtractFileName(OpenDialog1->FileName), "");
ListBox1->Items->Add(FileName);
}
}

這是我 Edit Button的程式碼
void __fastcall TForm1::Edit_BtClick(TObject *Sender)
{
ListBox1->Items->operator [](ListBox1->ItemIndex);
Memo1->Lines->Add( ListBox1->ItemIndex );
}
herbert2
尊榮會員


發表:58
回覆:632
積分:878
註冊:2004-04-16

發送簡訊給我
#4 引用回覆 回覆 發表時間:2012-10-03 03:22:04 IP:202.39.xxx.xxx 訂閱
要貼程式碼,最起碼要能 Compile 吧!

===================引 用 nba2005mt 文 章===================
不好意思 我貼上我的程式碼 請問該如何改呢?
如果我開啟超過兩個檔案 我點Edit按鈕時 Memo 會出現Item 項次(我是要顯示TXT檔內容)
請問我這樣 有把檔案內容 暫存到嗎?
又該如何讀出呢?


這是我 Open Button的程式碼
void __fastcall TForm1::Open_BtClick(TObject *Sender)
{
AnsiString Name; // 變數名稱對嗎?
TStringList *pSList = new TStringList; //- --memo01
OpenDialog1->Filter = "TXT files (*.TXT)";
if(OpenDialog1->Execute())
{
RichEdit1->Lines->LoadFromFile( OpenDialog1->FileName );
FileName = OpenDialog1->FileName; // Compile 會過嗎?
//--------------------------------------- Memo1
Memo1->Lines->LoadFromFile( OpenDialog1->FileName );
FileName = OpenDialog1->FileName; // Compile 會過嗎?
for (int i =0;iItems->Count; i )
pSList->Add(ListBox1->Items->Strings[i]); // for() 中之 iItems 對嗎?
pSList->SaveToFile("c:\\temp.txt");
delete pSList; // 在 if() 外面 new, 在此 delete, 萬一 OpenDialog1 選取消, 那不就沒 delete 了嗎?
AnsiString FileName = ChangeFileExt(ExtractFileName(OpenDialog1->FileName), ""); // ListBox1 不存 FIle Extension Name, 若需存檔, 恰當嗎?
ListBox1->Items->Add(FileName);
}
}

這是我 Edit Button的程式碼
void __fastcall TForm1::Edit_BtClick(TObject *Sender)
{
ListBox1->Items->operator [](ListBox1->ItemIndex); // 這結果您試過嗎?
Memo1->Lines->Add( ListBox1->ItemIndex ); // IntemIndex 是數值而非內容, 您意欲為何?
}
nba2005mt
一般會員


發表:5
回覆:9
積分:2
註冊:2012-09-03

發送簡訊給我
#5 引用回覆 回覆 發表時間:2012-10-03 13:22:34 IP:125.224.xxx.xxx 訂閱
 不好意思

我有compile 過 沒有error


run 出來的結果是

我用open按鈕 開兩個檔案出來 listbox 內會顯示檔名
檔案內容在richbox (只會顯示最後開的檔案)
(memo 也會有 )

我用滑鼠點listbox 裡其中一個檔案 在點 edit按鈕
原本memo的內容會清除 然後出現 檔案在listbox 裡的 項次(0, 1 , 2 , 3 , ....)
因為一直試不出來 所以貼上compile 可以過的程式碼

在.h檔還有這段
public:// User declarations
AnsiString FileName;
編輯記錄
nba2005mt 重新編輯於 2012-10-02 23:25:38, 註解 無‧
nba2005mt 重新編輯於 2012-10-02 23:25:40, 註解 無‧
herbert2
尊榮會員


發表:58
回覆:632
積分:878
註冊:2004-04-16

發送簡訊給我
#6 引用回覆 回覆 發表時間:2012-10-04 22:01:03 IP:202.39.xxx.xxx 訂閱
有 compile 過沒有 error 並不表示 Code 能達到您的目的。

RichBox 本來就是只會顯示您填給他的資料,當您開第2個檔並將資料填進去,
當然是顯示第2個檔的資料;當您點選第1個檔的檔名,若不重新將第1個檔的資料填進去,
那它怎麼可能顯示第1個檔的資料?若真會自動顯示第1個檔的資料,那這個程式語言還真該丟到垃圾桶去了!

再次強調,您要隨時在 RichBox 顯示檔案的內容,您就必須先取得該內容:重新從磁碟讀入或從記憶體中讀取,並填進去。
從您的 Code 中,看不到您做這些動作,而且您有些 Statement 似與您所想要的結果無關,
所以才問您『意欲為何?』

您在 .h 檔宣告public 的 FileName 是可以的,所以Compile 沒 Error。
但您在 Open_BtClick() 中又再次宣告 FileName,雖然因其生存期不同而不算錯,但終會把自己和別人搞混的。
編輯記錄
herbert2 重新編輯於 2012-10-04 08:01:42, 註解 無‧
herbert2 重新編輯於 2012-10-04 08:02:07, 註解 無‧
herbert2 重新編輯於 2012-10-04 08:03:38, 註解 無‧
系統時間:2017-10-19 4:00:23
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!