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

 
Раскрасить DBgrid
Гость_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)
Большое спасибо всем за ответы....раскрасился замечательно.....,Очень признателен.......

Народ, как просто залить цветом, не привязываясь к данным таблицы, скажем каждую вторую строку таблицы?
cool.gif
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);
}

Вернуться в Работа с базами данных в C++Builder