Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.03.25;
Скачать: CL | DM;

Вниз

HELP   Найти похожие ветки 

 
Шофер   (2007-03-01 08:29) [0]

Доброго времени суток!
У меня вопрос для поиска текста в 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 страниц и он нашел его то он к нему не перейдет а мне приходиться самому прокручивать текст что бы найте выделеннгое слово. Скажите как можно это исправить?


 
Elen ©   (2007-03-01 09:03) [1]


> Шофер   (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;


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


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

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


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


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

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


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

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


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

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


 
Elen ©   (2007-03-01 13:13) [6]


> Шофер   (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;


 
begin...end ©   (2007-03-01 13:22) [7]

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

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



Страницы: 1 вся ветка

Текущий архив: 2007.03.25;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.042 c
3-1167194049
merko$
2006-12-27 07:34
2007.03.25
Как прочитать файл на удаленном ПК


1-1170324224
DelphiLexx
2007-02-01 13:03
2007.03.25
DBGridEh с возможностью округления Double-полей


2-1173107320
bagos
2007-03-05 18:08
2007.03.25
использование Access


10-1130505467
Volodya_
2005-10-28 17:17
2007.03.25
WebBrowser


15-1172883778
Andy BitOff
2007-03-03 04:02
2007.03.25
Просьба к администрации