Hola a tod@s,
acudo de nuevo en vuestra ayuda con una tonteria que no soy capaz de resolver. En una qry de mysql obtengo un campo con el resultado de una suma de tiempo en formato segundos (es un longinteger), a partir de ese campo relleno un campo calculado (string) con el siguiente código :
Código Delphi
[-]
if ihoras > 0 then
begin
ivalor := Round(ihoras);
ihor := ivalor div 3600;
imin := (ivalor mod 3600) div 60;
iseg := (ivalor mod 3600) mod 60;
if ihor < 10 then ihort := Format('%.2d', [ihor]) else ihort := FloatToStr(ihor);
if imin < 10 then imint := Format('%.2d', [imin]) else imint := FloatToStr(imin);
if iseg < 10 then isegt := Format('%.2d', [iseg]) else isegt := FloatToStr(iseg);
FieldByName('rllmndo_temp').AsString := ihort + ':' + imint + ':' + isegt;
end;
el cliente quiere ver en el dbgrid los dos campos de dedicación, en formato segundos y en formato hh:mm:ss, hasta aquí todo bien
El problema lo tengo en que el grid debe pintar determinadas columnas en colores en función del valor del campo (entre ellos está el
rllmndo_temp) y para ello utilizo el componente de TCustomizeGrid de Neftali

con el código siguiente en el evento
OnpaintCellExt
Código Delphi
[-]
if (FieldName = 'rllmndo_temp') and (not (Field.IsNull)) then begin
ivalort := StrToDateTime(Field.Value);
DecodeTime(ivalort, ihor, imin, iseg, imseg);
ivalor := (ihor *3600) + (imin *60) + iseg;
if (ivalor < 3600) then begin
ChangeColor := True;
CellColor := clRed;
end;
if (ivalor >= 3600) and (ivalor <= 4499) then begin
ChangeColor := True;
CellColor := $0000BFFF;
end;
if (ivalor >= 4500) then begin
ChangeColor := True;
CellColor := $0000FF80; end;
end;
pero hay registros dónde el valor del campo calculado
rllmndo_temp (string) es del tipo 39:20:00 y no se puede pasar a DateTime.
Había pensado en leer la cadena del campo caracter a caracter para obtener los valores de las horas, minutos y segundos antes de pintar la celda de ese campo string, pero no se como hacerlo.
Muchas gracias por la ayuda !!!!