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

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

HELP [D7, XP]


Шофер ©   (2007-03-01 08:29:00) 

Доброго времени суток!
У меня вопрос для поиска текста в Richedit я использую вот этот код.

procedure TMainForm.FindDialog1Find(Sender: TObject);
var
FoundAt: LongInt;
StartPos, ToEnd: Integer;
begin
with RichEdit1 do
begin
if SelLength <> 0 then
StartPos := SelStart + SelLength
else
StartPos := 0;
ToEnd := Length(Text) - StartPos;
FoundAt := FindText(FindDialog1.FindText, StartPos, ToEnd, [stMatchCase]);
if FoundAt <> -1 then
begin
SetFocus;
SelStart := FoundAt;
SelLength := Length(FindDialog1.FindText);
end
else
showmessage('Не найдено!');
end;
end;

В принципе он вроде ищет нормально но проблема в том что, если текст большой и для того что бы его прочитать нужно его прокручивать вниз, то алгоритм поиска тоько выделяет найденный текст, но переходит к нему. То есть у меня есть текст на 20 страниц и он нашел его то он к нему не перейдет а мне приходиться самому прокручивать текст что бы найте выделеннгое слово. Скажите как можно это исправить?


begin...end   (2007-03-01 13:22:00) [1]

> Шофер   (01.03.07 08:29)

После выделения нужного текста добавьте вызов SendMessage(RichEdit.Handle, EM_SCROLLCARET, 0, 0).


Elen   (2007-03-01 13:13:00) [2]


> Шофер   (01.03.07 12:52) [5]

Так привожу исправленный код :

procedure TForm1.Button1Click(Sender: TObject);
var
k,nc,FoundAt: Integer;
StartPos, ToEnd: Integer;    s:string;
label qwe;
begin
with RichEdit1 do
begin
FoundAt:=0;nc:=0;
while FoundAt<Lines.Count do begin s:=Lines[foundat];
 if Pos('в',Lines[foundat])>0 then begin   goto qwe;  end;

 inc(nc,length(Lines[foundat])); inc(nc,2);
 inc(FoundAt);
 RichEdit1.Perform(EM_LINESCROLL,0,1);
end;
qwe:
SelStart:=nc;SelLength:=length(Lines[foundat]); SetFocus;
end;


Рафик с рынка   (2007-03-01 12:52:00) [3]

Да извеняюсь всё работает, но проблемв в том что он не выделяет найденное слово я пытался это исправить , но мои попытки не к чему не привели


Шофер   (2007-03-01 12:52:00) [4]

Да извеняюсь всё работает, но проблемв в том что он не выделяет найденное слово я пытался это исправить , но мои попытки не к чему не привели


Elen   (2007-03-01 10:00:00) [5]


> Ваш код не рабочий, он ничего не ищет

Ишет. У меня ишет и если находит то переходит к той строке где нашел. А как ты его используеш я не знаю. - это чисто пример принципа.


Шофер   (2007-03-01 09:45:00) [6]

Ваш код не рабочий, он ничего не ищет


Elen   (2007-03-01 09:03:00) [7]


> Шофер   (01.03.07 08:29)

осмелюсь предложить альтернативу :

procedure TForm1.Button1Click(Sender: TObject);
var
FoundAt: Integer;
StartPos, ToEnd: Integer;
begin
with RichEdit1 do
begin
FoundAt:=0;
while FoundAt<Lines.Count do begin
 if Pos('111',Lines[foundat])>0 then exit;
 inc(FoundAt);
 RichEdit1.Perform(EM_LINESCROLL,0,1);
end;
end;
end;


Найденная строка будет первой сверху - остается только клацнуть вна нее мышкой. Если не найдет то станет в конец.


Наверх

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