Гость_programmer_of_fortune |
Отправлено: 22.09.2003, 15:38 |
|
Не зарегистрирован
|
Как залить цветом указаннуЮ ячейку в дбгрид?
(или какой-другой таблице, которая отображает содержание БД).... |
|
Admin |
Отправлено: 22.09.2003, 16:58 |
|
Владимир
Группа: Администратор
Сообщений: 1190
|
Используя событие DrawColumnCell или DrawDataCell
компонента DBGrid
Например так:
CODE |
void __fastcall TForm1::DBGrid1DrawColumnCell(TObject *Sender,
const TRect &Rect, int DataCol, TColumn *Column,
TGridDrawState State)
{
// например для 2-го столбца DBGrid (DataCol = 1)
if(DataCol == 1){
if(Column->Field->AsInteger < 16){
DBGrid1->Canvas->Font->Color = clRed;
DBGrid1->Canvas->Brush->Color = clInfoBk;
}
if(Column->Field->AsInteger >= 16 && Column->Field->AsInteger <= 25){
DBGrid1->Canvas->Font->Color = clGreen;
DBGrid1->Canvas->Brush->Color = clInfoBk;
}
if(Column->Field->AsInteger > 25){
DBGrid1->Canvas->Font->Color = clBlack;
DBGrid1->Canvas->Brush->Color = clYellow;
}
}
DBGrid1->DefaultDrawColumnCell(Rect,DataCol,Column,State);
}
//----------------------------------------------------------------
|
|
|
Nick |
Отправлено: 23.09.2003, 07:29 |
|
Машинист паровоза
Группа: Участник
Сообщений: 247
|
Есть еще библиотека EhLib.
Там Grid имеет событие OnGetCellParams
В примере просмотр Прайс листа с заявкой
// -----------------------------------------------------------------------------------------
void __fastcall TFormPriceView::VDBG_PriceGetCellParams(TObject *Sender,
TColumnEh *Column, TFont *AFont, TColor &Background,
TGridDrawState State)
{
if (aTovar_ID == ibMng->IBQ_PriceViewPRICES_ID->AsInteger)
{
if (!State.Contains(gdFocused))
{ // если текущая строка
Background = clLtGray;
AFont->Color = clBlack;
} else
{
Background = clGray;
AFont->Color = clYellow;
};
if (ibMng->IBQ_PriceViewNAL->AsString != "+") AFont->Color = clWhite;
StatusBar1->Panels->Items[1]->Text = ibMng->IBQ_PriceViewOPRECNO->AsString;
} else
{
if (ibMng->IBQ_PriceViewNAL->AsString != "+")
{ // нет в наличии на фирме
Background = clWindow;
AFont->Color = clGrayText;
} else
if (ibMng->IBQ_PriceViewKAT1->AsString != 1 )
{ // ходовая деталь
Background = clWindow;
AFont->Color = clRed;
} else
{
Background = clWindow;
AFont->Color = clBlack;
};
};
}
|
|
Samual |
Отправлено: 24.09.2003, 22:21 |
|
Дежурный стрелочник
Группа: Участник
Сообщений: 39
|
Припрака к ответу Владимира...
В вышеприведенном примере выдел. строка будет отображ. как стандарт. а изменить это мона так::::
[CODE]
if(State.Contains(gdSelected)) // <<<<-ГЛЯНЬ СЮДА
{
DBGrid1->Canvas->Brush->Color = (TColor)0x00000095; // RGB(128, 2, 200)
DBGrid1->Canvas->Font->Color = clWhite;
}
else
DBGrid1->Canvas->Brush->Color = (TColor)0x00DFDDFF;
DBGrid1->Canvas->FillRect(Rect);
..........
........
......
|
|
Гость_programmer_of_fortune |
Отправлено: 25.09.2003, 08:41 |
|
Не зарегистрирован
|
Большое спасибо всем за ответы....раскрасился замечательно.....,Очень признателен....... |
|
creater |
Отправлено: 01.10.2003, 16:22 |
|
Станционный диспетчер
Группа: Участник
Сообщений: 120
|
QUOTE (Гость_programmer_of_fortune @ 25/09/2003, 09:43) | Большое спасибо всем за ответы....раскрасился замечательно.....,Очень признателен....... |
Народ, как просто залить цветом, не привязываясь к данным таблицы, скажем каждую вторую строку таблицы?
|
|
Admin |
Отправлено: 01.10.2003, 18:39 |
|
Владимир
Группа: Администратор
Сообщений: 1190
|
CODE |
void __fastcall TForm1::DBGrid1DrawColumnCell(TObject *Sender,
const TRect &Rect, int DataCol, TColumn *Column,
TGridDrawState State)
{
if(DBGrid1->DataSource->DataSet->RecNo%2){
DBGrid1->Canvas->Font->Color = clRed;
DBGrid1->Canvas->Brush->Color = clInfoBk;
}
DBGrid1->DefaultDrawColumnCell(Rect,DataCol,Column,State);
}
|
|
|