Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2010.01.03;
Скачать: [xml.tar.bz2];

Вниз

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

 
Андрей Смирнов   (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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.008 c
1-1232557117
du_hast
2009-01-21 19:58
2010.01.03
Работа с CommandBar-ом в Outlook-е


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


15-1257122587
Eraser
2009-11-02 03:43
2010.01.03
Протокол и GNU


2-1258047678
AntonioBanderas
2009-11-12 20:41
2010.01.03
Игра пятнашки


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





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский