Конкретная клетка или все ячейки в одном столбце?
Вы можете настроить столбец только для чтения таким образом:
TDBGrid.Colums[IndexOfColumn].ReadOnly := True;
Если вы хотите, чтобы контролировать конкретную ячейку, то вы могли бы попытаться запрограммировать «защиту» схемы в OnCellClickEvent. Я думаю, вы даже можете настроить TDBGrid.Colums [IndexOfColumn] .ReadOnly: = True; в том случае, когда данная ячейка должна быть прочитана только. Что-то вроде:
procedure TForm.DBGridCellClick(Column: TColumn);
begin
Column.ReadOnly := ConditionForReadOnly(Column);
end;
После редактирования:
Я проверил это решение, и это работает.
Например, если вы хотите изменить только ячейки в столбце больше, то первое и их значение должно быть 0 (для иметь возможность редактировать их), то схема защиты будет выглядеть следующим образом:
procedure TForm.DBGridCellClick(Column: TColumn);
begin
Column.ReadOnly := (qry['FieldWithValue'] <> 0) or (Column.Index < 1); //Index is 0-based
end;
Спасибо, в сочетании с рендерингом серого OnDrawCell, который идеально подходит. –