Форум: "Начинающим";
Текущий архив: 2007.03.25;
Скачать: [xml.tar.bz2];
Вниз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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.036 c