VilgelmKaizer |
Отправлено: 26.01.2007, 14:48 |
|
Дежурный стрелочник
Группа: Участник
Сообщений: 38
|
Такой вопрос: как изменять цвет текста в ячейке DBGrid`a?
Например, если значение> 0 цвет зеленый, если меньше — крастый и т.д.
|
|
AVC |
Отправлено: 26.01.2007, 15:17 |
|
Ветеран
Группа: Модератор
Сообщений: 1583
|
Пользоваться поиском не учимся?
Тема затерта до дыр. |
|
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 я и без чужих советов мору почитать.
|
Интересно, и что вас останавливает.
Кстати, речь шла не о 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);
}
| |
|