Bit smarter implementation that skips zeros and handles plural:
procedure AddTime(var S: string; Count: Integer; L: string);
begin
if Count > 0 then
begin
if S <> '' then
begin
S := S + ' ';
end;
if Count > 1 then L := L + 's';
S := S + Format('%d %s', [Count, L]);
end;
end;
function TicksToStr(Value: DWORD): string;
var
I: DWORD;
Hours, Minutes, Seconds: Integer;
begin
I := Value div 1000;
Seconds := I mod 60;
I := I div 60;
Minutes := I mod 60;
I := I div 60;
Hours := I mod 24;
AddTime(Result, Hours, 'hour');
AddTime(Result, Minutes, 'minute');
AddTime(Result, Seconds, 'second');
if Result = '' then Result := '-'; { no time }
end;