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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 25.08.2010, 02:42   #1
начинающий1
Пользователь
 
Регистрация: 30.07.2009
Сообщений: 46
По умолчанию манипуляции в StringGrid

Всем привет. В StringGrid выводятся данные в таком виде:
Код:
строка1    35ф 20н
строка2    10м  1ф
В событии DrawCell грида есть код, который окрашивает шрифт каждой ячейки цветом, в зависимости от буквы(м,ф или н - красный, зеленый, синий)
Каким образом можно убрать букву с каждой ячейки, но чтобы цвет шрифта в ней соответствовал заданному цвету?
Должно получится так:
Код:
строка1    35 20
строка2    10  1
10 красный цвет шрифта
35 и 1 зеленый цвет шрифта
20 синий цвет шрифта

Спасибо.
начинающий1 вне форума Ответить с цитированием
Старый 25.08.2010, 02:51   #2
ex.cluz
Участник клуба
 
Аватар для ex.cluz
 
Регистрация: 15.01.2010
Сообщений: 1,325
По умолчанию

Я бы посоветовал сделать виртуальное хранилище данных (двухмерный динамический массив, содержащий числа типа byte) о цвете шрифта в каждой ячейке.
Грибы - они разные. Один тебя накормит, другой тебе кино покажет...
Редактор журнала "
[ПРОграммист]"
Yan's Home Digital Lab
ex.cluz вне форума Ответить с цитированием
Старый 25.08.2010, 03:07   #3
Sibedir
Тот ещё
Старожил
 
Аватар для Sibedir
 
Регистрация: 14.11.2007
Сообщений: 2,242
По умолчанию

Да не. По моему, тут все проще. Скорее всего StringGrid - readonly, и просто нужно наглядно визуализировать какие-то выходные данные. У меня такое 100 раз было.
Цитата:
В событии DrawCell грида есть код, который окрашивает шрифт каждой ячейки цветом
А что мешает в этом же DrawCell перерисовать цыфры без букв?

P.S:
Цитата:
В событии DrawCell
Строго говоря, событие называется - OnDrawCell. А DrawCell - это процедура, причем защищенная.
Sibedir вне форума Ответить с цитированием
Старый 25.08.2010, 12:36   #4
начинающий1
Пользователь
 
Регистрация: 30.07.2009
Сообщений: 46
По умолчанию

Sibedir
Вот, что у меня в событии OnDrawCell:
Код:
f:= Pos('ф',tabl1.Cells[ACol,ARow]);
m:= Pos('м',tabl1.Cells[ACol,ARow]);
with tabl1.Canvas do
begin
if (f<>0) and (m=0) and (ACol<>1) then
begin
Font.Color:=clRed; //устанавливаем красный цвет шрифта
Brush.Color:=clWhite; //устанавливаем белый цвет фона
FillRect(Rect); //заливаем фон
end
else
if (m<>0) and (f=0) and (ACol<>1) or (tabl1.Cells[ACol,ARow]='') then
begin
Font.Color:=clGreen; //устанавливаем зеленый цвет шрифта
Brush.Color:=clWhite; //устанавливаем белый цвет фона
FillRect(Rect); //заливаем фон
end;
end;

WriteText(Form2.tot.Canvas,Rect,2,2,tabl1.Cells[ACol,ARow],taCenter);
Цитата:
А что мешает в этом же DrawCell перерисовать цыфры без букв?
Мешает незнание того, как это можно сделать.
начинающий1 вне форума Ответить с цитированием
Старый 25.08.2010, 12:50   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Так:
Код:
f:= Pos('ф',tabl1.Cells[ACol,ARow]);
m:= Pos('м',tabl1.Cells[ACol,ARow]);
s:=tabl1.Cells[ACol,ARow];
with tabl1.Canvas do begin
 if (f<>0) and (m=0) and (ACol<>1) then begin
  Font.Color:=clRed; //устанавливаем красный цвет шрифта
  Brush.Color:=clWhite; //устанавливаем белый цвет фона
  FillRect(Rect); //заливаем фон
  delete(s,f,1);
 end else
   if (m<>0) and (f=0) and (ACol<>1) or (tabl1.Cells[ACol,ARow]='') then begin
    delete(s,m,1);
    Font.Color:=clGreen; //устанавливаем зеленый цвет шрифта
    Brush.Color:=clWhite; //устанавливаем белый цвет фона
    FillRect(Rect); //заливаем фон
   end;
end;

WriteText(Form2.tot.Canvas,Rect,2,2,s,taCenter);
Я выделил основные моменты
s - переменка типа String
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 25.08.2010, 12:59   #6
начинающий1
Пользователь
 
Регистрация: 30.07.2009
Сообщений: 46
По умолчанию

Stilet
Цитата:
Я выделил основные моменты
Так все остается на своих местах(ничего не меняется)
начинающий1 вне форума Ответить с цитированием
Старый 25.08.2010, 13:09   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

поставь точки прерывания на строки с delete(s,...
Сработает хоть одна?
Если нет то твои условия в IF'ах нужно переделывать.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 25.08.2010, 13:14   #8
_Engine_
Форумчанин
 
Регистрация: 29.06.2008
Сообщений: 603
По умолчанию

Поставь DefaultDrawing := false;
_Engine_ вне форума Ответить с цитированием
Старый 25.08.2010, 13:20   #9
RuVarez
Форумчанин
 
Аватар для RuVarez
 
Регистрация: 25.08.2010
Сообщений: 258
По умолчанию

Лучше всего скачай NextGrid. Самый удобный Grid с огромными возможностями)
RuVarez вне форума Ответить с цитированием
Старый 25.08.2010, 13:47   #10
начинающий1
Пользователь
 
Регистрация: 30.07.2009
Сообщений: 46
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
поставь точки прерывания на строки с delete(s,...
Сработает хоть одна?
Если нет то твои условия в IF'ах нужно переделывать.
Срабатывает, но результат остается с буковкой
начинающий1 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Манипуляции с Вордом из под Дельфи Polotenchik Общие вопросы Delphi 27 14.06.2010 13:47
избавиться от лишней манипуляции Iskin Microsoft Office Excel 30 09.12.2008 09:39
Манипуляции с датой в запросе Arkuz БД в Delphi 8 11.11.2008 23:23
массив сохранение информации и манипуляции oblom Общие вопросы C/C++ 19 04.02.2008 02:28
Манипуляции с датой и временем. Tatyana БД в Delphi 16 29.06.2007 19:19