Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как доработать функцию поиска, для работы в цикле? [D2005, XP]


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

Всем Привет,

Нашел в сети код функции:
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;


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

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

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


Anatoly Podgoretsky   (2009-11-12 13:25:00) [1]

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

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


brother   (2009-11-12 11:59:00) [2]

пойдет...


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

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

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

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


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

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

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

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

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


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

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

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 07:43:00) [6]


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


Endpos


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


> FindText(SearchText, 0,


?


Наверх

Титульная страница Поиск, карта сайта Написать письмо