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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 31.08.2009, 13:31   #11
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию

Цитата:
Поменяйте лучше memo на richedit. Тогда можно будет подсвечивать слова.
см. пост 3.
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ
Alex Cones вне форума Ответить с цитированием
Старый 31.08.2009, 14:06   #12
Rebel123
C++ новичок
Форумчанин
 
Аватар для Rebel123
 
Регистрация: 13.06.2009
Сообщений: 160
По умолчанию

Поменял на RichEdit, теперь когда в поиске он находит слова те что стоят после того который тебе нужен!
Rebel123 вне форума Ответить с цитированием
Старый 31.08.2009, 14:21   #13
russian-stalker
Участник клубаДжуниор
 
Аватар для russian-stalker
 
Регистрация: 23.08.2008
Сообщений: 1,616
По умолчанию

Вот набросал
Код:
//Обработка на нажатие на кнопку найти
//RichEdit1-наш текст
//Edit1-искомая фраза
procedure TForm1.Button1Click(Sender: TObject);
var
i,j,k:integer;
begin
for i := 0 to RichEdit1.Lines.Count - 1 do
begin
  if pos(edit1.Text,richedit1.Lines.Strings[i])<>0 then
  begin
     richedit1.SelStart := SendMessage(richedit1.Handle, EM_LINEINDEX, i, 0)+pos(edit1.Text,richedit1.Lines.Strings[i])-1;
     richedit1.SelLength := Length(edit1.Text);
     richedit1.SelAttributes.Color:=clred;
  end;
end;
end;
//Обнуляем нашу подсветку, нажатие на кнопку отмена
//Можно так же повесить на событие RichEdit-KeyDown
procedure TForm1.Button2Click(Sender: TObject);
begin
     richedit1.SelStart:=0;
     richedit1.SelLength:=Length(richedit1.Text);
     richedit1.SelAttributes.Color:=clblack;
end;
pushl $0x18E3DF6B
call ICQ
russian-stalker вне форума Ответить с цитированием
Старый 31.08.2009, 14:45   #14
Rebel123
C++ новичок
Форумчанин
 
Аватар для Rebel123
 
Регистрация: 13.06.2009
Сообщений: 160
По умолчанию

Код:
procedure TForm1.Button2Click(Sender: TObject);
begin
     richedit1.SelStart:=0;
     richedit1.SelLength:=Length(richedit1.Text);
     richedit1.SelAttributes.Color:=clblack;
end;
зачем этот код?
можно было бы просто на клике на Button1.
А как убрать из вашего кода чтоб на клике Button1 отмечало а не на выходе?
И еще + он находит не все слова, только что проверил он находит слово, только у меня он в двух местах был а он нашел только одну!
Rebel123 вне форума Ответить с цитированием
Старый 31.08.2009, 14:53   #15
russian-stalker
Участник клубаДжуниор
 
Аватар для russian-stalker
 
Регистрация: 23.08.2008
Сообщений: 1,616
По умолчанию

Цитата:
Сообщение от Rebel123 Посмотреть сообщение
Код:
procedure TForm1.Button2Click(Sender: TObject);
begin
     richedit1.SelStart:=0;
     richedit1.SelLength:=Length(richedit1.Text);
     richedit1.SelAttributes.Color:=clblack;
end;
зачем этот код?
Код для убирания всех выделений.
Цитата:
А как убрать из вашего кода чтоб на клике Button1 отмечало а не на выходе?
не понял смысл высказывания
Цитата:
И еще + он находит не все слова, только что проверил он находит слово, только у меня он в двух местах был а он нашел только одну!
Он чувствителен к регистру букв, т.е. test и Test для него разные слова
Чтобы сделать не чувствительны к регистру нужно
Код:
if pos(edit1.Text,richedit1.Lines.Strings[i])<>0 then
поменять на:
Код:
if Pos(AnsiUpperCase(edit1.Text), AnsiUpperCase(richedit1.Lines.Strings[i]))<>0 then
Обычно во всех редакторах текста есть выбор.
pushl $0x18E3DF6B
call ICQ

