Самый простой способ сделать это - просто
procedure TForm1.DBGrid1CellClick(Column: TColumn);
var
S : String;
begin
S := DBGrid1.SelectedField.AsString;
Caption := S;
end;
. Это работает, потому что при кодировании TDBGrid соответствующий набор данных синхронизируется с выбранной / выбранной строкой сетки.Вообще говоря, проще всего получить значения из текущей записи набора данных, но вы так и спросили.Старайтесь избегать изменения значений текущей записи, манипулируя текстом ячейки, потому что DBGrid будет бороться с вами на каждом шагу.
Fwiw, я видел больше "круглых домов" способов получения текста ячейки, но я предпочитаю это по принципу KISS.
Обратите внимание, что более надежный способ получения ячейкитекст, включающий предложение Реми Лебо использовать Column.Field вместо SelectedField, выглядит следующим образом:
procedure TForm1.DBGrid1CellClick(Column: TColumn);
var
S : String;
AField : TField;
begin
AField := DBGrid1.SelectedField;
// OR AField := Column.Field;
// Note: If the DBGrid happens to have an unbound column (one with
// no TField assigned to it) the AField obtained mat be Nil if
// it is the unbound column which is clicked. So we should check for
// AField being Nil
if AField <> Nil then begin
S := AField.AsString;
Caption := S;
end;
end;