Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Для новичков > поиск в RichEdit


Автор: mauar 5.5.2008, 13:35
Сделал поиск по RichEdit:
Функция такая :

Код

function SearchText_AndSelect (RichEdit:TRichEdit;SearchText:String):Boolean;   
var  
StartPos,Position,EndPos:Integer;   
begin  
  StartPos := 0;   
  with RichEdit do  
  begin  
    Endpos := Length(RichEdit.Text);   
    Lines.BeginUpdate;   
    while FindText(SearchText, StartPos, Endpos, [stMatchCase])<>-1 do  
    begin  
      Position := FindText(SearchText, StartPos, Endpos, [stMatchCase]);   
      Endpos   := Length(RichEdit.Text) - startpos;   
      Inc(StartPos, Length(SearchText));   
      SetFocus;   
      SelStart  := Position;   
      SelLength := Length(SearchText);   
    end;   
    Lines.EndUpdate;   
  end;   
end;  


По нажатиию кнопки выполнить:

Код

SearchText_AndSelect (RichEdit1  , Edit1.Text);  


Поиск идет в RichEdit1 из компонента Edit1.

Как убрать поиск по регистру, а то если слово с заглавной буквы то он это слово не находит.
И как сделать так чтобы RichEdit прокрутился в то место где находится найденное слово.

Автор: THandle 5.5.2008, 13:58
Код

function SearchText_AndSelect (RichEdit:TRichEdit;SearchText:String):Boolean;
var
StartPos,Position,EndPos:Integer;
begin
  StartPos := 0;
  with RichEdit do
  begin
    Endpos := Length(RichEdit.Text);
    Lines.BeginUpdate;
    while FindText(SearchText, StartPos, Endpos, [])<>-1 do
    begin
      Position := FindText(SearchText, StartPos, Endpos, []);
      Endpos   := Length(RichEdit.Text) - startpos;
      Inc(StartPos, Length(SearchText));
      SetFocus;
      SelStart  := Position;
      SelLength := Length(SearchText);
    end;
    Lines.EndUpdate;
  end;
end;

Автор: mauar 5.5.2008, 14:23
THandle
Все так же как и было, не работает заглавие и richedit не прокручивается на найденное слово  smile 

Автор: THandle 5.5.2008, 14:30
У меня вот так вот все отлично ещет:
Код


function SearchText_AndSelect (RichEdit:TRichEdit;SearchText:String):Boolean;
var
StartPos,Position,EndPos:Integer;
begin
  StartPos := 0;
  with RichEdit do
  begin
    Endpos := Length(RichEdit.Text);
    Lines.BeginUpdate;
    while FindText(SearchText, StartPos, Endpos, [])<>-1 do
    begin
      Position := FindText(SearchText, StartPos, Endpos, []);
      Endpos   := Length(RichEdit.Text) - startpos;
      Inc(StartPos, Length(SearchText));
      SetFocus;
      SelStart  := Position;
      SelLength := Length(SearchText);
    end;
    Lines.EndUpdate;
  end;
end;


Код

procedure TForm1.Button1Click(Sender: TObject);
begin
  SearchText_AndSelect(RichEdit1, Edit1.Text);
end;



Например текст в RichEdit:

Цитата


НужНый текст


А в Edit1:

Цитата

нужный


Жмем кнопку - все находит и выделяет слово НужНый

Автор: mauar 5.5.2008, 14:34
THandle,
Да по заглавию заработало, а как теперь сделать  чтобы  RichEdit прокрутился на найденное слово?  smile 
Все спасибо сдела просто добавил строчку RichEdit1.Perform(EM_SCROLLCARET, 0, 0); в функцию  smile  smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)