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

如何使用RichEdit將多行文字檔寫入

尚未結案
Miki-lion
中階會員


發表:90
回覆:180
積分:54
註冊:2005-04-24

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-08-14 15:29:48 IP:218.162.xxx.xxx 未訂閱
假設今天我將一斷多行的文字輸入到RichEdit1,然後在RichEdit2裡頭要顯示出來, 問題就是在於只知道他的開頭位置,不知道他的結尾是有多少行數,所以會連帶影響RichEdit下面的編排, 如果只是單行的文字,那就沒有這項問題,直接告知要顯示的行列數就好了。
 void__Netcall Find::(TComponent* Owner);//目標字句
{  
   Target *Sender://在這位置輸入多行的話,勢必將下面的Target2 *Sender內容給往下擠    
   Target2 *Sender://所以無法給予確定的位置
RedSnow
版主


發表:79
回覆:1322
積分:845
註冊:2003-12-15

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-08-15 23:34:26 IP:59.115.xxx.xxx 未訂閱
Miki-lion 妳好:    妳這個問題是卡在各個項目都有預先設好要處理的位置,因此擔心某項目有多行資料時,會影響到其它項目位置的變動,那麼妳不妨考慮建立一個結構資料,結構中可以包含要處理的行、列、輸入資料的長度....等數據,甚至是項目的輸入值,然後再宣告一個前述結構資料的陣列,對應到各個需要處理的項目,當資料有變更時,就記錄到 (或修改) 對應的結構資料中,以妳描述的問題來說,就可以記錄下該項目所輸入的 "資料長度",如果有必要的話,妳也可以多加一項 "行數" 的紀錄 (在 RichEdit1 輸入的資料共佔用多少字元數,或是共佔用了幾行?),如此一來,妳就可以在處理各個項目時,計算出變動後的行、列位置了。      7 天天敲鍵盤 v 時時按滑鼠 8
Miki-lion
中階會員


發表:90
回覆:180
積分:54
註冊:2005-04-24

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-08-17 23:05:55 IP:218.162.xxx.xxx 未訂閱
我了解前輩的解法,不用在BCB實作上,我就真的無從下手。 我有試著用你教過我的Insert的方法來做,不過因為我需要輸入2個多行文字。 第1個還可以知道他的起始位置,Insert進去後,第2個起始位置就先判斷剛剛Insert文字的行數。 EX:輸入第一串:111111 222222 333333 第二串文字: 第2串被往下推之後的起始位置就是第一串的行數加1,這是我想到的方法 可是要如何判斷他有"幾行",我就不會了,是判斷他有幾個換行嗎? 當慢慢的開始懂程式後,才發覺原來懂得也不是那麼多,越深入難題越多,也越有成就感。
RedSnow
版主


發表:79
回覆:1322
積分:845
註冊:2003-12-15

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-08-17 23:45:26 IP:59.115.xxx.xxx 未訂閱
Miki-lion 妳好:
引言:EX:輸入第一串:111111 222222 333333 第二串文字: 第2串被往下推之後的起始位置就是第一串的行數加1,這是我想到的方法 可是要如何判斷他有"幾行",我就不會了,是判斷他有幾個換行嗎?
用檢查 RichEdit1->Lines->Text 中的換行符號,或者是用 RichEdit1->Lines->Count 都應該可以取得 "行數",取得後就將它記錄下來,在輸入第二個字串時,就可以將記錄下的數字 (第一個字串佔用的行數) 取出來運算,以取得第二個字串應該放置的位置,試試看吧。 7 天天敲鍵盤 v 時時按滑鼠 8
Miki-lion
中階會員


發表:90
回覆:180
積分:54
註冊:2005-04-24

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-08-18 01:42:36 IP:218.162.xxx.xxx 未訂閱
我弄了這個將輸入RichEdit2的內容放進RichEdit3的程式    還沒加上判斷行數的部份,我想問一下紅色的部份可以這麼寫嗎?    
 void __fastcall TForm1::RichEdit3Change(TObject *Sender)
{
int row = 10;  // 要處理的資料行數 (Row)
int col = 11;  // 要處理的資料行位置 (Column)
AnsiString temp = RichEdit2->Lines->Strings[row];    if (RichEdit3->Lines->Text.Length() > 0) {  //這樣子對嗎?
    int len = temp.Length();
    if(len < col){
        RichEdit2->Lines->Strings[row] = temp   AnsiString::StringOfChar(' ', col - len);
    }
    temp = temp.SubString(1, col-1)   RichEdit3->Lines->   temp.SubString(col oldlen, temp.Length()-((col oldlen)-1));
    oldlen = RichEdit3->Lines->Text.Length()   1;
} else {
    temp = temp.SubString(1, col-1)   temp.SubString(col oldlen, temp.Length()-((col oldlen)-1));
    oldlen = 0;
}    RichEdit2->Lines->Strings[row] = temp;
}
當慢慢的開始懂程式後,才發覺原來懂得也不是那麼多,越深入難題越多,也越有成就感。
RedSnow
版主


發表:79
回覆:1322
積分:845
註冊:2003-12-15

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-08-20 00:52:24 IP:61.230.xxx.xxx 未訂閱
Miki-lion 妳好:    抱歉,忘了回覆妳前一篇的那個問題,答案是肯定的,妳用紅色標示的那一行是 OK 的。      7 天天敲鍵盤 v 時時按滑鼠 8
Miki-lion
中階會員


發表:90
回覆:180
積分:54
註冊:2005-04-24

發送簡訊給我
#7 引用回覆 回覆 發表時間:2005-08-20 18:10:17 IP:218.162.xxx.xxx 未訂閱
前輩你好,冒昧問一下
引言: temp = temp.SubString(1, col-1) RichEdit3->Lines-> temp.SubString(col oldlen, temp.Length()-((col oldlen)-1)); oldlen = RichEdit3->Lines->Text.Length() 1;
我編譯時這一行會出現錯誤碼訊息 錯誤訊息: Member identifier expected 請問是什麼意思呢?要如何來更改?
RedSnow
版主


發表:79
回覆:1322
積分:845
註冊:2003-12-15

發送簡訊給我
#8 引用回覆 回覆 發表時間:2005-08-20 18:27:07 IP:59.115.xxx.xxx 未訂閱
Miki-lion 妳好:
引言:前輩你好,冒昧問一下
引言: temp = temp.SubString(1, col-1) RichEdit3->Lines-> temp.SubString(col oldlen, temp.Length()-((col oldlen)-1)); oldlen = RichEdit3->Lines->Text.Length() 1;
我編譯時這一行會出現錯誤碼訊息 錯誤訊息: Member identifier expected 請問是什麼意思呢?要如何來更改?
妳那一行敘述中漏了一些部分:
temp = temp.SubString(1, col-1)   RichEdit3->Lines->   temp.SubString(col oldlen, temp.Length()-((col oldlen)-1));
看到上方以紅色標示出來的部份了嗎?我不清楚妳要達到何種結果?不過依據妳那行敘述來看,應該是要在紅色字樣的後方補上 Strings[row],要不然就是將該句改成 RichEdit3->Text,試試看吧。 7 天天敲鍵盤 v 時時按滑鼠 8 發表人 - RedSnow 於 2005/08/20 18:29:57
Miki-lion
中階會員


發表:90
回覆:180
積分:54
註冊:2005-04-24

發送簡訊給我
#9 引用回覆 回覆 發表時間:2005-08-20 20:22:09 IP:218.162.xxx.xxx 未訂閱
我知道了,我以為RichEdit後面是接Lines,是我弄錯了,程式可以正常編譯了。 我是想要把
Miki-lion
中階會員


發表:90
回覆:180
積分:54
註冊:2005-04-24

發送簡訊給我
#10 引用回覆 回覆 發表時間:2005-08-22 15:06:42 IP:218.162.xxx.xxx 未訂閱
我弄了2天,試過一些方法不過依然都不行,我是想要將2個RichEdit輸入的內容放進另一個RichEdit裡頭。    我想到的比較簡單來判斷的方法是,將2個RichEdit的內容指向同樣的程序。    輸入RichEdit1 3型空行 RichEdit2的內容。大致上是這樣。 所以我使用上次學到的程式 http://delphi.ktop.com.tw/topic.php?TOPIC_ID=75335 不過RichEdit1一旦輸入後就會自行產生空行,我更改了很多次,也都會有其他的錯誤功能在。 我Try了2天只好又上來問,有前輩願意分享解決方式的話,感激不盡。 EX: Richedit1:輸入的內容 Richedit1:輸入的內容 Richedit1:輸入的內容 Richedit1:輸入的內容 ///////固定的格式分開2個內容/////// Richedit2:輸入的內容 Richedit2:輸入的內容 Richedit2:輸入的內容 Richedit2:輸入的內容
RedSnow
版主


發表:79
回覆:1322
積分:845
註冊:2003-12-15

發送簡訊給我
#11 引用回覆 回覆 發表時間:2005-08-22 22:27:59 IP:61.217.xxx.xxx 未訂閱
Miki-lion 妳好:    妳還是將妳現在寫的程式 (與本問題相關的部份) 貼上來,然後描述一下目前有何種錯誤?正確的結果應該是如何的?可能的話就用手工的方式做成圖檔貼上來,一是目標 RichEdit 的原先內容,二是輸入資料後的變化。      7 天天敲鍵盤 v 時時按滑鼠 8
Miki-lion
中階會員


發表:90
回覆:180
積分:54
註冊:2005-04-24

發送簡訊給我
#12 引用回覆 回覆 發表時間:2005-08-22 23:38:56 IP:61.225.xxx.xxx 未訂閱
就是像以下的圖一樣    先在這2個RichEdit輸入內容 空5行後在第6行放上第2個RichEdit的內容 之所以這樣寫,是因為我想這樣在第2個元件所輸入的內容,就不用去判斷他的起始位置。 空行的部份我是用迴圈去產生,但是我不知道數字要訂多大來記算,所以有點問題在,先分開述敘一下。 產生空行的程式
for(i=0;i<=50;i++)
  {
  RichEdit2->Lines->Add("");
   }
int col = 11;  // 要處理的欄位數 (Column)
    int row = 9;  // 要處理的行數 (Row)
    if (RichEdit2->Lines->Count < row+1) { // 如果 RichEdit 行數不足 10 行
        for (int i=RichEdit2->Lines->Count; i<10; i++) {
            RichEdit2->Lines->Add("");  // 產生足夠的空行
        }
    }
    AnsiString temp = RichEdit2->Lines->Strings[row];  // 設 temp 為 RichEdit1 第 row 行的內容
    AnsiString t1 = RichEdit3->Text;  // 設 t1 為 RichEdit3的內容
    AnsiString t2 = RichEdit4->Text;  // 設 t2 為 RichEdit4 的內容
    int len1 = t1.Length();  // 設 len1 為 RichEdit3 的字數
    int len2 = t2.Length();  // 設 len2 為 RichEdit4 的字數
    if (len1 > 0 || len2 > 0) {  // 如果 MaskEdit1 或 MaskEdit2 不是空的
        int len = temp.Length();  // 設 len 為 RichEdit1 第 row 行內容的字數
        if(len < col){  // 如果資料行字元數少於 col 值,則以空白字元補足它
            RichEdit2->Lines->Strings[row] = temp + AnsiString::StringOfChar(' ', col - len);
            temp = RichEdit2->Lines->Strings[row];
        }            // 將字串組合為:資料行原來 1~col-1 的資料 + RichEdit3 + RichEdit4 + 資料行原來 col
        temp = temp.SubString(1, col-1) + t1 +/*6行空行+*/ t2 + temp.SubString(col+oldlen, temp.Length()-((col+oldlen)-1));
        oldlen = t1.Length() + t2.Length();  // 設定 oldlen 為兩個 RichEdit 內容的長度 (包含 % 符號在內)
    } else {
        temp = temp.SubString(1, col-1) + temp.SubString(col+oldlen, temp.Length()-((col+oldlen)-1));
        oldlen = 0;
    }        RichEdit2->Lines->Strings[row] = temp; // 將重新組合過的字串設回給 RichEdit 第 row 行
 
發表人 - miki-lion 於 2005/08/22 23:47:23
RedSnow
版主


發表:79
回覆:1322
積分:845
註冊:2003-12-15

發送簡訊給我
#13 引用回覆 回覆 發表時間:2005-08-27 15:03:39 IP:59.115.xxx.xxx 未訂閱
Miki-lion 妳好:    很抱歉,前幾天在忙私事,沒時間做回覆,對於妳這次的問題,我試了一下,感覺不是很好寫 (可能忙自己的事情而有點心不在焉,碰到了盲點),目前我能想到比較簡單的方法是:使用另一個不顯示的 RichEdit 元件 (如果有用到 RichEdit 的一些特性),或是使用其它可以記錄相同內容的物件 (無需用到 RichEdit 的特性) 來儲存目標 RichEdit 的內容 (以下稱 "暫存物件" 以便說明),當妳改變那兩個輸入資料的 RichEdit 內容後,就將輸入的內容與前述那個 "暫存物件" 的內容重新組合一次,然後設給 目標 RichEdit,妳不妨試試看。 如果妳覺得前述方式可行的話,要記得組合資料時,要按照由下而上的順序來處理,也就是先組合 "第二個輸入字串" 到 "暫存物件",然後再組合 "第一個輸入字串" 到 "暫存物件" 去,我舉各簡單的例子如下: 假設條件: RichEdit1 為輸入 "第一個輸入字串" 的元件。 RichEdit2 為輸入 "第二個輸入字串" 的元件。 RichEditResult 為顯示組合內容的元件。 RichEditTemp 為不顯示的暫存元件。 RichEdit1 及 RichEdit2 的內容有做變更後,就重新組合資料內容:
void __fastcall TForm1::RichEditChange(TObject *Sender)
{
    RichEditResult->Lines->BeginUpdate();        int row1, col1;  // 要處理位置的第一個行數 (Row) 與欄位數 (Column)
    int row2, col2;  // 要處理位置的第二個行數 (Row) 與欄位數 (Column)
    AnsiString temp, t1, t2;  // 暫存用的字串變數        // 第一個插入位置
    col1 = 22;
    row1 = 25;        // 第二個插入位置
    col2 = 20;
    row2 = 30;        RichEditResult->Text = RichEditTemp->Text;  // 重新將 RichEditResult 內容設成與 RichEditTemp 相同        // 先處理第二個插入位置
    temp = RichEditResult->Lines->Strings[row2];
    t1 = temp.SubString(1, col2);  // 拆解出插入位置左方資料
    t2 = temp.SubString(col2 1, temp.Length()-col2);  // 拆解出插入位置右方資料
    RichEditResult->Lines->Strings[row2] = t1   RichEdit2->Text   t2;  // 將 RichEdit2 的內容組合到插入位置        // 再處理第一個插入位置
    temp = RichEditResult->Lines->Strings[row1];
    t1 = temp.SubString(1, col1-1);  // 拆解出插入位置左方資料
    t2 = temp.SubString(col1, temp.Length()-(col1-1));  // 拆解出插入位置右方資料
    RichEditResult->Lines->Strings[row1] = t1   RichEdit1->Text   t2;  // 將 RichEdit1 的內容組合到插入位置        RichEditResult->Lines->EndUpdate();
}
7 天天敲鍵盤 v 時時按滑鼠 8
Miki-lion
中階會員


發表:90
回覆:180
積分:54
註冊:2005-04-24

發送簡訊給我
#14 引用回覆 回覆 發表時間:2005-08-29 15:18:49 IP:218.162.xxx.xxx 未訂閱
有前輩肯回應已經是很幸運的事情了~謝謝^^ 這方法我壓根都沒有想到~(用第3個看不到的RichEdit) 關於這一個: RichEditTemp 為不顯示的暫存元件。 想請問我該如何處理?一樣拉一個元件,然後把他的Visible->false。 這樣就可以了嗎?
RedSnow
版主


發表:79
回覆:1322
積分:845
註冊:2003-12-15

發送簡訊給我
#15 引用回覆 回覆 發表時間:2005-08-29 17:57:07 IP:61.217.xxx.xxx 未訂閱
Miki-lion 妳好:
引言:關於這一個: RichEditTemp 為不顯示的暫存元件。 想請問我該如何處理?一樣拉一個元件,然後把他的Visible->false。 這樣就可以了嗎?
是的,妳僅需要拉一個 RichEdit 元件到 Form 上,然後將該元件的 Visible 屬性設為 false 即可,但是為了避免資料位置的計算出錯,妳最好將這個隱藏元件與那個目標元件的各個屬性都設為相同 (除了前述的 Visible 屬性之外),尤其是 WordWrap 屬性 (最好都設為 false,也就是文字資料超過 RichEdit 視框寬度時,不做自動換行的動作)。 7 天天敲鍵盤 v 時時按滑鼠 8
Miki-lion
中階會員


發表:90
回覆:180
積分:54
註冊:2005-04-24

發送簡訊給我
#16 引用回覆 回覆 發表時間:2005-08-29 21:13:50 IP:218.162.xxx.xxx 未訂閱
請問一下就算是這樣來做的話,那麼第二個的處理行數從何而來(row2, col2)    它不是不一定的嗎?(會被第一個往下擠) 另外我實做後發現它只會顯示RichEditTemp的內容,一旦輸入後文字後就是一片空白。 RichEditResult->Text = RichEditTemp->Text; 另外將RichEdit1和2的OnChange都指向同一個對吧~我怕我又這裡誤解了 發表人 - miki-lion 於 2005/08/29 21:25:29
RedSnow
版主


發表:79
回覆:1322
積分:845
註冊:2003-12-15

發送簡訊給我
#17 引用回覆 回覆 發表時間:2005-08-29 22:51:12 IP:61.230.xxx.xxx 未訂閱
引言:請問一下就算是這樣來做的話,那麼第二個的處理行數從何而來(row2, col2) 它不是不一定的嗎?(會被第一個往下擠)
所以我才會在前面提醒妳: 組合資料時,要按照由下而上的順序來處理,也就是先組合 "第二個輸入字串" 到 "暫存物件",然後再組合 "第一個輸入字串" 到 "暫存物件" 去 而且程式碼也是 "先處理第二個插入位置",然後 "再處理第一個插入位置"。
引言:另外我實做後發現它只會顯示RichEditTemp的內容,一旦輸入後文字後就是一片空白。 RichEditResult->Text = RichEditTemp->Text;
我是做過測試,確認程式可達到要求後才將程式碼貼上來的,不清楚妳的實際狀況是什麼?無法回答妳這個問題,妳將程式上傳到站上來吧。
引言:另外將RichEdit1和2的OnChange都指向同一個對吧~我怕我又這裡誤解了
是的。 7 天天敲鍵盤 v 時時按滑鼠 8
Miki-lion
中階會員


發表:90
回覆:180
積分:54
註冊:2005-04-24

發送簡訊給我
#18 引用回覆 回覆 發表時間:2005-08-30 01:12:33 IP:218.162.xxx.xxx 未訂閱
我只有更改了元件名稱符合我的程式而已~ 假設條件: RichEdit3 為輸入 "第一個輸入字串" 的元件。 RichEdit4 為輸入 "第二個輸入字串" 的元件。 RichEdit2 為顯示組合內容的元件。 RichEditTemp 為不顯示的暫存元件。 我測試結果是不管先從哪一個元件輸入,RichEditTemp的Lines內容就會出來 我相信程式是可以的,只是我又笨笨的不知道漏掉哪裡。
void __fastcall TForm1::RichEditChange(TObject *Sender)
{
    RichEdit2->Lines->BeginUpdate();        int row1, col1;  // 要處理位置的第一個行數 (Row) 與欄位數 (Column)
    int row2, col2;  // 要處理位置的第二個行數 (Row) 與欄位數 (Column)
    AnsiString temp, t1, t2;  // 暫存用的字串變數        // 第一個插入位置
    col1 = 22;
    row1 = 25;        // 第二個插入位置
    col2 = 20;
    row2 = 30;        RichEdit2->Text = RichEditTemp->Text;  // 重新將 RichEditResult 內容設成與 RichEditTemp 相同        // 先處理第二個插入位置
    temp = RichEdit2->Lines->Strings[row2];
    t1 = temp.SubString(1, col2);  // 拆解出插入位置左方資料
    t2 = temp.SubString(col2 1, temp.Length()-col2);  // 拆解出插入位置右方資料
    RichEdit2->Lines->Strings[row2] = t1   RichEdit4->Text   t2;  // 將 RichEdit2 的內容組合到插入位置        // 再處理第一個插入位置
    temp = RichEdit2->Lines->Strings[row1];
    t1 = temp.SubString(1, col1-1);  // 拆解出插入位置左方資料
    t2 = temp.SubString(col1, temp.Length()-(col1-1));  // 拆解出插入位置右方資料
    RichEdit2->Lines->Strings[row1] = t1   RichEdit3->Text   t2;  // 將 RichEdit1 的內容組合到插入位置        RichEdit2->Lines->EndUpdate();
} 
RedSnow
版主


發表:79
回覆:1322
積分:845
註冊:2003-12-15

發送簡訊給我
#19 引用回覆 回覆 發表時間:2005-08-30 14:39:23 IP:61.230.xxx.xxx 未訂閱
Miki-lion 妳好:    可能是妳未將下列的數字做更改所致的吧?那些數字是我配合我這邊的測試資料使用的,妳必須將它們更改為妳現在實際使用的資料位置
    // 第一個插入位置
    col1 = 22;
    row1 = 25;        // 第二個插入位置
    col2 = 20;
    row2 = 30;
7 天天敲鍵盤 v 時時按滑鼠 8
順子
一般會員


發表:3
回覆:14
積分:6
註冊:2002-06-25

發送簡訊給我
#20 引用回覆 回覆 發表時間:2005-08-30 15:20:13 IP:210.202.xxx.xxx 未訂閱
這是我的作法 Unit1.h
//---------------------------------------------------------------------------    #ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------
#include 
#include 
#include 
#include <Forms.hpp>
#include 
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published:        // IDE-managed Components
    TRichEdit *RichEdit1;
    TRichEdit *RichEdit2;
    TEdit *Edit1;
    TButton *Button1;
    void __fastcall Button1Click(TObject *Sender);
private:        // User declarations
public:                // User declarations
    __fastcall TForm1(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif    
==================================================================== Unit1.cpp
#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::Button1Click(TObject *Sender)
{

    int iInsertLine = Edit1->Text.ToInt(); // 要插入RichEdit2的位置
    for (int i=RichEdit1->Lines->Count-1;i>=0;i--)
    {
        RichEdit2->Lines->Insert(iInsertLine,RichEdit1->Lines->Strings[i]);
    }
    RichEdit1->Clear();    }
//---------------------------------------------------------------------------
BCB新手~~請多多指教
------
Hello!!
我是順子、順子是我
Miki-lion
中階會員


發表:90
回覆:180
積分:54
註冊:2005-04-24

發送簡訊給我
#21 引用回覆 回覆 發表時間:2005-09-10 23:49:02 IP:218.162.xxx.xxx 未訂閱
因為前陣子趁開學前出去玩一陣子~一直沒有回覆結束討論~真是抱歉 我更改了行列數後還是一樣只會顯示>內容 } //--------------------------------------------------------------------------- >內容 } //--------------------------------------------------------------------------- 這 >
Miki-lion
中階會員


發表:90
回覆:180
積分:54
註冊:2005-04-24

發送簡訊給我
#22 引用回覆 回覆 發表時間:2005-09-10 23:56:40 IP:218.162.xxx.xxx 未訂閱
TO:順子大大    謝謝你的回答!    不過我需要的是將2個RichEdit的內容,合併放在另一個RichEdit裡。    並且連欄位數都必須指定~所以只有行數是不行的。    雖然用不上但還是感謝你的回答!! 發表人 -
RedSnow
版主


發表:79
回覆:1322
積分:845
註冊:2003-12-15

發送簡訊給我
#23 引用回覆 回覆 發表時間:2005-09-11 11:49:01 IP:61.230.xxx.xxx 未訂閱
Miki-lion 妳好:    請注意一下我原先的提示:
引言:使用另一個不顯示的 RichEdit 元件 (如果有用到 RichEdit 的一些特性),或是使用其它可以記錄相同內容的物件 (無需用到 RichEdit 的特性) 來儲存目標 RichEdit 的內容 (以下稱 "暫存物件" 以便說明),當妳改變那兩個輸入資料的 RichEdit 內容後,就將輸入的內容與前述那個 "暫存物件" 的內容重新組合一次,然後設給 目標 RichEdit
這個意思是說:預先將 RichEditTemp 的內容與 RichEditResult 設為相同,妳沒有做這樣的設定,因此 RichEditTemp 的內容是空的,所以才會發生妳描述的那個問題,妳僅需要在 Design mode 直接設好 RichEditTemp 的內容,或是在程式啟動時用程式碼來設定 (例如在 Form 的 OnCreate 事件中設定 RichEditTemp->Text = RichEdit2->Text;) 都可以的,試試看吧。 7 天天敲鍵盤 v 時時按滑鼠 8 發表人 - RedSnow 於 2005/09/11 12:00:40
Miki-lion
中階會員


發表:90
回覆:180
積分:54
註冊:2005-04-24

發送簡訊給我
#24 引用回覆 回覆 發表時間:2005-09-11 13:56:00 IP:218.162.xxx.xxx 未訂閱
引言: 妳僅需要在 Design mode 直接設好 RichEditTemp 的內容,或是在程式啟動時用程式碼來設定 (例如在 Form 的 OnCreate 事件中設定 RichEditTemp->Text = RichEdit2->Text;) 都可以的,試試看吧。
1.請問在 Design mode 直接設好 RichEditTemp 的內容 的作法是什麼?我不了解這個意思 2.Form 的 OnCreate 事件中設定 RichEditTemp->Text = RichEdit2->Text;) 指的是新增加一個函式例如:
void __fastcall TForm1::FormEdit(TObject *Sender)
  {
  RichEditTemp->Text = RichEdit2->Text;)  
  }
  再把Form 的 OnCreate指向這邊對嗎?
  
