Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 06-05-2010
Avatar de tgsistemas
tgsistemas tgsistemas is offline
Miembro
 
Registrado: dic 2003
Ubicación: Barcelona
Posts: 149
Poder: 21
tgsistemas Va por buen camino
leer string por caracteres

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 [-]
    {pasamos el campo rllmndo de segundos a formato hora y lo carga en el rllmndo_temp en string}
    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 [-]
{horas dedicacion EN STRING QUE CONVERTIMOS A SEGUNDOS !!!!}
  if (FieldName = 'rllmndo_temp') and (not (Field.IsNull)) then begin
    {pasamos el campo rllmndo de segundos a formato hora y lo carga en el rllmndo_temp}
    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; //clGreen;
    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 !!!!
__________________
Toni | blog
Responder Con Cita
  #2  
Antiguo 06-05-2010
Avatar de Caro
*Caro* Caro is offline
Moderadora
 
Registrado: jul 2004
Ubicación: Cochabamba, Bolivia
Posts: 2.544
Poder: 22
Caro Va por buen camino
Hola tgsistemas, puedes utilizar la función Copy:

Código Delphi [-]
 hora, minutos, segundos : String;
 ...................................
 if (FieldName = 'rllmndo_temp') and (not (Field.IsNull)) then begin
    hora := Copy(Field.Value, 1, 2);
    minutos := Copy(Field.Value, 4, 2);
    segundos := Copy(Field.Value, 7, 2);

   .............................
   .................................

Saluditos
__________________
Disfruten cada minuto de su vida a lado de sus seres queridos como si fuese el ultimo, uno nunca sabe lo que puede pasar.
Responder Con Cita
  #3  
Antiguo 06-05-2010
Avatar de duilioisola
[duilioisola] duilioisola is offline
Miembro Premium
 
Registrado: ago 2007
Ubicación: Barcelona, España
Posts: 1.734
Poder: 20
duilioisola Es un diamante en brutoduilioisola Es un diamante en brutoduilioisola Es un diamante en bruto
A lo que dice Caro, quisiera agregar que la hora no necesariamente será de 2 dígitos. Podrían ser 102:21:35.
Por lo tanto el primer copy debe ser desde el principio hasta el primer ":".

Código Delphi [-]
[...]
    p := pos (':',Field.Value);
    hora := Copy(Field.Value, 1, p-1);
    minutos := Copy(Field.Value, p+1, 2);
    segundos := Copy(Field.Value, p+4, 2);
[...]
Responder Con Cita
  #4  
Antiguo 06-05-2010
Avatar de tgsistemas
tgsistemas tgsistemas is offline
Miembro
 
Registrado: dic 2003
Ubicación: Barcelona
Posts: 149
Poder: 21
tgsistemas Va por buen camino
gracias Caro y duilioisola por las respuestas, lo pruebo y os comento
__________________
Toni | blog
Responder Con Cita
  #5  
Antiguo 07-05-2010
Avatar de tgsistemas
tgsistemas tgsistemas is offline
Miembro
 
Registrado: dic 2003
Ubicación: Barcelona
Posts: 149
Poder: 21
tgsistemas Va por buen camino
gracias Caro y duilioisola, vuestra ayuda ha funcionado perfectamente
al final he creado una función ya que la necesitaré bastante en este proyecto :
Código Delphi [-]
Function ConvertStringaTime(CadenaHora: String): Integer;
var
  ihor, imin, iseg, p, ivalor : Integer;
begin
  if (CadenaHora <> Null) then
  begin
    p := pos (':',CadenaHora);
    ihor := StrToInt(Copy(CadenaHora, 1, p-1));
    imin := StrToInt(Copy(CadenaHora, p+1, 2));
    iseg := StrToInt(Copy(CadenaHora, p+4, 2));
    if ihor >0 then ivalor := (ihor *3600) else ivalor := 0;
    if imin >0 then ivalor := ivalor + (imin+60) else ivalor := ivalor;
    if iseg >0 then ivalor := ivalor + iseg else ivalor := ivalor;
  end;
  if ivalor>0 then  Result := ivalor else Result := 0;
end;

muchas gracias por la ayuda !!!!
__________________
Toni | blog
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Número de caracteres por línea al leer correo poliburro Internet 4 12-07-2008 20:09:05
como leer n caracteres de un archivo manolop Varios 6 18-12-2007 22:50:06
Crear un String de mas de 256 caracteres luigi_cr OOP 9 20-11-2007 16:19:48
Problemas con string de mas de 255 caracteres... jaderl Varios 5 06-01-2005 21:40:32
String de mas de 255 caracteres ctronx Varios 6 01-10-2004 17:58:23


La franja horaria es GMT +2. Ahora son las 10:00:26.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi