Использование DateTime в DBGrid

При отображении TDateTimeField в DBGrid с форматированием hh:mm (для показа только времени), любая попытка изменения времени приводит (при передаче данных) к ошибке примерно такого содержания: «'07:00' is not a valid DateTime». Как переслать данные в виде: «Trunc(oldDateTimevalue) + StrToTime(displaytext)»?

Следующий обработчик событий – TDateTimeField.OnSetText – не слишком элегантен, но он работает.

Предположим, что имеется маска редактирования, допускающая формат hh:mm или hh:mm:ss. Тогда процедура будет иметь следующий вид:

procedure TForm1.Table1Date1SetText(Sender: TField; const Text: String);
var
  d: TDateTime;
  t: string;
begin
  t := Text;
  with Sender as TDateTimeField do begin
    if IsNull then d := SysUtils.Date
    else d := AsDateTime;
    AsDateTime := StrToDateTime(Copy(DateToStr(d), 1, 10) + ' ' + t);
  end;
end;
Примечание
Функция Copy как раз и формирует постоянную дату (в формате dd/mm/yyyy), которая автоматически вводится в поле, t – вводимое время.

[News Group]