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
является универсальным средством для просмотра таблиц, которое работает во всех случаях и с любыми источниками данных.
16. Как установить фокус на определенное поле в TDBGrid?
Используйте код:
DBGrid1.SelectedField := Table1SomeField;
DBGrid1.SetFocus;
17. Как создать обработчик события OnClick для TDBGrid?
Как и всякий TControl
(иерархия наследования TControl→TWinControl→TCustomControl→TCustomGrid→TCustomDBGrid→TDBGrid) у TDBGrid есть событие OnClick, но оно protected. Так что можно либо создать новый класс, производный от TDBGrid, в котором объявить это свойство как published, либо использовать другой вариант. Например, вы можете использовать событие OnColEnter. 18. Как создать маску для TDBEdit?
Маска относится к полю в таблице (компонент TField
) а не к самому TDBEdit. Дважды щелкните мышкой на TTable и в FieldEditor'е добавьте все нужные вам поля. Когда поле выбрано в списке, его свойства показаны в Object Inspector, включая маску ввода. Связывание TDBEdit и любых других компонентов с этим TTable будет вызывать наложение маски на соответствующее поле.