Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Ayuda con formato de hora (https://www.clubdelphi.com/foros/showthread.php?t=63943)

tato_pincha87 10-03-2009 04:54:49

Ayuda con formato de hora
 
Buenas gente de club delphi, les comento mi duda, que es una de las pocas cosas que me falta corregir para terminar uno de mis primeros proyectos enserio.

Tengo creada una BD en access, y en ella una tabla de turnos en donde me guardo los turnos que se le asignan a los clientes, dichos turnos, tienen un campo que es HoraTurno (tipo: hora corta (##:##)) ,pero mi problema es el siguiente:

En delphi, bah mejor dicho, en los DBGrids de delphi, el campo hora de las distintas tabla que tengo, me sale con el siguiente formato:

30/12/1899 08:00:00

Y yo lo unico que quiero que me salga es como en los registros de access que me sale lo siguiente:

08:00

Alguno sabe como elminar toda esa fecha que no es la que necesito?

Ojala se halla entendido. Muchas gracias aunque sea por leerlo.

Martin :)

MichelH 10-03-2009 05:30:06

Que tal Tato!

Claro que se puede, esto se hace en el Evento OnDrawColumnCell del mismo DBGrid, esto yo lo uso para dale formato a cualquier tipo de datos como hora, fecha, importes monetarios, etc. Basicamente lo que haces en este Evento es redibujar los datos, y se manda llamar cada que se dibuja una columna de tu DBGrid. Yo lo uso de la siguiente forma:

Código Delphi [-]
procedure TFormClientes.RxDBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState);
var
  vValue : String;  // variable donde se le dara formato a los datos
begin

  // verifico que columna se va a dibujar
  if Column.FieldName = 'HoraTurno' then begin
     
     // verifico que el valor no sea nulo, para evita error
     if Column.Field.Value = Null then 
       vValue := '00:00'
     else                                 
       vValue := FormatDateTime( 'hh:mm', Column.Field.AsDateTime );

    
     // aqui dibujo el dato con el nuevo formato, con alineación centrada  
     with RxDBGrid1 do 
        TextRect( Rect, ( Rect.Left +  Rect.Right - TextWidth( vValue ) ) div 2, ( ( Rect.Bottom - TextHeight( vValue ) ) + Rect.Top ) div 2, vValue );
  
  end;

end;

si quieres el codigo de las demas alineaciones son estas:
Alineación a la derecha:
Código Delphi [-]
with RxDBGrid1 do 
   TextRect( Rect, Rect.Right - TextWidth( vValue + ' ' ), ( ( Rect.Bottom - TextHeight( vValue ) ) + Rect.Top ) div 2, vValue );

Alineación a la izquierda:

Código Delphi [-]
with RxDBGrid1 do 
   TextRect( Rect, Rect.Left + TextWidth(' '), ( ( Rect.Bottom - TextHeight( vValue ) ) + Rect.Top ) div 2, vValue );

Por cierto yo mas bien uso el RxDBGrid de la libreria de componentes RX, te los recomiendo mucho traen varios componentes muy monos que me han hecho la vida mas facil y me han sacado de varios apuros.

Saludos!!

luisgutierrezb 10-03-2009 15:30:45

no es necesario capturar el evento, solo basta con crear los campos persistentes de la tabla o query y en la propiedad de dateformat ponerle hh:nn (ojo mm es de mes no se minutos) y listo!! ya te aparecera como debe

MichelH 10-03-2009 15:47:21

Cierto LuisGutierrez, me equiboque con el formato de los minutos, es nn para minutos y mm para meses.

Yo lo hago en el evento porque con solo ese evento puedo fomatear varias columnas a la vez con el mismo código, concatenar columnas en tiempo de ejecución o sustituir valores, inclusive varios dbgrids con el mismo codigo, ademas de poder colorear filas lo cual a veces es util por ejemplo en "pedidos cancelados" colorear los registro con este estado. Y con los campos persistentes lo tengo que hacer siempre de uno en uno cada vez que lo ocupo.

Bueno asi es como siento que tengo mas libertad en cuando a diseño.

Saludos!!

tato_pincha87 10-03-2009 16:06:14

Muchas gracias señores, ya lo estoy probando, cuando vuelva de kinesiologia, MUCHAS PERO MUCHAS GRACIAS!

Un abrazo a los 2!

TATO

tato_pincha87 11-03-2009 03:25:59

Bueno, volvi de kinesiologia, jaja, y probe lo que me dijeron, pero no me anduvo. Sin embargo, explorando un poco el ADOQuery, vi que en una propiedad estaba el nombre "Display format" , y se me ocurrio ponerle hh:nn, y anduvo. Asique muchas gracias igual, y MichelH, que son las grillas RxDbgrids? Me fije en delphi, pero no las tengo, cual delphi tenes? no se si variara sobre si hay o no componentes, pero en el 2007 no lo tengo :S. Gracias muchachos!


La franja horaria es GMT +2. Ahora son las 17:11:43.

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