Последний раз редактировалось russian-stalker; 31.08.2009 в 15:01.
russian-stalker вне форума Ответить с цитированием
Старый 31.08.2009, 14:56   #16
Rebel123
C++ новичок
Форумчанин
 
Аватар для Rebel123
 
Регистрация: 13.06.2009
Сообщений: 160
По умолчанию

Цитата:
не понял смысл высказывания
Ну вот, смотрите, нажал я на Кнопку, а он не показывает что он нашел, (то есть не показывает что он выделил) а когда уже выходишь с поиска то тогда только выделяет слова которые нашел! А мне нужно чтоб на клике на Кнопку сразу показывал!

Кстати вот этот код работает правильно:

Код:
procedure TForm1.Button1Click(Sender: TObject);
var 
Find:string; // Искомая строка
i:integer; 
begin
find:=Edit1.Text; // Записываем в find текст из Edit
For i:=0 to Memo1.Lines.Count-1 do // Запускаем цикл поиска строки
If Pos(FIND, Memo1.Lines.Text)<>0
Then
Begin
Memo1.SetFocus();
Memo1.SelStart:=Pos(FIND,Memo1.Lines.Text)-1;
Memo1.SelLength:=Length(FIND);
End;
end;

Последний раз редактировалось Stilet; 02.09.2009 в 08:26.
Rebel123 вне форума Ответить с цитированием
Старый 31.08.2009, 15:07   #17
russian-stalker
Участник клубаДжуниор
 
Аватар для russian-stalker
 
Регистрация: 23.08.2008
Сообщений: 1,616
По умолчанию

Цитата:
Сообщение от Rebel123 Посмотреть сообщение
Ну вот, смотрите, нажал я на Кнопку, а он не показывает что он нашел, (то есть не показывает что он выделил) а когда уже выходишь с поиска то тогда только выделяет слова которые нашел! А мне нужно чтоб на клике на Кнопку сразу показывал!
может так?

Код:
procedure TForm1.Button1Click(Sender: TObject);
var
i,j,k:integer;
begin
for i := 0 to RichEdit1.Lines.Count - 1 do
begin
  if pos(edit1.Text,richedit1.Lines.Strings[i])<>0 then
  begin
     form1.setfocus;
     richedit1.SetFocus;
     richedit1.SelStart := SendMessage(richedit1.Handle, EM_LINEINDEX, i, 0)+pos(edit1.Text,richedit1.Lines.Strings[i])-1;
     richedit1.SelLength := Length(edit1.Text);
     richedit1.SelAttributes.Color:=clred;
  end;
end;
end;
pushl $0x18E3DF6B
call ICQ
russian-stalker вне форума Ответить с цитированием
Старый 31.08.2009, 15:47   #18
Rebel123
C++ новичок
Форумчанин
 
Аватар для Rebel123
 
Регистрация: 13.06.2009
Сообщений: 160
По умолчанию

Вроде работает! спасибо!
Rebel123 вне форума Ответить с цитированием
Старый 01.09.2009, 18:28   #19
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

а про стандартный метод ричэдита(FindText) все забыли чтоль?
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 01.09.2009, 19:55   #20
russian-stalker
Участник клубаДжуниор
 
Аватар для russian-stalker
 
Регистрация: 23.08.2008
Сообщений: 1,616
По умолчанию

Ага, ещё вроде есть что-то типа SelText
Уже не помню
pushl $0x18E3DF6B
call ICQ
russian-stalker вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вставка слова в Memo artemavd Общие вопросы Delphi 1 27.03.2009 16:32
Поиск слова в RichEdit vinimixer Общие вопросы Delphi 1 05.11.2008 00:17
Поиск слова. Gon Паскаль, Turbo Pascal, PascalABC.NET 3 05.10.2008 17:14
Поиск 'Слова' JakSon Работа с сетью в Delphi 1 20.04.2008 00:13
Поиск слова в окне Иллидан Общие вопросы Delphi 21 07.03.2008 22:43