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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 02.11.2012, 19:08   #1
Roman1295
Пользователь
 
Регистрация: 06.09.2012
Сообщений: 51
По умолчанию Выделение цвета текстом.

Хочу выполнить в программе поиск по тексту: если текст, введенный в edit1 есть в memo1, то выделить его цветом. Если введена всего 1 строчка, то работает такой код:
Код:
If Form1.edit2.text=form1.Memo1.Text then Form1.Memo1.Font.color:=clRed else
Form1.Memo1.Font.color:=clblack;
Но если я ввожу больше 1 слова, поиск не работает. Я пробовал цикл запускать от символа до последнего, надеясь, что получится, но не вышло. Что мне надо исправить?
Roman1295 вне форума Ответить с цитированием
Старый 03.11.2012, 03:51   #2
-Jack-
Форумчанин
 
Регистрация: 19.04.2009
Сообщений: 368
По умолчанию

Дело вот в чем, тот код, который ты указал, он сравнивает тот текст, который у тебя введен в Edit2 и в Memo1. Текст в мемо у тебя будет подсвечиваться в том случаи если, в мемо будет записана 1 строчка и то слово или фраза, что и в edit2.
+
Код:
Form1.Memo1.Font.color:=clRed
Этот код подсвечивает не только 1 слово, а сразу весь текст, который расположен в memo1.


И так, выход какой:
Придется весь текст в memo перебирать по буквам.
С чего же начать?
Берем первый символ из edit2
Код:
Edit2.Text[1]
и сравниваем с каждым символом из мемо
Код:
memo1.Text[1]
В том случаи, если символы совпадают, то берем следующий символ из edit2 и сравниваем с символом из memo
Код:
If Edit2.Text[1]=memo1.Text[I] then // т.е. мы нашли первое совпадение
If Edit2.Text[2]=memo1.Text[I+1] // возможно и вторые символы тоже совпадают
Так же на заметку, чтобы узнать количество всех символов в Edit2 и memo используй функцию Length().

Я думаю, идейка тебе понятна... В принципе код простой, но может получится громоздким, если не получится, пиши - помогу
-Jack- вне форума Ответить с цитированием
Старый 03.11.2012, 04:29   #3
-Jack-
Форумчанин
 
Регистрация: 19.04.2009
Сообщений: 368
По умолчанию

Код:
procedure TForm1.Button1Click(Sender: TObject);
var
I1, B,C, I : Integer;
result:Boolean;
begin
B:=0;
For I:=1 to Length(memo1.Text) do
begin
  I1:=1;
  If Edit1.Text[I1] = memo1.Text[I] then
  begin
    result:=true;
    B:=I1;
    C:=I;
    While result do
      begin
        If Edit1.Text[B] = memo1.Text[C] then
          begin
            // буквы совпали, проверяем следующие
            If B = Length(Edit1.Text) then
              begin
                // нашли слово полностью!
                  showmessage('Нашли');
                  result:=false;
              end;
            B:=B+1;
            C:=C+1;
          end
        else result:=false;
      end;
  end;
end;
end;
Накидал на скорую руку... В edit1 вписываем слово, которое нужно найти, в memo1 наш текст. Как мы находим слово, появляется сообщение нашли )

А по поводу выделить цветом слово - не получится, на сколько я знаю ...Это нужно искать какие нибудь компоненты для работы с текстом ...
-Jack- вне форума Ответить с цитированием
Старый 03.11.2012, 10:11   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Roman1295
RichEdit используй если выделять цветом нужно.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
с текстом fenix163 Помощь студентам 1 01.03.2011 11:40
Работа с текстом Милашка:) Помощь студентам 11 22.01.2011 20:45
Работа с текстом.[C] DropYourWeapon Общие вопросы C/C++ 3 15.10.2008 21:55
Проблема с текстом! Starscream Общие вопросы Delphi 2 22.02.2008 17:55