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

 
Строка красным цветом в DBGrid, Как это сделать?
Tors
Отправлено: 21.01.2004, 11:04


Ученик-кочегар

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



Естьтаблица:
t
(
id int not null primary key,
name varchar(20),
lname varchar(20)
flag varchar(5)
)

Как с помощью события OnDrawColumnCell вывести строку красным цветом если flag=false, а если true — зеленым, при том, что flag выводить не надо.
Valdemar
Отправлено: 21.01.2004, 13:37


Мастер участка

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



Я для таких целей использовал событие OnDrawDataCell. Тогда можно сделать так:
CODE

void __fastcall TForm1::DBGrid1DrawDataCell(TObject *Sender,
     const TRect &Rect, TField *Field, TGridDrawState State)
{
   ((TStringGrid*)Sender)->Canvas->FillRect(Rect);
   if (ADOTable1->FieldByName("flag")->AsString=="false")
       ((TDBGrid*)Sender)->Canvas->Font->Color=clRed;
   else
       ((TDBGrid*)Sender)->Canvas->Font->Color=clGreen;
   ((TDBGrid*)Sender)->Canvas->TextRect(Rect,Rect.Left+2,Rect.Top+2,Field->AsString);
}
Tors
Отправлено: 25.01.2004, 19:21


Ученик-кочегар

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



У DBGridEh (EhLib) не вызывается событие DrawDataCell
** pasha
Отправлено: 25.01.2004, 21:26


Не зарегистрирован







С чего вы это решили ? Вызывается
Проверить легко — бросьте на форму
Table, DataSource, DBGridEh свяжите их
вставьте указанный код,
откройте таблицу — сами увидите — все работает
таблица раскрасится красным/зеленым
Tors
Отправлено: 28.01.2004, 14:53


Ученик-кочегар

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



Не вызывается!!!
Ставил и точку останова и
Caption="This working";

Я использую IBQuery, если это имеет значение.

И еще: у DBGridEh не работает правая кнопка у горизонтального
скролла?
Admin
Отправлено: 28.01.2004, 18:53


Владимир

Группа: Администратор
Сообщений: 1190



Значит неправильно установлен EhLib.
Все в нем работает нормально.

Попробуйте этот код -
CODE

//---------------------------------------------------------------------------
void __fastcall TForm1::DBGridEh1DrawColumnCell(TObject *Sender,
     const TRect &Rect, int DataCol, TColumnEh *Column,
     TGridDrawState State)
{
   ((TDBGridEh*)Sender)->Canvas->Font->Color = clRed;
   ((TDBGridEh*)Sender)->DefaultDrawColumnCell(Rect,DataCol,Column,State);
}
//---------------------------------------------------------------------------


если ваша таблица не станет вся красного цвета -
проблема скорее всего в установке EhLib.


Admin
Отправлено: 28.01.2004, 19:01


Владимир

Группа: Администратор
Сообщений: 1190



Или в onDrawDataCell

CODE

//---------------------------------------------------------------------------
void __fastcall TForm1::DBGridEh1DrawDataCell(TObject *Sender,
     const TRect &Rect, TField *Field, TGridDrawState State)
{
   ((TDBGridEh*)Sender)->Canvas->Font->Color = clRed; // цвет шрифта
   ((TDBGridEh*)Sender)->Canvas->Brush->Color = clYellow; // цвет фона
   ((TDBGridEh*)Sender)->DefaultDrawDataCell(Rect, Field, State);
}
//---------------------------------------------------------------------------
Tors
Отправлено: 29.01.2004, 17:12


Ученик-кочегар

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



Спасибо, все работает!!!

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