Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Выделение цветом определенных ячеек в DBGrid

7.7K
11 апреля 2008 года
g3n3s1s
30 / / 28.10.2005
Нужно по определенному условию(если дата в ячейке меньше 2003года) выделять ячейки красным цветом в DBGrid. Возможно ли это, и если нет, посоветуйте плз подходящий компонент для этого?
3.2K
11 апреля 2008 года
nikipelovav
152 / / 12.04.2006
Цитата: g3n3s1s
Нужно по определенному условию(если дата в ячейке меньше 2003года) выделять ячейки красным цветом в DBGrid. Возможно ли это, и если нет, посоветуйте плз подходящий компонент для этого?



Вот пример моего метода прорисовки ячейки таблицы. Назначь метод myDrawCell на событие сетки OnDrawCell.

Я многие свои методы поубирал, чтобы тебя не путать, а суть была понятна.
Метод [ТвойМетод ...] который вызывается из myDrawCell можешь вообще не описывать отдельно,
а его код включить в код myDrawCell. Просто у меня в проекте так зделано.

Код:
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;
}
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог