Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.57/56: Рейтинг темы: голосов - 56, средняя оценка - 4.57
2 / 2 / 0
Регистрация: 09.04.2011
Сообщений: 110

Изменение цвета фона выделения в RichEdit

04.06.2011, 22:57. Показов 10848. Ответов 24
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте. На форме есть RichEdit, в нем по ходу дела пользователь выделяет текст, но цвет фона выделения черный. Подскажите пожалуйста как его можно поменять? Заранее спасибо!
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
04.06.2011, 22:57
Ответы с готовыми решениями:

Изменение цвета фона текста RichEdit при нажатии на кнопку
У меня есть форма на которой есть кнопка и Richedit. У меня сделано так, что при нажатии на кнопку появляется диалоговое окно цветов. Как ...

Изменение цвета в RichEdit
Всем добрый вечер. Задача Имеется файл fileLegal.txt в нем имена файлов с правильными путями, надо чтобы эти имена файлов в RichEdit1...

RichEdit - выбор цвета...
Все, что мне надо - это сделать в RichEdit на одной строке несколько форматирований. Например, что бы в одной строке писалось: " This...

24
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
05.06.2011, 00:01
определяете диапазон выделения, меняете фон текста на свой любимый ярко-зеленый (лайм), в надежде, что от него у пользователя глаза болеть не будут , - в чем проблема ?
0
2 / 2 / 0
Регистрация: 09.04.2011
Сообщений: 110
05.06.2011, 11:11  [ТС]
меняете фон текста
А как это можно сделать?

Добавлено через 2 часа 35 минут
Нашел на одном форуме (давность темы не оставляет надежд) код:
C++
1
2
3
4
5
6
Richedit::CHARFORMAT2A  cf;
   cf.cbSize = sizeof(cf);
   cf.dwMask = CFM_BACKCOLOR | CFM_COLOR;
   cf.crBackColor = clBlue;
   cf.crTextColor =clRed;
   SendMessage( RichEdit1->Handle,  EM_SETCHARFORMAT, (WPARAM)SCF_SELECTION, (LPARAM)&cf);
Как я понял здесь при выделении фон текста и цвет шрифта меняется. Попробовал поставить на нажатие Button, но результат таков: выделяя часть текста и нажимая на этот Button эта разукрашенная часть текста становится черной ... подскажите в чем ошибка? Заранее спасибо!
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
05.06.2011, 18:02
C++
1
2
3
4
5
6
::_CHARFORMAT2 cf;
cf.cbSize = sizeof(cf);
cf.dwMask = CFM_BACKCOLOR;
cf.crBackColor = (TColor)clBlue;
RichEdit1->Perform(EM_SETCHARFORMAT,SCF_SELECTION,
        reinterpret_cast<LPARAM>(&cf)); // LPARAM)&cf);
1
2 / 2 / 0
Регистрация: 09.04.2011
Сообщений: 110
05.06.2011, 18:14  [ТС]
К сожалению эффект такой же ...не могу сообразить что может быть не так, может быть какое-нибудь свойство мешает?
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
05.06.2011, 18:50
а попробуйте выделить не руками, а при нажатии на кнопку
C++
1
2
RichEdit->SelStart = 10;
RichEdit->SelLength = 100;
и дальше код закраски фона.

Добавлено через 2 минуты
давность темы не оставляет надежд
это не имеет значения, структура параформат без "срока упротребления" .
0
2 / 2 / 0
Регистрация: 09.04.2011
Сообщений: 110
05.06.2011, 18:53  [ТС]
Даже вот так попробовал:
C++
1
2
3
4
5
6
7
8
9
10
RichEdit1->SelStart = 10;
RichEdit1->SelLength = 100;
Richedit::CHARFORMAT2 cf;
cf.cbSize = sizeof(cf);
cf.dwMask = CFM_BACKCOLOR;
cf.crBackColor = (TColor)clBlue;
RichEdit1->SelStart = 10;
RichEdit1->SelLength = 100;
RichEdit1->Perform(EM_SETCHARFORMAT,SCF_SELECTION,
        reinterpret_cast<LPARAM>(&cf));
Все-равно эффекта нет. А у Вас фон текста изменяется?

