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

搜尋字串的語法意義

尚未結案
wena
一般會員


發表:26
回覆:37
積分:12
註冊:2005-07-20

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-07-21 22:24:01 IP:61.225.xxx.xxx 未訂閱
在書本上找到一個搜尋的程式 但有幾行不太懂 希望請高手幫我認一下  
void __fastcall TForm1::FindDialog1Find(TObject *Sender)
{
  int FoundAt, StartPos, ToEnd;
  // 如果不是第一次搜尋,將接著下一個搜尋
  if (RichEdit1->SelLength)
    StartPos = RichEdit1->SelStart   RichEdit1->SelLength;
  else
    // 如果是第一次搜尋,初始化StartPos
    StartPos = 0;
    // ToEnd是搜尋字串起始位址到RichEdit最末端位置的剩餘字串長度
    ToEnd = RichEdit1->Text.Length() - StartPos;
    FoundAt = RichEdit1->FindText(ReplaceDialog1->FindText,StartPos, ToEnd, TSearchTypes()<< stMatchCase);
    if (FoundAt != -1)
    {
      RichEdit1->SetFocus();
      RichEdit1->SelStart = FoundAt;
      RichEdit1->SelLength = ReplaceDialog1->FindText.Length();
    }
}
 
事實上從綠色那一行以下 就不大懂了,所以知如何應用 謝謝
Stallion
版主


發表:52
回覆:1600
積分:1995
註冊:2004-09-15

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-07-21 23:21:37 IP:211.22.xxx.xxx 未訂閱
這個範例就是BCB線上說明的範例~
    FoundAt = RichEdit1->FindText(ReplaceDialog1->FindText,StartPos, ToEnd, TSearchTypes()<< stMatchCase); //如果FindText找到指定的字串則傳回其位置,否則傳回 -1
    if (FoundAt != -1)
    {
      RichEdit1->SetFocus(); //RichEdit元件取得焦點
      RichEdit1->SelStart = FoundAt; //把找到的位置值作為RichEidt標示其內容的起點
      RichEdit1->SelLength = ReplaceDialog1->FindText.Length(); //從起點開始標示的長度為指定搜尋的字串長度,如此在文章中被找到的字串會被反白
    }    
------------------- 學,然後知不足。
wena
一般會員


發表:26
回覆:37
積分:12
註冊:2005-07-20

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-07-25 12:08:58 IP:218.162.xxx.xxx 未訂閱
不好意思喔! 因為剛接觸BCB,所以有些概念還需加強些 比如說 為何: if (RichEdit1->SelLength) 指的是如果不是第一次搜尋,將接著下一個搜尋 還有FindText(ReplaceDialog1->FindText,StartPos, ToEnd, TSearchTypes()<< stMatchCase);這是一個含式嗎?要怎麼使用?
Stallion
版主


發表:52
回覆:1600
積分:1995
註冊:2004-09-15

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-07-25 20:08:32 IP:211.22.xxx.xxx 未訂閱
引言: 1. if (RichEdit1->SelLength) 指的是如果不是第一次搜尋,將接著下一個搜尋
循上一個敘述:
    if (FoundAt != -1) //找到字串
    {
      RichEdit1->SetFocus();
      RichEdit1->SelStart = FoundAt;
      RichEdit1->SelLength = ReplaceDialog1->FindText.Length(); //指定標示的長度
    }
  
如果找到了,才會指定SelLength的長度,所以當然不是第一次搜尋
引言: 2. FindText(ReplaceDialog1->FindText,StartPos, ToEnd, TSearchTypes()<< stMatchCase);這是一個含式嗎?要怎麼使用?
FindText是TReplaceDialog繼承TFindDialog物件而來的成員方法,其中第一個參數表示要搜尋的字串,第二個參數表示要從第幾個位置找起,第三個參數表示要找到那個位置,第四個參數表示要不要考慮大小寫以及是部分搜尋或完整搜尋,請查看TSearchType。 ------------------- 學,然後知不足。
wena
一般會員


發表:26
回覆:37
積分:12
註冊:2005-07-20

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-07-25 23:03:43 IP:218.162.xxx.xxx 未訂閱
謝謝Stallion的解釋,很清楚 不過真的原諒小弟還是初學階段 想問: 1.TSearchType可以到那兒去查看? 2.其實我不是要做一個FindDialog的對話方塊,而是我是要寫插入字串   才想到應該需要先寫一個搜尋字串的程式,才能找到地方插入字串,那   麼我使用的程式還能用的上嗎? 3.如果不行可否給小弟一些建議,讓我還能繼續努力下去 謝謝你的幫忙
Stallion
版主


發表:52
回覆:1600
積分:1995
註冊:2004-09-15

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-07-25 23:24:31 IP:211.22.xxx.xxx 未訂閱
1.TSearchType在BCB的線上說明就有。 2.不用改。看看這句線上說明你就知道怎麼做了。 Read SelText to determine the value of the selected text. Set SelText to replace the selected text with a new string. If there is no selection, but the edit control has focus, set SelText to insert a new string into the text at the cursor. ------------------- 學,然後知不足。 發表人 - stallion 於 2005/07/26 00:09:48
wena
一般會員


發表:26
回覆:37
積分:12
註冊:2005-07-20

發送簡訊給我
#7 引用回覆 回覆 發表時間:2005-07-26 23:26:57 IP:220.141.xxx.xxx 未訂閱
程式基本的功能已出來了 剩下的再繼續努力! 謝謝你的幫忙
系統時間:2024-04-29 8:25:38
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!