Читать «Виртуальная библиотека Delphi» онлайн - страница 94

Unknown

  Field: TField; State: TGridDrawState);

var

  RowHeight: Integer;

begin

  if gdFocused in State then

  begin

    RowHeight := Rect.Bottom - Rect.Top;

    Row := (Rect.Top div RowHeight) - 1;

    Col := Field.Index;

  end;

end;

11. Как выделить цветом текущую строку в TDBGrid?

Для TDBGrid в свойстве Options установите dgRowSelect в True.

12. Как изменить цвет ячейки в TDBGrid?

Введите следующий код в обработчике события OnDrawDataCell:

procedure TForm1.DBGrid1DrawDataCell(Sender: TObject; const Rect: TRect;

  Field: TField; State: TGridDrawState);

begin

  if gdFocused in State then

  with (Sender as TDBGrid).Canvas do

  begin

    Brush.Color := clRed;

    FillRect(Rect);

    TextOut(Rect.Left, Rect.Top, Field.AsString);

  end;

end;

Установите свойство DefaultDrawing в True. Здесь перерисовывается только выделенная ячейка. Если установить DefaultDrawing в False, то вы должны самостоятельно перерисовать все ячейки аналогично примеру.

13. Как узнать, что пользователь перешел на другую запись, например, в TDBGrid?

Переход на новую запись — это событие, которое относится не к визуальному компоненту, а к источнику данных. Соответствующее событие называется OnDataChange и имеется у компонента TDataSource.

14. Как устанавливать собственный цвет или шрифт для столбца TDBGrid?

Выключите property DefaultDrawing, и обрабатывайте событие OnDrawDataCell:

procedure TForm1.DBGrid1DrawDataCell(Sender: TObject; const Rect: TRect;

  Field: TField; State: TGridDrawState);

begin

  if Field.FieldName = 'Name' then DBGrid1.Canvas.Font.Style := [fsBold];

  DBGrid1.DefaultDrawDataCell(Rect, Field, State);

end;

Это приведет к тому, что содержимое столбца 'Name' будет показываться жирным шрифтом.

В Delphi 2.0 вы можете использовать редактор столбцов для той же самой цели.

15. Почему указатель ползунка в TDBGrid не показывает текущее положение в таблице?

Дело в том, что TDBGrid предполагает многопользовательский доступ к таблице. В этом случае другие пользователи этой же таблицы могут добавлять или удалять записи, в результате информация о количестве записей на текущий момент становится неопределенной.

Конечно, в однопользовательском варианте количество записей всегда известно, но поскольку TDBGrid работает через промежуточный источник данных DataSource, ему неизвестен конкретный способ доступа к данным — навигационный или SQL. Например, для SQL существует только один способ узнать количество записей — выполнить специальный запрос с их подсчетом, а на это может потребоваться значительное время.

По всем этим причинам TDBGrid является универсальным средством для просмотра таблиц, которое работает во всех случаях и с любыми источниками данных.