Главная страница
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.035 c
15-1172872547
Владмир
2007-03-03 00:55
2007.03.25
лицензирование Delphi 6


2-1172749479
Kolan
2007-03-01 14:44
2007.03.25
Поле компонента становится nil само по себе в run time.


15-1172929372
Liet
2007-03-03 16:42
2007.03.25
Движок сайта на Делфи


15-1172518296
Rouse_
2007-02-26 22:31
2007.03.25
Новая дырка в ослике и FF (проверьте Оперу и NN)


15-1172479060
pirate
2007-02-26 11:37
2007.03.25
Тест по Delphi