это не имеет значения, структура параформат без "срока упротребления" .
Это ясно, я имел ввиду сомнения что получу там хоть какой-то совет.
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
05.06.2011, 19:02
для чего второе выделение ? оно затирает первое, имхо
да , у меня работает:
Миниатюры
Изменение цвета фона выделения в RichEdit  
0
2 / 2 / 0
Регистрация: 09.04.2011
Сообщений: 110
05.06.2011, 19:12  [ТС]
Странно ... сделал заново, на форму кинул RichEdit и Button и код на эту кнопку и все равно ничего не перекрашивается. Может это из-за того что у меня c++ builder 6?
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
05.06.2011, 19:19
система й вас какая? и киньте-ка в папку с проектом содержимое этого архива:
Вложения
Тип файла: rar dll.rar (239.1 Кб, 71 просмотров)
0
2 / 2 / 0
Регистрация: 09.04.2011
Сообщений: 110
05.06.2011, 19:22  [ТС]
Windows 7, кинул в папку с проектом - не помогло ...
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
05.06.2011, 19:29
вот функция и код кнопки того, что на рисунке , пробуйте
C++
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
28
29
//---------------------------------------------------------------------------
void __fastcall TForm1::AddLine(TRichEdit *RichEdit1,const AnsiString &Text,
            int iSize,const AnsiString &Name,bool IsBold)
{
  //Add line to RichEdit
  ::_CHARFORMAT2 fmt;
  fmt.cbSize = sizeof(fmt);
  fmt.dwMask = CFM_BACKCOLOR;
  fmt.crBackColor = (TColor)clYellow;
  RichEdit1->SelStart = RichEdit1->Text.Length();
  RichEdit1->SelLength = 0; // Вставка строки с переходом на новую строку
  RichEdit1->SelAttributes->Name = Name;
  RichEdit1->SelAttributes->Size = iSize;
  TFontStyles Styles = RichEdit1->SelAttributes->Style;
  if(IsBold)Styles << fsBold;
  else Styles>>fsBold;
  RichEdit1->SelAttributes->Style = Styles;
  RichEdit1->Perform(EM_SETCHARFORMAT,SCF_SELECTION,
          reinterpret_cast<LPARAM>(&fmt)); // LPARAM)&fmt);
  RichEdit1->SelText = (Text + "\r\n");
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
  AnsiString Name = "Courier New";
  Edit1->Text = Name;
  AddLine(RichEdit1,Edit1->Text,10,Name,true);
}
//---------------------------------------------------------------------------
Добавлено через 4 минуты
а вот попроще
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
void __fastcall TForm1::Button1Click(TObject *Sender)
{
  ::CHARFORMAT2 cfm;
  if( ColorDialog1->Execute() )
  {
    cfm.cbSize = sizeof(cfm);
    cfm.dwMask = CFM_PROTECTED|CFM_BACKCOLOR;
    cfm.dwEffects = CFE_PROTECTED;
    cfm.crBackColor = ColorDialog1->Color;
    SendMessage( RichEdit1->Handle, EM_SETCHARFORMAT,
          (WPARAM)SCF_SELECTION, (LPARAM)&cfm);
  }
}
на форме
TButton *Button1;
TColorDialog *ColorDialog1;
TRichEdit *RichEdit1;
, выделить текст, нажать кнопку, выбрать цвет.
1
2 / 2 / 0
Регистрация: 09.04.2011
Сообщений: 110
05.06.2011, 20:40  [ТС]
Оба случая работают, спасибо огромное, сейчас буду разбираться что было не так!

Добавлено через 1 час 7 минут
А вот если в RichEdit есть кусок с цветным фоном, то как можно программно узнать что эта часть уже расскрашена?
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
05.06.2011, 20:42
Вы это "задания" сами себе придумываете ?
0
2 / 2 / 0
Регистрация: 09.04.2011
Сообщений: 110
05.06.2011, 20:46  [ТС]
LK да, я делаю редактор lua скриптов, подсветку синтаксиса и lua и скриптовой базы (пока что 2 класса) сделал, теперь вот делаю этот редактор боле "интрфесным", а то вид у него не очень уж привлекательный.
А нужно узнать выделение для того чтобы убрать помеченную строку ... вот для чего.
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
05.06.2011, 20:55
чтобы убрать выделение таким самопальным способом, выделяете тот же диапазон текста и задаете цвет фона по умолчанию, т.е., в большинстве случаев, белый, или дефолтное состояние эдита
но эти ваши извраты, имхо, не приветствуются, потому как вы пытаетесь изменить стандартные вещи, к которым пользователь привык, и которые опробованы десятками лет и миллионами пользователей, а вашими "новшествами" он будет разве что удивлен, не больше
0
2 / 2 / 0
Регистрация: 09.04.2011
Сообщений: 110
05.06.2011, 20:57  [ТС]
LK спасибо, замечание учту. Мне нужно малость другое, а именно узнать программно каким цветом фон у куска текста.
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
05.06.2011, 21:01
зачем?
0
2 / 2 / 0
Регистрация: 09.04.2011
Сообщений: 110
05.06.2011, 21:02  [ТС]
Чтобы сделать его опять белым если он не белый.
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
05.06.2011, 21:06
блин, который раз замечаю, - народ не читает собственные темы ! сообщение №16
Цитата Сообщение от майо!!!
чтобы убрать выделение таким самопальным способом, выделяете тот же диапазон текста и задаете цвет фона по умолчанию, т.е., в большинстве случаев, белый, или дефолтное состояние эдита
... бляха-муха...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
05.06.2011, 21:06
Помогаю со студенческими работами здесь

Сохранение цвета фона формы при закрытии приложения
У меня есть компонент ColorBox1, и к ему кнопка Button с таким кодом. void __fastcall TForm2::Button9Click(TObject *Sender) { ...

Оперативное изменение цвета фона и цвета символов строки.
я уже задала строку,вывела на экран в виде бесконечно бегущей строки. осталось сделать оперативное изменение цвета фона и цвета символов...

Плавное изменение цвета фона по времени в рандомные цвета
В общем, есть изображение (фон), мне необходимо, чтобы оно плавно окрашивалось в различные цвета Помогите, пожалуйста

Изменение цвета выделения элемента
Помогите пожалуйста!Пытаюсь программно изменять цвет выделения, т.е. чтобы можно было в программе выбирать цвет. Вот этот код, что тут не...

Изменение стандартного цвета выделения текста
Добрый день, подскажите с таким вопросом: При выделении текста к примеру в TextBox, он выделяется стандартно синим, и текст белым. Можно ли...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru