Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.03 c
15-1172761095
iXT
2007-03-01 17:58
2007.03.25
Аналог SpinEdit


2-1172735792
Стас
2007-03-01 10:56
2007.03.25
EControlC


15-1172516915
Rouse_
2007-02-26 22:08
2007.03.25
Кто с билдером работает?


3-1167207493
vigo_
2006-12-27 11:18
2007.03.25
Ошибка ORA-01012: not logged on


15-1172430056
Nic
2007-02-25 22:00
2007.03.25
ЖК-монитор, WinXP, проблемы




   Наверх