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

FindDialog

尚未結案
AJCooer
初階會員


發表:48
回覆:52
積分:25
註冊:2004-02-12

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-06-28 11:32:33 IP:61.218.xxx.xxx 未訂閱
請問一下 再使用TFindDialog 和RichEdit配合使用時, 我發現都找的到在RichEdit的要尋找字串, 但是RichEdit不會跟著Scroll. 請問一下要如何在找到字串時候,讓RichEdit跟著Scroll, 因為RichEdit裡面有5000行,可是Sscreen只能顯示40行, 而找到的字串在1000行. 請各位大大幫個忙 謝謝
pwipwi
版主


發表:68
回覆:629
積分:349
註冊:2004-04-08

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-06-28 14:32:43 IP:211.76.xxx.xxx 未訂閱
AJCooer你好:     參考下面的程式碼,看能不能合乎需求?主要是設定SelStart。  
 
void __fastcall TForm1::Button1Click(TObject *Sender)    {
  FindDialog1->Position = Point(RichEdit1->Left   RichEdit1->Width, RichEdit1->Top);
  FindDialog1->Execute();    }
void __fastcall TForm1::FindDialog1Find(TObject *Sender)    {
  int FoundAt, StartPos, ToEnd;
  // begin the search after the current selection 
  // if there is one 
  // otherwise, begin at the start of the text 
  if (RichEdit1->SelLength)
    StartPos = RichEdit1->SelStart   RichEdit1->SelLength;
  else        StartPos = 0;      // ToEnd is the length from StartPos 
  // to the end of the text in the rich edit control      ToEnd = RichEdit1->Text.Length() - StartPos;      FoundAt = RichEdit1->FindText(FindDialog1->FindText, StartPos, ToEnd, TSearchTypes()<< stMatchCase);
  if (FoundAt != -1)
  {
    RichEdit1->SetFocus();
    RichEdit1->SelStart = FoundAt;
    RichEdit1->SelLength = FindDialog1->FindText.Length();
  }
}    
AJCooer
初階會員


發表:48
回覆:52
積分:25
註冊:2004-02-12

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-06-28 14:47:13 IP:61.218.xxx.xxx 未訂閱
pwipwi兄  謝謝你    你的這個是 Help中的範例 我就是覺得很奇怪,RichEdit的資料很多時 它的確會找到要搜尋的字串,可是RichEdit不會跟著 Scroll(捲動),所以所搜尋到的資料如果在RichEdit的很後面時. 那user不會知道是否已經搜尋到? 我要的是希望RichEdit能夠跟著捲動, 還是謝謝你 < >< >
pwipwi
版主


發表:68
回覆:629
積分:349
註冊:2004-04-08

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-06-28 15:32:53 IP:211.76.xxx.xxx 未訂閱
引言: pwipwi兄 謝謝你 你的這個是 Help中的範例 我就是覺得很奇怪,RichEdit的資料很多時 它的確會找到要搜尋的字串,可是RichEdit不會跟著 Scroll(捲動),所以所搜尋到的資料如果在RichEdit的很後面時. 那user不會知道是否已經搜尋到? 我要的是希望RichEdit能夠跟著捲動, 還是謝謝你 < >< >
OOPS...這可麻煩了… 那試試用SetScrollPos(Handle,SB_VERT,int nPos,BOOL bRedraw); 或SendMessage來"手動"?…(不知道有沒有更漂亮的方法呢?)
SendMessage(RichEdit->Handle,WM_VSCROLL,SB_PAGEDOWN,0);
發表人 - pwipwi 於 2004/06/28 15:43:08
系統時間:2024-05-15 3:58:16
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!