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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 21.10.2015, 21:02   #1
Janger
Форумчанин
 
Регистрация: 28.09.2011
Сообщений: 250
По умолчанию Сменить цвет строки в RichEdit

В общем пытался гуглить этот вопрос, ничего нету, постоянно мне дают код как изменить цвет текста в строке, а мне нужно изменить цвет самой строки....
Я вообще уже не знаю где искать эту информацию....
p.s.
цвет строки, легко менять в ListBox, НО, там нельзя редактировать строки как в RichEdit, так что, мне не подходит
Janger вне форума Ответить с цитированием
Старый 21.10.2015, 21:23   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Выдели нужный фрагмент (SelStart и SelLength) и изменяй цвет - SelAttributes. Еще легче, чем в ListBox
Цитата:
постоянно мне дают код как изменить цвет текста в строке, а мне нужно изменить цвет самой строки
Так и дают наверняка. Не пойму чем отличается выделение части строки от выделения всей строки
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 21.10.2015, 21:30   #3
Janger
Форумчанин
 
Регистрация: 28.09.2011
Сообщений: 250
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Выдели нужный фрагмент (SelStart и SelLength) и изменяй цвет - SelAttributes. Еще легче, чем в ListBox

Так и дают наверняка. Не пойму чем отличается выделение части строки от выделения всей строки
Я вот такой код нашёл
Код:
procedure TForm1.Button2Click(Sender: TObject);
var
  StrCount, i, sstart : integer;
begin
  StrCount := 1;
  if richedit1.lines.Count<StrCount then StrCount := richedit1.lines.Count;
  sstart := 0;
  for i := 0 to StrCount - 1 do
  begin
    richedit1.selstart := sstart;
    richedit1.sellength:=length(richedit1.lines[i]);
    RichEdit1.SelAttributes.color:=clRed;
  end;
end;
Там все элементы о которых вы говорите присутствуют, и в общем из всех строк выделяется только первая строка и на ней меняется только цвет текста, а не самой строки ...
Janger вне форума Ответить с цитированием
Старый 21.10.2015, 21:30   #4
cotseec
Пользователь
 
Регистрация: 02.05.2012
Сообщений: 45
По умолчанию

имеется такая штука, как Text Object Model
экземпляр ITextDocument interface получается посылкой RichEdit'у сообщения EM_GETOLEINTERFACE message и приведением после LParam к ITextDocument
Цитата:
Applications can retrieve an ITextDocument pointer from a rich edit control. To do this, send an EM_GETOLEINTERFACE message to retrieve an IRichEditOle object from a rich edit control. Then, call the object's IUnknown::QueryInterface method to retrieve an ITextDocument pointer.
затем необходимо получить интервал требуемой строки ITextDocument::Range method и шрифт этого интервала ITextRange::GetFont method у которого установить требуемый BackColor ITextFont::SetBackColor method

хейдер для Delphi вроде как у Джедаев был (по крайней мере можно экспортировать описание требуемых типов из Msftedit.dll, правда получалось у меня такой экспорт только на D7, более молодые выдавали ошибку, с которой не было времени разбираться)
есть в сети еще вот это TOM.pas
Skype: cotseec
ICQ: 330-171-495
cotseec вне форума Ответить с цитированием
Старый 21.10.2015, 21:34   #5
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

А, речь о цвете фона. Стандартно в RichEdit нет такой возможности. Сообщениями не пробовал, предыдущий оратор говорит, что получалось. А вообще более продвинутый ричедит, типа RxRichEdit. У него по моему можно. RichView еще посмотреть
Цитата:
в общем из всех строк выделяется только первая строка
А какая должна, если в selstart ноль все время присваивается?
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 21.10.2015 в 21:43.
Аватар вне форума Ответить с цитированием
Старый 23.10.2015, 07:08   #6
NIKOLAYY2
Форумчанин
 
Регистрация: 23.12.2014
Сообщений: 220
По умолчанию

Можно попробовать листбокс.
У листбокса есть канва
Событие OnDrawItem поможет тебе раскрасить фон строк.
Пример на скрине.
Изображения
Тип файла: jpg 123.jpg (16.5 Кб, 246 просмотров)
NIKOLAYY2 вне форума Ответить с цитированием
Старый 23.10.2015, 18:07   #7
cotseec
Пользователь
 
Регистрация: 02.05.2012
Сообщений: 45
По умолчанию

можно еще посмотреть в сторону EM_SETBKGNDCOLOR message, но как я понял окрашивается весь фон

через TOM получается следующее:
Screen.png

пример + библиотека типов прилагается
tom.zip
Skype: cotseec
ICQ: 330-171-495
cotseec вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сменить цвет кнопки при нажатии Вэйлинк Общие вопросы C/C++ 1 19.11.2014 21:00
Сменить цвет кнопки при нажатии Вэйлинк C# (си шарп) 1 15.11.2014 17:40
Сменить цвет формы Delphi detalik Помощь студентам 2 15.04.2011 11:01
сменить цвет линии в компоненте TChart Blondinka Общие вопросы Delphi 1 24.12.2007 15:52
TPaintBox; Сменить цвет... JetAPI Компоненты Delphi 12 28.10.2007 11:24