RichEdit 文字變色問題 |
尚未結案
|
yachu721
初階會員 發表:51 回覆:98 積分:44 註冊:2003-07-13 發送簡訊給我 |
我使用RichEdit來讓顏色區分
以下程式是主要將數字的部分以顏色區分
我要將檔案呼叫進來後才開始執行
但是當檔案較大時卻是非常非常的慢
是否有其他方法呢
int i,j,k = 0; char Text[80]; for( i = 0; i < RichEdit1->Lines->Count; i ) { strcpy(Text,R1->Lines->Strings[i].c_str()); for ( j = 0; j < strlen(Text); j ) { if ( isdigit(Text[j]) ) { RichEdit1->SelStart = k j; RichEdit1->SelLength = 1; RichEdit1->SelAttributes->Color = clBlue; } } k = strlen(Text) 2;// 2 => /r/n } |
RedSnow
版主 發表:79 回覆:1322 積分:845 註冊:2003-12-15 發送簡訊給我 |
yachu721 您好: 在處理 RichEdit 物件之前後分別加上 BeginUpdate 與 EndUpdate 敘述,應該會讓您的處理速度節省一些,例如:
RichEdit1->Lines->BeginUpdate(); RichEdit1->Lines->LoadFromFile("C:\\temp.txt"); .... 其它的處理動作 .... RichEdit1->Lines->EndUpdate();如果您要處理的檔案非常大的話,那可能還是得設法突破傳統方式來處理,我的印象中好像看過類似的討論,說是可以將資料分段處理,意思是說 "位於顯示區域的資料才做處理",當檔案載入後,先處理 "第一頁" 的顯示資料,當捲動畫面資料時,再處理新顯示頁面上的資料,然後依此類推....,但是我手邊沒有具體的程式碼,看看有無其他有經驗的人能提供這樣子的範例? 另外您可否說明一下您使用 RichEdit 以不同顏色標示數字的 "用途" 為何?如果僅僅是供顯示之用,或許可以有其它的替代方案能取得更好的效率也說不定。 7 天天敲鍵盤 v 時時按滑鼠 8 發表人 - RedSnow 於 2005/06/16 02:22:15 |
andychang1690
資深會員 發表:20 回覆:694 積分:442 註冊:2003-03-14 發送簡訊給我 |
yachu721:先朝改善你程式撰寫方式著手。 你的程式我載入一RTF檔206K需時4.22~4.33秒。 只要改成以下: int k=0,r,q=RichEdit1->Lines->Count; AnsiString S; char Text[256]; for( int i = 0; i < q; i ) { S= RichEdit1->Lines->Strings[i]; strcpy(Text,S.c_str()); r=strlen(Text); for ( int j = 0; j < r; j ) { if ( isdigit(Text[j]) ) { RichEdit1->SelStart = k j-2; RichEdit1->SelLength = 1; RichEdit1->SelAttributes->Color = clBlue; } } k = r 2;// 2 => /r/n } 需時3.26~3.36秒約快了一秒鐘! 如果改成以下: int r; AnsiString S; S=RichEdit1->Text; r=S.Length(); for (int i=1;i<=r;i ) { if ( isdigit(S[i]) ) { RichEdit1->SelStart = i-1; RichEdit1->SelLength = 1; RichEdit1->SelAttributes->Color = clBlue; } } 需時3.34~3.41秒! 請參考!Andy Chang
------
Andy Chang |
yachu721
初階會員 發表:51 回覆:98 積分:44 註冊:2003-07-13 發送簡訊給我 |
|
yachu721
初階會員 發表:51 回覆:98 積分:44 註冊:2003-07-13 發送簡訊給我 |
|
andychang1690
資深會員 發表:20 回覆:694 積分:442 註冊:2003-03-14 發送簡訊給我 |
我想到一個方法,會何不僅處理RichEdit畫面出現的部分! 花一個晚上!目前僅控制ScrollBar。其它請自己試試。 有些部分還有改進空間! 其中有參考 http://delphi.ktop.com.tw/topic.php?TOPIC_ID=61986 【BCB】【問題】有關RichEdit上的捲軸問題 答題得分者為:rogan321 開一個專案,Button,RichEdit,OpenDialog各一個! Unit1.h private: // User declarations AnsiString RichText; int RichLen; TWndMethod RichEdit1ScrollBar; void __fastcall RichEdit1ScrollBarWinProcs(TMessage &Mes); void __fastcall HLClick(); Unit1.cpp #includeAndy Chang
------
Andy Chang |
yachu721
初階會員 發表:51 回覆:98 積分:44 註冊:2003-07-13 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |