Добрый день.
А чем предложенный rico способ не подходит?
Создаете калькулируемое Integer поле с формулой
FieldValue := Round((TimeFieldValue) * 24 * 60 * 60);
Полчаем длительность в секундах.
Форматируем отображание в футтере и если надо в столбце.
Код:
procedure TForm4.DBGridEh1Columns1GetCellParams(Sender: TObject;
EditMode: Boolean; Params: TColCellParamsEh);
var
TimeSpan : TTimeSpan;
begin
timeSpan.Create(dbgrideh1.DataSource.DataSet.FieldByName('DURATION').AsLargeInt*10000);
Params.Text := Format('%d:%.2d:%.2d', [Trunc(timeSpan.TotalHours), timeSpan.Minutes, timeSpan.Seconds]);
end;
procedure TForm4.DBGridEh1GetFooterParams(Sender: TObject; DataCol,
Row: Integer; Column: TColumnEh; AFont: TFont; var Background: TColor;
var Alignment: TAlignment; State: TGridDrawState; var Text: string);
var
timeSpan : TTimeSpan;
begin
if Column.FieldName = 'DURATION' then
begin
timeSpan.Create(Trunc(dbgrideh1.SumList.SumCollection.Items[0].SumValue*10000)); //
Text := Format('%d:%.2d:%.2d', [Trunc(timeSpan.TotalHours), timeSpan.Minutes, timeSpan.Seconds]);
end;
end;