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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 08.03.2013, 23:01   #1
belkeandrey
Пользователь
 
Регистрация: 21.02.2013
Сообщений: 48
По умолчанию Поиск в richedit который начинается снова при нажа

Ребят, 2й день ломаю голову, ничего не выходит. Сделал поиск в richedit, все ищет, слова выделяет. Но нужно, чтобы при введении нового значения в edittext и нажатии кнопки "Поиск" убралось выделение от предыдущего поиска и заменилось новым. Вот мой листинг. Здесь все работает, но текст сначала ВЕСЬ выделяется красным и СО ВСЕГО снимается жирность... Помогите!!!
Код Delphi
Код:
procedure TForm1.Button7Click(Sender: TObject);
const
  //разделитель
  D = ['.', ',', ':', ';', '!', '?', '-',')','(', ' ', #9, #10, #13];
var
  S,sW,sW1, sWord : String;
  i, p1, Len, LenW, LenW1 : Integer;
begin
  //текст из RichEdit.
  S:=RichEdit1.Text;
  Len:=Length(S);
  p1:=0;
  //искомое слово
  sWord := AnsiUpperCase(Edit1.Text);
  for i:=1 to Len do begin
    //пропускаем разделители
    if S[i] in D then Continue;
    //начало слова
    if (i = 1) or (S[i - 1] in D) then p1 := i;
    //конец слова
    if (i = Len) or (S[i + 1] in D) then begin
      //извлекаем слово
      LenW:=i-p1+1;
      sW:=AnsiUpperCase(Copy(S, p1, LenW));
      //сравниваем с шаблоном
      if sW = sWord then begin
        //выделяем найденное слово
        RichEdit1.SelStart := p1-1;
        RichEdit1.SelLength := LenW;
        RichEdit1.SelAttributes.Style := RichEdit1.SelAttributes.Style + [fsBold];
        RichEdit1.SelAttributes.Color := RGB(0,0 , 200);
        end;
        //пытаемся возвратить символам ПРЕДЫДУЩЕГО поиска вид по умолчанию, но красным выделяется ВСЕ. Хотя последующие циклы работает
        if sWord <> sW then begin
        RichEdit1.SelStart := p1+1;
        RichEdit1.SelLength := LenW;
        RichEdit1.SelAttributes.Style := RichEdit1.SelAttributes.Style - [fsBold];
        RichEdit1.SelAttributes.Color := clRed;
        end;
      end;
 
  end;

Последний раз редактировалось Stilet; 09.03.2013 в 23:04.
belkeandrey вне форума Ответить с цитированием
Старый 08.03.2013, 23:05   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Сразу все и без приморочек
Код:
RichEdit1.SelStart := 0;
RichEdit1.SelLength := Length(RichEdit.Text);
RichEdit1.SelAttributes.Style := RichEdit1.SelAttributes.Style - [fsBold];
RichEdit1.SelAttributes.Color := нужный цвет
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 08.03.2013, 23:39   #3
belkeandrey
Пользователь
 
Регистрация: 21.02.2013
Сообщений: 48
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Сразу все и без приморочек
Код:
RichEdit1.SelStart := 0;
RichEdit1.SelLength := Length(RichEdit.Text);
RichEdit1.SelAttributes.Style := RichEdit1.SelAttributes.Style - [fsBold];
RichEdit1.SelAttributes.Color := нужный цвет
В смысле сразу все? Что Вы имели в виду?
belkeandrey вне форума Ответить с цитированием
Старый 09.03.2013, 17:04   #4
bulldog5293
Форумчанин
 
Регистрация: 13.05.2010
Сообщений: 670
По умолчанию

Цитата:
В смысле сразу все? Что Вы имели в виду?
код оптимизирован без доп движений
bulldog5293 вне форума Ответить с цитированием
Старый 09.03.2013, 22:49   #5
belkeandrey
Пользователь
 
Регистрация: 21.02.2013
Сообщений: 48
По умолчанию

Спасибо большое, я все понял! Да, код уменьшился, но моя задача все равно не решена. Наверное, я неправильно поставил вопрос. Мне надо, чтобы при первом нажатии на кнопку "поиск", выделились все слова, соответствующие запросу, а при повторном нажатии выделение снялось, и начался поиск по следующему запросу. Но! При снятии выделения должен сохраниться изначальный формат текста (цвет, шрифт, подчеркивания, курсив и т.д.). Может быть это нужно реализовывать другим способом?
belkeandrey вне форума Ответить с цитированием
Старый 09.03.2013, 22:57   #6
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Тогда прийдется при каждом поиске запоминать в динамический массив записей значения SelStart, SelLength и Color и перед очередным поиском в цикле по этому массиву восстановливать цвет и сбрасывать Bold.
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 09.03.2013, 23:25   #7
belkeandrey
Пользователь
 
Регистрация: 21.02.2013
Сообщений: 48
По умолчанию

Идея ясна, тоже об этом думал. А можете подсказать немного как это будет выглядеть, а то с массивами пока не разобрался(((
belkeandrey вне форума Ответить с цитированием
Старый 09.03.2013, 23:38   #8
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Код:
type TMyRecord = record
       SelStart: Integer;
       SelLength: Integer;
       Color: TColor;
     end;

var MyArray: array of TMyRecord;
    MyCount: Integer;

  MyCount:=0;  //Начальнон значение

  Inc(MyCount);  //Увеличить размерность массива на 1
  SetLength(MyArray,MyCount);
  MyArray[MyCount-1].SelStart:=...
  MyArray[MyCount-1].SelLength:=...
  MyArray[MyCount-1].Color:=...

  for i:=0 to MyCount-1 do //цикл по массиву
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 09.03.2013, 23:48   #9
belkeandrey
Пользователь
 
Регистрация: 21.02.2013
Сообщений: 48
По умолчанию

Огромное спасибо! Буду разбираться!
belkeandrey вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
поиск в richedit betirsolt Общие вопросы Delphi 7 19.05.2011 10:42
Поиск изображения в RichEdit artemavd Общие вопросы Delphi 6 23.04.2011 09:45
Поиск в RichEdit j0di Общие вопросы Delphi 3 12.09.2010 09:18
поиск в RichEdit mauar Общие вопросы Delphi 2 05.05.2008 14:36