Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> memo, раскрасить фон за текстом в Memo 
:(
    Опции темы
WGR
Дата 7.6.2006, 12:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 184
Регистрация: 6.6.2006
Где: Россия

Репутация: нет
Всего: нет



Народ помогите 
мне надо в memo закрасить фон за первыми 100 символами допустим в красный цвет а  с 101 по 200 зелёным 
КАк это зделать на Delphi
чёт никак не соображу вродебы можно через convas но при этом поверх текста вроде рисует
Помогите... 
--------------------
Flash ICQ Chuch@"... да как два байта отослать!!!"
PM   Вверх
Yanis
Дата 7.6.2006, 13:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2937
Регистрация: 9.2.2004
Где: Москва

Репутация: 72
Всего: 111



Может логичнее исполльзовать RichEdit? Там попроще это сделать... 


--------------------
user posted image *щёлк*
PM MAIL WWW ICQ   Вверх
Rennigth
Дата 7.6.2006, 13:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1708
Регистрация: 21.6.2004
Где: Moscow

Репутация: 49
Всего: 76



WGR, согласен с Yanis, используй RichEdit, а закрашивать так:
http://forum.vingrad.ru/index.php?showtopi...mp;#entry464833 


--------------------
(* Honesta mors turpi vita potior *)
PM MAIL ICQ   Вверх
jaAlex
Дата 7.6.2006, 23:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 64
Регистрация: 31.5.2006
Где: Краснодар

Репутация: нет
Всего: нет



Код

procedure TForm1.Memo1Change(Sender: TObject);
begin
if Memo1.Lines.Count<10 then Memo1.Brush.Color :=clRed
else Memo1.Brush.Color:=clGreen;
end;

Это вот счетчик по линиям, как по символам - не помню. Закрашивает выбранным цветом за символами по строкам. Если сильно надо, то выложу как по символам считать. Или сам сделаешь? 
PM MAIL   Вверх
WGR
Дата 8.6.2006, 08:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 184
Регистрация: 6.6.2006
Где: Россия

Репутация: нет
Всего: нет



Rennigth, хорошо попробую этот код
 smile 
Код

uses RichEdit...
...
var
  lFmt: TCharFormat2;
begin
  FillChar(lFmt.cbSize, SizeOf(TCharFormat2), 0);
  lFmt.cbSize := SizeOf(TCharFormat2);

  //Background Color
  lFmt.crBackColor := clred;
  lFmt.dwMask := CFM_BACKCOLOR;
  SendMessage(RichEdit.Handle, EM_SETCHARFORMAT, SCF_SELECTION, Integer(@lFmt));

  //Text Color
  lFmt.crTextColor := clGreen;
  lFmt.dwMask := CFM_COLOR;
  SendMessage(RichEdit.Handle, EM_SETCHARFORMAT, SCF_SELECTION, Integer(@lFmt));
end;
...


но он наверно закрасит фон у выделенного текста? (SCF_SELECTION) smile 

а мне надо программно с указанного символа по указанный
Если не сложно подскажи  
  
--------------------
Flash ICQ Chuch@"... да как два байта отослать!!!"
PM   Вверх
~FoX~
Дата 8.6.2006, 08:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


НЕ рыжий!!!
****


Профиль
Группа: Участник Клуба
Сообщений: 2819
Регистрация: 8.10.2003
Где: Зеленоград

Репутация: 13
Всего: 68



Вот на скорую руку набросал
Код

var
  c: TCanvas;
  n, en: integer; 
  x, y: integer;
  s: string;
begin
  n := 1; //Первый символ для покраски
  en := 10; //Последний символ
  try
    c := TCanvas.Create;
    c.Handle := GetDC(Memo1.Handle); //Создали канвас для мемо ;-)
    s := copy(Memo1.Text, n, en);
    x:=c.TextWidth(s); //Получили ширину
    y:=c.TextHeight(s); //Получили высоту
    c.Brush.Color := clRed;
    c.FillRect(Rect(0, 0, x, y)); //Тут в место нулей надо определять положение, но это ты и сам сделаешь
    c.TextOut(0, 0, s); //Написали текст по верх покраски
  finally
    c.Free; //Убили канвас
  end;
end;

Это просто пример.
   

Это сообщение отредактировал(а) ~FoX~ - 8.6.2006, 08:29


--------------------
user posted image
…множественность никогда не следует полагать без необходимости…
PM MAIL WWW ICQ Jabber   Вверх
Rennigth
Дата 8.6.2006, 09:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1708
Регистрация: 21.6.2004
Где: Moscow

Репутация: 49
Всего: 76



WGR, 
а так? smile 
Код

var
  lFmt: TCharFormat2;
  lSaveSelStart, lSaveSelLength: Integer;
begin
  FillChar(lFmt.cbSize, SizeOf(TCharFormat2), 0);
  lFmt.cbSize := SizeOf(TCharFormat2);

  lSaveSelStart := RichEdit.SelStart;
  lSaveSelLength := RichEdit.SelLength;

  RichEdit.SelStart := 0;
  RichEdit.SelLength := 200;

  lFmt.crBackColor := clred;
  lFmt.dwMask := CFM_BACKCOLOR;
  SendMessage(RichEdit.Handle, EM_SETCHARFORMAT, SCF_SELECTION, Integer(@lFmt));

  RichEdit.SelStart := lSaveSelStart;
  RichEdit.SelLength := lSaveSelLength;
 


--------------------
(* Honesta mors turpi vita potior *)
PM MAIL ICQ   Вверх
WGR
Дата 8.6.2006, 11:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 184
Регистрация: 6.6.2006
Где: Россия

Репутация: нет
Всего: нет



пасибо 
~FoX~, 
Rennigth, 
думаю прокатит

я новичёк и посты вродеб ёщё не могу ставить 
поставлю как смогу

дома попробуя запрогить по вашему а то щя на работе
 
--------------------
Flash ICQ Chuch@"... да как два байта отослать!!!"
PM   Вверх
WGR
Дата 9.6.2006, 01:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 184
Регистрация: 6.6.2006
Где: Россия

Репутация: нет
Всего: нет



Rennigth, Взял твой метод
он вроде попроще 

вот чё мне в итоге надо было 


Код

procedure TForm1.RichEditChange(Sender: TObject);
var
  lFmt: TCharFormat2;
  lSaveSelStart, lSaveSelLength: Integer;
begin
  FillChar(lFmt.cbSize, SizeOf(TCharFormat2), 0);
  lFmt.cbSize := SizeOf(TCharFormat2);

  lSaveSelStart := RichEdit.SelStart;
  lSaveSelLength := RichEdit.SelLength;

  RichEdit.SelStart := 10;
  RichEdit.SelLength := 20;

  lFmt.crBackColor := clred;
  lFmt.dwMask := CFM_BACKCOLOR;
  SendMessage(RichEdit.Handle, EM_SETCHARFORMAT, SCF_SELECTION, Integer(@lFmt));

  RichEdit.SelStart := 21;
  RichEdit.SelLength := 30;

  lFmt.crBackColor := clgreen;
  SendMessage(RichEdit.Handle, EM_SETCHARFORMAT, SCF_SELECTION, Integer(@lFmt));


  RichEdit.SelStart :=31;
  RichEdit.SelLength := 200;

  lFmt.crBackColor:=clYellow;
  SendMessage(RichEdit.Handle, EM_SETCHARFORMAT, SCF_SELECTION, Integer(@lFmt));

  RichEdit.SelStart :=0;
  RichEdit.SelLength := 9;
  SendMessage(RichEdit.Handle, EM_SETCHARFORMAT, SCF_SELECTION, Integer(@lFmt));

  RichEdit.SelStart := lSaveSelStart;
  RichEdit.SelLength := lSaveSelLength;
end;




вот тока как в место clYellow поставить фоновое в RichEdit
ставлю RichEdit.Color а он мне фиолетовым красит

 

Это сообщение отредактировал(а) WGR - 11.8.2006, 07:29
--------------------
Flash ICQ Chuch@"... да как два байта отослать!!!"
PM   Вверх
Rennigth
Дата 9.6.2006, 09:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1708
Регистрация: 21.6.2004
Где: Moscow

Репутация: 49
Всего: 76



а это нормально, ты просто после того как закрасил текс снимай выделение. Например так 
Код

  RichEdit.SelLength = 0;


 


--------------------
(* Honesta mors turpi vita potior *)
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0499 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.