線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1359
推到 Plurk!
推到 Facebook!

FindDiaolg 向上搜尋的功能該如何做到呢?

尚未結案
BGman
初階會員


發表:28
回覆:85
積分:42
註冊:2003-01-10

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-01-29 09:56:24 IP:211.22.xxx.xxx 未訂閱
BCB5 有一個 VCL 元件叫FindDiaolg  小弟成功地試過做到向下搜尋的功能,例如 
int FoundAt,StartPos,ToEnd;
FoundAt = RichEdit1->FindText(FindDialog1->FindText, StartPos, ToEnd,TSearchTypes())
但是FindDiaolg 向上搜尋的功能,我研究了好久都試不出來 請問一下是否有人辦得到呢?同事叫我將 Option 屬性中的向上選項關掉, 可是我覺得我不喜歡鴕鳥心態
Cooky Kid
初階會員


發表:5
回覆:68
積分:44
註冊:2002-07-11

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-01-29 12:14:30 IP:210.58.xxx.xxx 未訂閱
建議還是利用FindDiaolg現有的功能, 新增一個RadioGroup1元件,將FindDiaolg中Option諸多功能列入, 呼叫FindDiaolg前,先設定Option各功能布林值, 這樣應該可以吧?< > 只要穩定地達到目的,就應該不算鴕鳥心態< > good luck!!!
BGman
初階會員


發表:28
回覆:85
積分:42
註冊:2003-01-10

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-01-29 14:23:47 IP:211.22.xxx.xxx 未訂閱
以FindDiaolg 這個元件來說,他只是一個輸入介面 說穿了,只是一個空殼,一切的運作還是要靠自己 一般的BCB書籍,可能都只是參考Help 來寫的 所以我在寫可能要借助 API 才能完成向上搜尋的機制, 可惜這正是小弟比較弱的地方
johnny_1121
一般會員


發表:12
回覆:58
積分:24
註冊:2002-04-15

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-04-10 09:45:28 IP:192.72.xxx.xxx 未訂閱
bool __fastcall TEditForm::FindText(AnsiString str,TSearchTypes st1,bool bDown)
{
    int start,newpos;
    TRichEdit *ed = CurSheet->Editor;
    if (bDown){
        start = ed->SelStart ;
        if (ed->SelLength != 0)
               start ;
        newpos = ed->FindText (str,start,ed->Text.Length()-ed->SelStart-1,st1) ;
    }
    else if (ed->SelStart >= 1)

        int search = -1 ;
        do{
            newpos = search ;
            search = ed->FindText(str,search   1,ed->SelStart - search - 1,st1);
        } while (search >= 0) ;        }
    else{
        newpos = -1 ;
    }
    if(newpos != -1){
        ed->SelStart = newpos;
        ed->SelLength = str.Length();
        return true;
    }
    return false;
}
post 一段source code給你參考,BGman兄一定看得懂 向上向下搜尋,稍微修改應該沒問題,有問題再問我
lcsboy
版主


發表:87
回覆:622
積分:394
註冊:2002-06-18

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-04-10 10:35:05 IP:211.23.xxx.xxx 未訂閱
不知道各位高階語言的程式設計師:    在寫程式時, 對於"程式比較好寫" 和"效率" 這兩個問題是怎麼看待的呢? 經驗裡, 只有
BGman
初階會員


發表:28
回覆:85
積分:42
註冊:2003-01-10

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-04-10 13:47:09 IP:211.22.xxx.xxx 未訂閱
感謝 johnny 桑,已經可以達到向上搜尋! 你那個do ... while 迴圈,真是巧妙的設計。 厲害!厲害! 在此整理程式碼,提供給和我一樣需要此功能的人
void __fastcall TForm1::FindDialog1Find(TObject *Sender)
{
  int FoundAt;
  int nStartPos, nToEnd;
  if ( RichEdit1->SelLength > 0 )
    nStartPos = RichEdit1->SelStart   RichEdit1->SelLength;
  else
    nStartPos = 0;
  nToEnd = RichEdit1->Text.Length() - nStartPos;
  if ( FindDialog1->Options.Contains(frDown) )
    FoundAt = RichEdit1->FindText( FindDialog1->FindText ,
                                   nStartPos ,
                                   nToEnd,
                                   TSearchTypes());
  else
  {
    int search = -1 ;
    do{
        FoundAt = search ;
        search = RichEdit1->FindText( FindDialog1->FindText,
                                      search  1,
                                      RichEdit1->SelStart -search -1,
                                      TSearchTypes());
      } while (search >= 0) ;
  }
  if ( FoundAt != -1 )
  {
    RichEdit1->SetFocus();
    RichEdit1->SelStart = FoundAt;
    RichEdit1->SelLength = FindDialog1->FindText.Length();
  }
  else
    ShowMessage("找不到"   FindDialog1->FindText   "字串!");
}
johnny_1121
一般會員


發表:12
回覆:58
積分:24
註冊:2002-04-15

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-04-10 14:14:10 IP:192.72.xxx.xxx 未訂閱
感謝你的分享~ 是前人厲害…不是我…( >_< …我也希望…) 如lcsboy版大所說,指標 演算法才是王道,又快又好掌握… 且適用於各種Memo、Edit、stream呢… 找一下lcsboy版大的文章會有更大的收獲的ㄜ~ 發表人 - johnny_1121 於 2003/04/10 14:16:45
系統時間:2024-04-20 13:37:39
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!