Форум программистов, компьютерный форум, киберфорум
Наши страницы

Delphi для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.91
strib0g
0 / 0 / 0
Регистрация: 24.06.2012
Сообщений: 22
#1

Выделение цветом слов в RichEdit - Delphi

27.06.2013, 10:24. Просмотров 1851. Ответов 6
Метки нет (Все метки)

Добрый день! Понимаю, что такая тема была не раз, но я так и не смог разобраться в этом. Мне нужно сделать подпрограмму, которая бы искала нужные слова в RichEdit и выделяла их установленным заранее цветом. Помогите пожалуйста написать её, я уже месяц с этим мучаюсь...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.06.2013, 10:24
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Выделение цветом слов в RichEdit (Delphi):

RichEdit - Выделение цветом слов - Delphi
У мя условие, я выделяю текст в ричедите, по нажатию кнопки проверяется если слово больше 12 символов, то окрашиваются последние 3 символа...

Выделение слов из строки в RichEdit - Delphi
Имеется функция: function SearchForText_AndSelect(RichEdit: TRichEdit; SearchText: string): Boolean; var StartPos, Position,...

«HighLight» или выделение «ключевых слов» в RichEdit (Delphi 7) - Delphi
Думаю, для начала стоит сказать, что же подразумевается под «ключевыми словами». А имеется в виду те слова, которые Delphi выделяет при...

Выделить цветом строку RichEdit - Delphi
идем по всем строкам RichEdit, если строка кончается на '!' то выделяем строку красным, если нет, то зеленым. for i := 0 to...

Не выделяется цветом строка в RichEdit - Delphi
procedure TForm1.Button2Click(Sender: TObject); var i: integer; begin for i:=0 to richedit1.Lines.Count-1 do begin if ...

Окраска символа случайным цветом в RichEdit - Delphi
Доброго времени суток! Помогите с окраской в RichEdit. Сама задача такова: При вводе произвольного текста, он разбивается символом "*",...

6
Ev1l
133 / 133 / 5
Регистрация: 29.08.2012
Сообщений: 353
27.06.2013, 10:44 #2
зря месяц мучались, поиск и 15-30 минут дают примерно такой результат:
Delphi
1
2
3
4
5
6
if pos('Edit',RichEdit1.Text)<>0 then
begin
  RichEdit1.SelStart:=pos('Edit',RichEdit1.Text)-1;
  RichEdit1.SelLength:=4;
  RichEdit1.SelAttributes.Color:=clred;
end;
2
strib0g
0 / 0 / 0
Регистрация: 24.06.2012
Сообщений: 22
27.06.2013, 11:08  [ТС] #3
Спасибо, попробую сделать)
0
Ev1l
133 / 133 / 5
Регистрация: 29.08.2012
Сообщений: 353
27.06.2013, 11:57 #4
вот так выделяет все вхождения слов edit в текст
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
var s:string;
i:integer;
begin
s:='';
for I := 1 to length(RichEdit1.Text) do
if ansilowercase(RichEdit1.Text[i])='e' then
  begin
    s:=Copy(RichEdit1.Text,i,4);
    if AnsiLowerCase(s)='edit' then
    begin
      RichEdit1.SelStart:=i-1;
      RichEdit1.SelLength:=4;
      RichEdit1.SelAttributes.Color:=clred;
    end;
  end;
end;
Добавлено через 28 минут
и еще одно исправление теперь правильно выделяет текст с учетом перевода строк:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
procedure TForm1.Button1Click(Sender: TObject);
var s:string;
i,a:integer;
begin
s:='';
i:=1;
a:=1;
while I < length(RichEdit1.Text) do
begin
  if ansilowercase(RichEdit1.Text[i])='e' then
    begin
      s:=Copy(RichEdit1.Text,i,4);
      if AnsiLowerCase(s)=AnsiLowerCase('edit') then
        begin
          RichEdit1.SelStart:=i-a;
          RichEdit1.SelLength:=4;
          RichEdit1.SelAttributes.Color:=clred;
        end;
    end;
if RichEdit1.Text[i]=#10 then
  begin
    i:=i+1;
    a:=a+1;
  end
    else i:=i+1;
end;
end;
2
strib0g
0 / 0 / 0
Регистрация: 24.06.2012
Сообщений: 22
27.06.2013, 14:32  [ТС] #5
Ev1l, спасибо Вам огромное! Наконец-таки всё получилось))
0
Ev1l
133 / 133 / 5
Регистрация: 29.08.2012
Сообщений: 353
27.06.2013, 22:38 #6
кстати, вот что интересно, я как то подсознательно вывел этот костыль в виде
Delphi
1
RichEdit1.SelStart:=i-a;
, хотя, функция copy нормально копирует кусок текста начиная именно с i, а вот свойство selStart почему то выделяет не так, я думаю что тут разница в EOLN, тоесть copy считает все символы отдельно, а выделение склеивает #13 и #10? Это из-за того, что нельзя начать выделение между символами перехода строки? Господа программисты, подскажите?
0
Ev1l
133 / 133 / 5
Регистрация: 29.08.2012
Сообщений: 353
03.07.2013, 09:50 #7
если кому интересно,
...SelStart индексируется от 0, а не 1 как string. Во-вторых, в версиях RichEdit 2.0 и выше для перевода строки используют только один символ CR = #13, и соотв-но при вводе "сладкой парочки" CR\LF=#13#10 она заменяется просто на #13 - отсюда и укорочение строки по одному символу на каждую пару #13#10.
PS: В дельфи 7 юзается RichEdit 1.0 и соотв-но никакого укорочения не происходт. Но если в TRichEdit.CreateParams подменить версию на 2.0, то наблюдается тот же эффект укорочения...
0
03.07.2013, 09:50
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.07.2013, 09:50
Привет! Вот еще темы с ответами:

richedit, выделить красным цветом определенный символ - Delphi
Делаем по практике текстовый редактор, хочу приложить к нему тест на скорость печати. В richedit1 пользователь вводит текст, в richedit2...

Выделение текста в RichEdit - Delphi
Доброго дня. Подскажите пожалуйста, как выделить нужным цветом определённое слово в компоненте RichEdit? И можно ли это сделать в...

Выделение текста в RichEdit - Delphi
Вообщем есть 2 RichEdit, я их сравниваю между собой, если есть различия то в счётчик +1 (счётчик это k), если счётчик не равен 0, то...

В RichEdit выделение абзаца - Delphi
Подскажите, можно ли в RichEdit выделить абзац программно, или обратится к абзацу целиком, что бы изменить атрибуты текста (полужирный,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru