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

RichEdit檢查String作法!?

答題得分者是:daldal
anderson8585
一般會員


發表:10
回覆:13
積分:4
註冊:2007-08-27

發送簡訊給我
#1 引用回覆 回覆 發表時間:2008-05-22 15:27:37 IP:210.68.xxx.xxx 未訂閱
請問

在RichEdit中一行String "ABCDEFGDK $DSDFEFEJIEJI$ DFSAFDFS $DDKEK$"
有什麼辦法讓$到$區間變色


關於變色問題 小弟會使用
因String不一定只有上列4個'$' 或更多或更少
那顯示顏色的長度就會不是固定的

不知道版上達人是否有更好的作法提供

小弟只想到用陣列的方式 不過作法很死
如果字串中出現多個$就不會去判斷了
anderson8585
一般會員


發表:10
回覆:13
積分:4
註冊:2007-08-27

發送簡訊給我
#2 引用回覆 回覆 發表時間:2008-05-22 19:04:20 IP:210.68.xxx.xxx 未訂閱
小弟實作了一下  終於試不來
不過有一個問題是

新增第2行時卻沒有變色
請問要怎麼修改


[code cpp]
void __fastcall TForm1::BitBtn1Click(TObject *Sender)
{
int i,j;
String richedit_text ;
int richedit_size=0;
int m_start,m_count=0;
richedit_text = "ABC$DDDDDDDDDDDD$5555";
richedit_size = richedit_text.Length();
RichEdit1->Lines->Add(richedit_text);
int m_flag,m_post=0,m_length;
//計數字串中出現'$'
for(i=0;i if(richedit_text.c_str()[i]=='$'){
m_count =1;
}
}
for(i=0;i m_flag=0;
for(j=m_post;j if(richedit_text.c_str()[j]=='$'){
m_flag =1;
if(m_flag==1){ //第一個出現的'$'
m_start = j;
}
if(m_flag==2){ //第二個出現的'$'
m_post = j 1;
}
}
}
m_length = (m_post-1) - m_start;
RichEdit_Show(m_start,m_length 1);
}
}
//---------------------------------------------------------------------------
void TForm1::RichEdit_Show(int start,int length)
{
RichEdit1->SelStart=start;
RichEdit1->SelLength=length;
RichEdit1->SelAttributes->Color=clBlue;
}
[/code]
daldal
高階會員


發表:6
回覆:102
積分:226
註冊:2007-06-18

發送簡訊給我
#3 引用回覆 回覆 發表時間:2008-05-23 09:02:35 IP:220.130.xxx.xxx 未訂閱
Form1裡面放一個Button1跟RichEdit1
在Button1的Click事件中寫如下程式碼
執行程式後在RichEdit輸入含有$的字串
再按下Button1

[code cpp]
int iPos=0; //紀錄$字元位置
AnsiString Tmp = RichEdit1->Lines->GetText(); //用來紀錄目前輸入字串
while(Tmp.AnsiPos("$")!=0) //若含有$字元
{
iPos =Tmp.AnsiPos("$"); //
紀錄切割字串的新開始位置
Tmp=Tmp.SubString(Tmp.AnsiPos("$") 1,Tmp.Length()); //切割處理過的字串

RichEdit1->SelStart=iPos-1; //設定變色字段開始
RichEdit1->SelLength=Tmp.AnsiPos("$") 1;
//設定變色字段長度
RichEdit1->SelAttributes->Color=clBlue; //設定變色字段顏色

iPos =Tmp.AnsiPos("$"); //紀錄切割字串的新開始位置
Tmp=Tmp.SubString(Tmp.AnsiPos("$") 1,Tmp.Length());
//切割處理過的字串
}
[/code]
anderson8585
一般會員


發表:10
回覆:13
積分:4
註冊:2007-08-27

發送簡訊給我
#4 引用回覆 回覆 發表時間:2008-05-23 11:52:17 IP:210.68.xxx.xxx 未訂閱
感謝 daldal ~

不過如果字串出現4個 '$'就不對了
我再努力修改看看

謝謝你囉
編輯記錄
anderson8585 重新編輯於 2008-05-26 18:46:39, 註解 無‧
系統時間:2024-03-29 19:00:41
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!