![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как доработать функцию поиска, для работы в цикле? [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,
?