RedSnow
版主


發表:79
回覆:1322
積分:845
註冊:2003-12-15

發送簡訊給我
#25 引用回覆 回覆 發表時間:2005-09-11 19:18:01 IP:61.217.xxx.xxx 未訂閱
Miki-lion 妳好:
引言:1.請問在 Design mode 直接設好 RichEditTemp 的內容 的作法是什麼?我不了解這個意思
Design mode 也可稱為 Design-Time 指的是 "設計模式" 或是 "設計時期",也就是在啟動 BCB 之後,可以編修程式碼及調整視覺元件的狀態,我那句話的意思是說妳可以在編輯模式下,先選擇 RichEditTemp 元件,然後在 Object Inspector 視窗中,直接用滑鼠點擊 Lines 屬性項目,然後輸入與 RichEdit2 相同的內容,也就是和妳當初設定 RichEdit2 內容的方式相同。
引言:2.Form 的 OnCreate 事件中設定 RichEditTemp->Text = RichEdit2->Text;) 指的是新增加一個函式例如:
void __fastcall TForm1::FormEdit(TObject *Sender)
  {
  RichEditTemp->Text = RichEdit2->Text;)  
  }
  再把Form 的 OnCreate指向這邊對嗎?
  
妳可以直接在前述的編輯模式下,先選擇 Form1,在 Object Inspector 的事件表找到 Form1 的 OnCreate 項目,然後點擊滑鼠左鍵兩次,BCB 就會自動產生一個空的 FormCreate 模板,妳就將我講的那一行敘述複製到該事件中就可以了。 7 天天敲鍵盤 v 時時按滑鼠 8
Miki-lion
中階會員


發表:90
回覆:180
積分:54
註冊:2005-04-24

發送簡訊給我
#26 引用回覆 回覆 發表時間:2005-09-11 22:01:37 IP:218.162.xxx.xxx 未訂閱
謝謝已經可以了~原來是漏掉將RichEditTemp元件的Lines 屬性寫入內容這部份    謝謝
系統時間:2024-11-23 21:57:46
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!