No sé si te guste, pero hice una función a tu medida (y hasta con tu nick)
Código Delphi
[-]
function gcc32(Horario:TTime):String;
var
I:Integer;
HoraAux,S:String;
begin
Result:='';
HoraAux:=TimeToStr(Horario);
S:='';
I:=1;
while (HoraAux[i] <> ':') do begin
S:=S+HoraAux[i];
Inc(I);
end;
S:=IntToStr(StrToInt(S)-1); if (S[1]='-') then S:='23';
if (Length(S)=1) then S:='0'+S;
Result:=Result+S;
S:='';
Inc(I);
while (HoraAux[i] <> ':') do begin
S:=S+HoraAux[i];
Inc(I);
end;
if (Length(S)=2) then
S[2]:='0'
else
if (Length(S)=1) then
S:='0'+S;
Result:=Result+S;
end;
Creo que es fácil de entender, porque es todo código a mano.
Aunque siempre la mejor alternativa es usar lo que te brinda el lenguaje, esta creo que no es una mala alternativa.
Saludos!
EDIT: ya verifica números negativos, ahora
sí anda joya.