Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2010.01.03;
Скачать: CL | DM;

Вниз

Как доработать функцию поиска, для работы в цикле?   Найти похожие ветки 

 
Андрей Смирнов   (2009-11-12 07:19) [0]

Всем Привет,

Нашел в сети код функции:
function SearchForText_AndSelect(RichEdit: TRichEdit; SearchText: string):
 boolean;
var
 Position: Integer;
begin
 with RichEdit do
 begin
   RichEdit.Lines.BeginUpdate;
   Position := FindText(SearchText, 0, Length(RichEdit.Text), [stMatchCase]);
   if Position > -1 then
   begin
     SetFocus;
     SelStart := Position;
     SelLength := Length(SearchText);
     SelAttributes.Color := clRed;
     SelAttributes.Style := [fsBold];
     Result := true;
   end
   else
     Result := false;
   RichEdit.Lines.EndUpdate;
 end;
end;


Проверил его, функция исправно находит искомое вхождение строки и выделяет найденное Жирным-Красным цветом!
Но есть одно но, она находит самое первое вхождение, или только уникальное!

Как доработать функцию, для работы в цикле? Чтобы она находила все искомые вхождения строки, + в функцию ввести счётчик найденного!

С Уважением, Андрей!


 
Думкин ©   (2009-11-12 07:38) [1]


> FindText(SearchText, 0,


?


 
Андрей Смирнов   (2009-11-12 07:43) [2]


> Думкин ©   (12.11.09 07:38) [1]


Endpos


 
Андрей Смирнов   (2009-11-12 07:48) [3]

вот так ужо лучше?

function SearchForText_AndSelect(RichEdit: TRichEdit; SearchText: string;
 var StartPos: integer): Boolean;
var
 Position, Endpos: Integer;
begin
 result := False;

 with RichEdit do
 begin
   Endpos := Length(RichEdit.Text);
   Lines.BeginUpdate;
   if FindText(SearchText, StartPos, Endpos, [stMatchCase]) <> -1 then
   begin
     Endpos := Length(RichEdit.Text) - startpos;
     Position := FindText(SearchText, StartPos, Endpos, [stMatchCase]);
     Inc(StartPos, Length(SearchText));
     SetFocus;
     SelStart := Position;
     SelLength := Length(SearchText);

     StartPos := SelStart + SelLength;
     result := True;
   end;
   Lines.EndUpdate;
 end;
end;


теперь вроде все нормально, работает как FindSearch, осталось цикл прикрутить!


 
Андрей Смирнов   (2009-11-12 11:36) [4]

Столкнулся с такой загвоздкой,

При проходе выше приведенной функцией, найденные вхождения подкрашиваться красным и выделяются жирным шрифтом, все то что я и хотел, но...

Как сбросить атрибуты текста в RichEdit?

Чтобы в RichEdit"е убрать все выделения и цвет!


 
Андрей Смирнов   (2009-11-12 11:58) [5]

сделал так:
 SearchRichEdit.SelectAll;
 SearchRichEdit.SelAttributes.Color := clWindowText;
 SearchRichEdit.SelAttributes.Style := [];

Вроде все работает)

Правильно или нет?


 
brother ©   (2009-11-12 11:59) [6]

пойдет...


 
Anatoly Podgoretsky ©   (2009-11-12 13:25) [7]

> Андрей Смирнов  (12.11.2009 11:58:05)  [5]

Правильно и правильнее нет.



Страницы: 1 вся ветка

Текущий архив: 2010.01.03;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.012 c
2-1258030604
night_light
2009-11-12 15:56
2010.01.03
передача видео по сети


15-1257111012
Юрий
2009-11-02 00:30
2010.01.03
С днем рождения ! 2 ноября 2009 понедельник


15-1257419287
Piter
2009-11-05 14:08
2010.01.03
В чем смысл спама от вконтакте?


15-1257003526
stas
2009-10-31 18:38
2010.01.03
пустой exe определяется как троян


1-1232020600
inviz
2009-01-15 14:56
2010.01.03
Проблема с выводом потока в файл