C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
Цвет текста в DBGrid`e, как установить цвет текста в ячейке
VilgelmKaizer
Отправлено: 26.01.2007, 14:48


Дежурный стрелочник

Группа: Участник
Сообщений: 38



Такой вопрос: как изменять цвет текста в ячейке DBGrid`a?
Например, если значение> 0 цвет зеленый, если меньше — крастый и т.д.
AVC
Отправлено: 26.01.2007, 15:17


Ветеран

Группа: Модератор
Сообщений: 1583



Пользоваться поиском не учимся? angry2.gif
Тема затерта до дыр. smile.gif
nawok78
Отправлено: 31.01.2007, 08:30


Станционный диспетчер

Группа: Участник
Сообщений: 115



CODE

//---------------------------------------------------------------------------
// Îòîáðàæåíèå ñòàòóñà çàïèñè ñèìâîëîì øðèôòà "Wingdings"
// grid — òàáëè÷êà
// rect, DataCol, Column, State — ïàðàìåòðû ñîáûòèÿ OnDrawColumnCell
void status_draw (
       TDBGrid *grid,
       const TRect &Rect, int DataCol,
       TColumn *Column, TGridDrawState State
       )
{
 if (Column->Field->IsNull)
   return;
 if (Column->FieldName=="STATUS")
 {
   AnsiString S[5]={"!","?","N","","4"};
   int status = Column->Field->Value;
   if (status==NONE)
   {
     grid->Canvas->Brush->Color =(TColor)0x00CAFFCA;
   }
   else if (status==UTVERZDEN)
   {
     grid->Canvas->Font->Color = clRed;
   }
   else if (status==DEACTIVATED)
   {
     grid->Canvas->Font->Color = clRed;
   }
   else if (status==PRINTED)
   {
     grid->Canvas->Font->Color = clGreen;
   }
   else if (status >= WRONG)
   {
     // ÈÑÏÎÐ×ÅÍÎ
     status -= WRONG;
     grid->Canvas->Brush->Color =clYellow;
     grid->Canvas->FillRect(Rect);
   }
   grid->Canvas->FillRect(Rect);
   grid->Canvas->Font->Name="Wingdings";
   grid->Canvas->Font->Size=12;
   grid->Canvas->TextOut(Rect.Left,Rect.top,S[status]);
 }
 else
   grid->DefaultDrawColumnCell(Rect, DataCol,Column, State);
}

разгребай
VilgelmKaizer
Отправлено: 05.02.2007, 07:14


Дежурный стрелочник

Группа: Участник
Сообщений: 38



Спасибо за нормальный вразумителных ответ.
А Help я и без чужих советов мору почитать.
AVC
Отправлено: 05.02.2007, 09:48


Ветеран

Группа: Модератор
Сообщений: 1583



QUOTE

А Help я и без чужих советов мору почитать.

Интересно, и что вас останавливает. smile.gif
Кстати, речь шла не о help'е а об этом
VilgelmKaizer
Отправлено: 09.02.2007, 08:31


Дежурный стрелочник

Группа: Участник
Сообщений: 38



Я так понял: если например значение < 0 мы сначала закрашиваем эту ячейку белым цветом, а потом рисуем красным на канве значение.

Еще одно уточнение: если нужно выравнивать содержимое ячейки не по левому краю, а по правому или по центру? Рисуется текст слева на право.

Можно конекно по ширине столбца и длинне записи вычислить сколько пробельных символов нужно поставить перед текстом чтобы он был выравнян по правому краю.
Но, хочу спросить, может есть другой более стандартный вариант. Или другой компонент отображения информации, где свойство Font есть у ячейки?
AVC
Отправлено: 09.02.2007, 09:10


Ветеран

Группа: Модератор
Сообщений: 1583



QUOTE (VilgelmKaizer @ 09.02.2007, 07:31)
Еще одно уточнение: если нужно выравнивать содержимое ячейки не по левому краю, а по правому или по центру? Рисуется текст слева на право.

Можно конекно по ширине столбца и длинне записи вычислить сколько пробельных символов нужно поставить перед текстом чтобы он был выравнян по правому краю.
Но, хочу спросить, может есть другой более стандартный вариант.

Для TDBGrid'а нет. Только по ширине и высоте, но не пробелами а позицией начала рисования.

Давно устаревшие примочки к DBGrid
CODE

//---------------------------------------------------------------------------
// Вывод текста в клетку

PACKAGE void __fastcall DBGridTextToCell
 (const AnsiString& Text
 ,TDBGrid *Grid
 ,const TRect& Rect
 ,TColumn *Column
 )
{
TCanvas *cnv = Grid->Canvas;
int dx, dy;
int xl = Rect.Right  - Rect.Left + 1 — 2;
int yl = Rect.Bottom — Rect.Top  + 1 — 2;
int tl = cnv->TextWidth (Text);
int hl = cnv->TextHeight(Text);

dy = (yl — hl) / 2 + 1;
if (Column->Alignment == taCenter)  dx = (xl — tl) / 2 + 1;
else if (Column->Alignment == taRightJustify) dx =  xl — tl;
else     dx = 1;

cnv->TextRect(Rect, Rect.Left+dx, Rect.Top+dy, Text);
}

Вернуться в Вопросы программирования в C++Builder