void __fastcall Какой-то класс::myDrawCell(TObject *Sender, const TRect &Rect, int DataCol, TColumn *Column, TGridDrawState State)
{
TDBGrid* Grid = (TDBGrid*)Column->Grid;
TCanvas* Canv = Grid->Canvas;
// признак - выделенной ячейки
bool IsSelect = Grid->Columns->Items[Grid->SelectedIndex]->Index == Column->Index;
// изменение цвета ячейки
TColor Col = Canv->Brush->Color;
... что-то делаем
Canv->Brush->Color = Col;
// если текущая строка, то установить цвет шрифта и цвет фона ячейки
if ( Column->Field->DataSet->FieldByName( "..." )->AsInteger == ... )
{
Canv->Font->Color = ...;
Canv->Brush->Color = IsSelect ? ... : ...;
}
// прорисовка содержимого ячейки
bool DefaultDraw = ТвойМетод ... ( Sender, Rect, DataCol, Column, State);
// прорисовка "по-умолчанию"
if ( DefaultDraw ) Grid->DefaultDrawColumnCell( Rect, DataCol, Column, State );
}
bool __fastcall Какой-то класс::ТвойМетод ...(TObject *Sender, const TRect &Rect, int DataCol, TColumn *Column, TGridDrawState State)
{
TDBGrid* Grid = (TDBGrid*)Column->Grid;
TCanvas* Canv = Grid->Canvas;
// прорисовка содержимого ячейки
bool DefaultDraw = true; // признак прорисовки "по-умолчанию"
AnsiString TextCell = ""; // текст ячейки
// если текущее поле - ...
if ( Column->FieldName == .... )
{
TextCell = ...;
DefaultDraw = false;
}
else if ( Column->FieldName == ... )
{
TextCell = ...;
DefaultDraw = false;
}
// рисуем индивидуально ...
if ( !DefaultDraw )
{
// определим ширину текста в шрифте DBGrid
int tw = Canv->TextWidth( TextCell );
// определим высоту текста в шрифте DBGrid
int th = Canv->TextHeight( TextCell );
// зная ширину и высоту ячейки по прямоугольной области её рисования
// Rect.Width() и Rect.Height()
// выводим текст с нужным смещением по горизонтали - X и по вертикали - Y
int X = 2, Y = 2; // по-умолчанию, смещение к левой границе
if ( Column->Alignment == taCenter )
{
X = ( Rect.Width() - tw )/2;
Y = ( Rect.Height() - th )/2;
}
else if ( Column->Alignment == taRightJustify )
{
X = ( Rect.Width() - tw );
Y = ( Rect.Height() - th );
}
// рисуем текст
Canv->TextRect( Rect, Rect.Left + X, Rect.Top + Y, TextCell );
}
return DefaultDraw;
}
Выделение цветом определенных ячеек в DBGrid
Нужно по определенному условию(если дата в ячейке меньше 2003года) выделять ячейки красным цветом в DBGrid. Возможно ли это, и если нет, посоветуйте плз подходящий компонент для этого?
Цитата: g3n3s1s
Нужно по определенному условию(если дата в ячейке меньше 2003года) выделять ячейки красным цветом в DBGrid. Возможно ли это, и если нет, посоветуйте плз подходящий компонент для этого?
Вот пример моего метода прорисовки ячейки таблицы. Назначь метод myDrawCell на событие сетки OnDrawCell.
Я многие свои методы поубирал, чтобы тебя не путать, а суть была понятна.
Метод [ТвойМетод ...] который вызывается из myDrawCell можешь вообще не описывать отдельно,
а его код включить в код myDrawCell. Просто у меня в проекте так зделано.
Код: