Главная страница
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.017 c
15-1257419287
Piter
2009-11-05 14:08
2010.01.03
В чем смысл спама от вконтакте?


2-1257965995
Игорь
2009-11-11 21:59
2010.01.03
System Idle Process


15-1257115787
Германн
2009-11-02 01:49
2010.01.03
Я правильно понял, что Visual Basic от MS бесплатен?


15-1257230908
Дмитрий С
2009-11-03 09:48
2010.01.03
Как отловить изменение location.hash (JS,XHTML)


2-1257917183
Tornado
2009-11-11 08:26
2010.01.03
Как разрешить ввод только заглавных букв?