Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.08.2011, 18:01   #1
roperd
Пользователь
 
Регистрация: 14.07.2011
Сообщений: 44
Вопрос Поиск текста в JvxRichEdit(RxRichEdit)

Здравствуйте, проблема состоит вот в чем, присутствует полностью рабочий код для поиска текста по FindDialog, но адекватно он работает только в стандартных компонентах RichEdit и Memo, которые мне не подходят,если пробовать искать в JvxRichEdit или RxRichEdit то первую строку он выделяет правильно, но остальные в разброс(отрезает буквы,либо выделяет совсем не те слова),прошу помочь переписать ниже указанный код под компоненты JvxRichEdit(RxRichEdit), либо написать свой собственный полнофункциональный код,заранее благодарю...
Код:
procedure TForm1.FindDialog1Find(Sender: TObject);
var
SelPos,X,i:integer;
s,textE:string;
label 1;
begin
PostMessage(Handle, WM_USER + 1024, 0, 0);
if frDown in FindDialog1.Options then
RichEdit1.SelStart := RichEdit1.SelStart + RichEdit1.SelLength;
textE:=RichEdit1.Text;
X:=RichEdit1.SelStart+1;
if frDown in FindDialog1.Options then
textE:=Copy(textE,X,Length(textE)-X+1) else
textE:=Copy(textE,0,X-1);
s:=FindDialog1.FindText;
if frDown in FindDialog1.Options then
begin
SelPos := Pos(s,textE);
if SelPos > 0 then begin
RichEdit1.SelStart := SelPos + X - 2;
RichEdit1.SelLength:=length(s);
end else
Application.MessageBox(pchar('Текст "' + FindDialog1.FindText + '" не найден!'),
'Поиск',
mb_IconAsterisk + mb_OK);
end else
begin
for i:=length(textE)-length(s) downto 1 do
if copy(textE,i,length(s))=s then begin
RichEdit1.SelStart := i-1;
RichEdit1.SelLength:=Length(s);
goto 1;
end;
Application.MessageBox(pchar('Текст "' + FindDialog1.FindText + '" не найден!'),
'Поиск',
mb_IconAsterisk + mb_OK);
1:
end;
end;
roperd вне форума Ответить с цитированием
Старый 02.08.2011, 17:03   #2
LSpirit
Пользователь
 
Регистрация: 19.07.2011
Сообщений: 28
По умолчанию

А ты попробуй забить на компонент FindDialog и использовать стандартные способы поиска.
Например,
Код:
r:=pos(text1,text2)
присваивает переменной r позицию text1 в Text2, или позицию первой переменной во второй)
для примера:
Код:
n:='123';
a:='1';
r:=pos(a,n);//r будет равно 1
Цель оправдывает средства.
LSpirit вне форума Ответить с цитированием
Старый 03.08.2011, 03:32   #3
roperd
Пользователь
 
Регистрация: 14.07.2011
Сообщений: 44
По умолчанию

Цитата:
Сообщение от LSpirit Посмотреть сообщение
А ты попробуй забить на компонент FindDialog и использовать стандартные способы поиска.
Например,
Код:
r:=pos(text1,text2)
присваивает переменной r позицию text1 в Text2, или позицию первой переменной во второй)
для примера:
Код:
n:='123';
a:='1';
r:=pos(a,n);//r будет равно 1
Вообще-то стандартным способом поиска является как раз таки FindDialog, что-то не видел,чтобы в блокноте или Microsoft Word так искали, я хочу создать нормальную программу, так что спасибо, но такое мне не подходит, просто в компоненте JvxRichEdit явные проблемы с выделением текста, а конкретно с SelLength, вот я и хочу разобраться как его подправить и какой поиск для него нужен.
roperd вне форума Ответить с цитированием
Старый 04.08.2011, 14:23   #4
roperd
Пользователь
 
Регистрация: 14.07.2011
Сообщений: 44
Счастье Ответ

Уже сам додумался, если кому-то пригодиться, то вот ниже код поиска,работает в RxRichEdit и JvxRichEdit на все 100%
Код:
procedure TForm1.Button1Click(Sender: TObject);//Собственно поиск
begin
if JvxRichEdit1.Text = '' then
Exit else
JvxRichEdit1.FindDialog(JvxRichEdit1.SelText);
end;
procedure TForm1.JvxRichEdit1TextNotFound(Sender: TObject;
  const FindText: String);//Вывод сообщения если текст не найден
begin
MessageBox(Handle,PChar('Текст "'+JvxRichEdit1.FindDialog(JvxRichEdit1.SelText).FindText+'" не найден!'),'Поиск',mb_IconAsterisk + mb_OK);
end;
procedure TForm1.Button2Click(Sender: TObject);//Процедура "Найти далее"
begin
if JvxRichEdit1.Text = '' then
Exit else
JvxRichEdit1.FindNext;
end;
procedure TForm1.JvxRichEdit1CloseFindDialog(Sender: TObject;
  Dialog: TFindDialog);//Если текст для поиска при закрытии диалогового окна ничему не равен, то кнопка "Найти далее" перестаёт быть активной
begin
If Dialog.FindText='' then
Button2.Enabled:=false
else
Button2.Enabled:=true;
end;
procedure TForm1.FormCreate(Sender: TObject);//Изначальное отключение кнопки "Найти далее" при отсутствии текста в JvxRichEdit
begin
If JvxRichEdit1.Text=''  then
Button2.Enabled:=false;
end;
roperd вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Поиск Текста на VC shAdoo00w Помощь студентам 1 14.02.2011 10:48
RxRichEdit rzawm Компоненты Delphi 11 11.04.2010 19:50
Параграф в rxrichedit Михаил Юрьевич Общие вопросы Delphi 4 20.11.2009 02:07
RxRichEdit скачать GAGARIN-NEW Компоненты Delphi 4 16.12.2007 20:41