Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   De un memo a un TDataTime (https://www.clubdelphi.com/foros/showthread.php?t=49812)

jorgegetafe 30-10-2007 23:30:03

De un memo a un TDataTime
 
Saludos, en mi programa tengo tres memos, en uno me introducen las horas(con dos dígitos), en otro me introducen los minutos (con otros dos) y en el tercero como habreis averiguado los segundos.

1) ¿Como puedo pasar esos tres datos que me introducen a una sola variable de tipo TDataTime?

Gracias.

poliburro 30-10-2007 23:31:09

debes utilizar la función EncodeDatetime.

jorgegetafe 30-10-2007 23:33:46

Jolín que rapido me has contestado jajaja voy a probar creo que sabré ;-)
EncodeDateTime(const AYear, AMonth, ADay, AHour, AMinute, ASecond, AMilliSecond: Word):TDateTime;

Muchas gracias

Gabo 30-10-2007 23:34:02

EncodeDateTime.

Y por curiosidad, ¿porqué los tienes en memos?

Gabo 30-10-2007 23:35:49

Chuta!!! Esto si que da rabia...:mad: Me demoro un pelín y viene una respuesta y contrarrespuesta...:(:rolleyes::p;):D:D

jorgegetafe 30-10-2007 23:35:50

Cita:

Empezado por Gabo (Mensaje 242438)
EncodeDateTime.

Y por curiosidad, ¿porqué los tienes en memos?

Digamos que por apaños de novatos jajaja es que con un edit no se como hacer para que no me salga el nombre del objeto al empezar el programa, para hacerme explicar como no tiene caption no se dejarlo en blanco jeje y un memo si poque le borro el campo lines.

egostar 30-10-2007 23:38:31

Cita:

Empezado por jorgegetafe (Mensaje 242440)
Digamos que por apaños de novatos jajaja es que con un edit no se como hacer para que no me salga el nombre del objeto al empezar el programa, para hacerme explicar como no tiene caption no se dejarlo en blanco jeje y un memo si poque le borro el campo lines.

Los edit tienen una propiedad llamada Text, borrala.....

Salud OS

jorgegetafe 30-10-2007 23:39:51

Como no, me salen problemas, la funcion encodedatatime me pide el año, el mes el dia y el milisegundo que no los conozco, solo puedo calcular con los tres memos: la hora, minutos y segundo, que le paso en aquello que no conozco?

egostar 30-10-2007 23:42:34

Cita:

Empezado por jorgegetafe (Mensaje 242444)
Como no, me salen problemas, la funcion encodedatatime me pide el año, el mes el dia y el milisegundo que no los conozco, solo puedo calcular con los tres memos: la hora, minutos y segundo, que le paso en aquello que no conozco?

Pues entonces usa EncodeTime. :rolleyes:

Salud OS

jorgegetafe 30-10-2007 23:45:26

Ok gracias.

Y para pasar el contenido de un edit.caption (es quien contiene la hora por ejemplo) a word?

Las variables de tipo word no se manejarlas :-(

Gracias por vuestra paciencia :(

jhonny 30-10-2007 23:46:04

Usa EncodeTime ;)

jhonny 30-10-2007 23:47:01

Estan volando :D :D :D

egostar 30-10-2007 23:49:18

Cita:

Empezado por jorgegetafe (Mensaje 242446)
Ok gracias.

Y para pasar el contenido de un edit.caption (es quien contiene la hora por ejemplo) a word?

Las variables de tipo word no se manejarlas :-(

Gracias por vuestra paciencia :(

Código Delphi [-]
Hora := StrtoInt(Edit1.Text);
Salud OS

jorgegetafe 30-10-2007 23:49:56

Pero que craks que soys jeje mil gracias!!!!!:)

egostar 30-10-2007 23:49:59

Cita:

Empezado por jhonny (Mensaje 242448)
Estan volando :D :D :D

Es que con estos hilos si te alcanzo amigo jhonny :D:D:D

Salud OS

Gabo 30-10-2007 23:50:28

Mensaje borrado.

poliburro 30-10-2007 23:53:25

Cita:

Empezado por Gabo (Mensaje 242453)
Mensaje borrado.


?, jajaja y precisamente pensaba si era el único activo en esta tarde (México),

Caral 30-10-2007 23:53:57

Hola
Pues claro, tienes razon Egostar.
Saludos

poliburro 30-10-2007 23:55:43

no se quedrá convertir esto en un clon del famoso "No responder"?

cHackAll 30-10-2007 23:57:20

:eek::eek::eek: a la taberna compañeros!

Saludos

egostar 30-10-2007 23:57:50

Cita:

Empezado por Gabo (Mensaje 242453)
Mensaje borrado.

Vamos amigo gabo, porque borras tu mensaje.

Cita:

Empezado por Caral (Mensaje 242457)
Hola
Pues claro, tienes razon Egostar.
Saludos

Verdad que si. :D:D:D

Cita:

Empezado por poliburro (Mensaje 242459)
no se quedrá convertir esto en un clon del famoso "No responder"?

:rolleyes: Ya me pusiste a pensar :D:D

Salud OS

Caral 31-10-2007 00:00:32

Hola
La verdad y sin contradecirte por supuesto, no crees que esto se slucionaria con un datetimepicker, no se digo yo, el edit o el memo, no se.
Que piensas.?
Saludos

Gabo 31-10-2007 00:01:52

Cita:

Empezado por poliburro (Mensaje 242456)
?, jajaja y precisamente pensaba si era el único activo en esta tarde (México),

Cita:

Empezado por poliburro (Mensaje 242459)
no se quedrá convertir esto en un clon del famoso "No responder"?

[:o]Es que leí tan rápido que le entendí que quería escribir en un archivo Word. No me di cuenta que se refería a la variables de tipo Word[/:o]

Creo que la noche me está afectando... :p

De todas formas, asi también se incrementa la cuota de mensajes, ¿no? ;)

egostar 31-10-2007 00:03:01

Cita:

Empezado por Caral (Mensaje 242463)
Hola
La verdad y sin contradecirte por supuesto, no crees que esto se slucionaria con un datetimepicker, no se digo yo, el edit o el memo, no se.
Que piensas.?
Saludos

Pues habría que preguntarle a jorgegetafe, no crees :confused:

Salud OS

poliburro 31-10-2007 00:03:51

Cita:

Empezado por Caral (Mensaje 242463)
Hola
La verdad y sin contradecirte por supuesto, no crees que esto se slucionaria con un datetimepicker, no se digo yo, el edit o el memo, no se.
Que piensas.?
Saludos


Coincido al 100% contigo hermano caral.

:D

jorgegetafe 31-10-2007 00:09:17

¿Qué hago mal poniendo esto?


Código Delphi [-]
Label3.caption:= EncodeTime( (StrtoInt(hora.Text)), (StrtoInt(minuto.Text)), (StrtoInt(segundo.Text)), (StrtoInt(msegundo.Text)) );



Donde los tres parametros que le paso son el text de los edit respectivos.

Me dice que incompatible String con tdatatime

Thanks

poliburro 31-10-2007 00:10:52

Código Delphi [-]
 
Label3.caption:= TimeTostr(EncodeTime( (StrtoInt(hora.Text)), (StrtoInt(minuto.Text)), (StrtoInt(segundo.Text)), (StrtoInt(msegundo.Text)) ));

egostar 31-10-2007 00:14:00

Cita:

Empezado por jorgegetafe (Mensaje 242469)
¿Qué hago mal poniendo esto?


Código Delphi [-]
Label3.caption:= EncodeTime( (StrtoInt(hora.Text)), (StrtoInt(minuto.Text)), 
                                       (StrtoInt(segundo.Text)), (StrtoInt(msegundo.Text)) );



Donde los tres parametros que le paso son el text de los edit respectivos.

Me dice que incompatible String con tdatatime

Thanks

Necesitas pasar la variable Time a String así

Código Delphi [-]
Label3.caption:= TimetoStr(EncodeTime( (StrtoInt(hora.Text)), (StrtoInt(minuto.Text)), 
                                     (StrtoInt(segundo.Text)), (StrtoInt(msegundo.Text)) ));

Sin embargo, para que quieres hacer ese casting, no seria mas facil así:

Código Delphi [-]
Label3.Caption := hora.Text+':'+minuto.Text+':'+segundo.text;

Salud OS

jorgegetafe 31-10-2007 00:16:18

Genial arreglaste mi problema :-)

Una cosilla (creo que os deberia pagar por todo lo que me ayudais jaja), ya he conseguido que mediante tres edit introducidos por el usuario se muestre la hora que es en un label, que lo muestro con un ttimer, que pasa, que si pilla el ttimer con alguno de los edit en blanco de la hora, WUEEEEE!!! fallo del programa, alguien sabe como corregir eso?

Por cierto prefiero trabajar con variables de tiop tiempo porque necesito hacer restas y demas.

poliburro 31-10-2007 00:18:25

Cita:

Empezado por jorgegetafe (Mensaje 242472)
Genial arreglaste mi problema :-)

Una cosilla (creo que os deberia pagar por todo lo que me ayudais jaja),

Con que te conviertas a premiun nos daremos por bien servidos

egostar 31-10-2007 00:27:19

Cita:

Empezado por jorgegetafe (Mensaje 242472)
Genial arreglaste mi problema :-)

Una cosilla (creo que os deberia pagar por todo lo que me ayudais jaja), ya he conseguido que mediante tres edit introducidos por el usuario se muestre la hora que es en un label, que lo muestro con un ttimer, que pasa, que si pilla el ttimer con alguno de los edit en blanco de la hora, WUEEEEE!!! fallo del programa, alguien sabe como corregir eso?

Porque estas usando la conversion de los time, porque no tratas con esto

Código Delphi [-]
Label3.Caption := hora.Text+':'+minuto.Text+':'+segundo.text;

Solo que aquí veo otro problema, si capturan la hora puede ser que escriban datos erróneos, necesitas validar cada edit, por ejemplo que no coloquen letras solo números, que las horas sean entre 00 y 24, que los minutos y segundos sean entre 00 y 60.:cool:

Y como te dice mi amigo poliburro, sería un buen gesto de tu parte hacerte miembro premium.;)

Salud OS

Edito: Si prefieres trabajar con valores time, debes de hacer lo que te comento, validar los edit antes de hacer la conversion a time.

jorgegetafe 31-10-2007 00:33:24

Cita:

Empezado por egostar (Mensaje 242479)
Porque estas usando la conversion de los time, porque no tratas con esto


Código Delphi [-]
Label3.Caption := hora.Text+':'+minuto.Text+':'+segundo.text;
Edito: Si prefieres trabajar con valores time, debes de hacer lo que te comento, validar los edit antes de hacer la conversion a time.

La verdad es que prefiero trabajar con valores time, para que me sea más facil restar un tiempo de otro, sino de la otra forma es un lio padre.

Respecto a la validación, se hacerla de forma estatica, es decir, pillar un edit y ver si es correcto o no, pero no se hacerlo en "tiempo real", osea, que a la vez que el usuario vaya introduciendo por teclado ir viendo si esta bien (le dejo que escriba), o si lo ultimo que acaba de escribir esta mal y se lo borro.
¿Me he explicado?

egostar 31-10-2007 00:37:45

Cita:

Empezado por jorgegetafe (Mensaje 242480)
La verdad es que prefiero trabajar con valores time, para que me sea más facil restar un tiempo de otro, sino de la otra forma es un lio padre.

Respecto a la validación, se hacerla de forma estatica, es decir, pillar un edit y ver si es correcto o no, pero no se hacerlo en "tiempo real", osea, que a la vez que el usuario vaya introduciendo por teclado ir viendo si esta bien (le dejo que escriba), o si lo ultimo que acaba de escribir esta mal y se lo borro.
¿Me he explicado?

Se me ocurre que podrias usar el evento onChange y OnExit de cada edit.

Por ejemplo

en el evento OnChange, verificas que no escriba letras
en el evento OnExit, verificas si es un dato válido (00-24 para las horas y 00-60 para minutos y segundos) en caso de ser no válido regresas el foco a el edit. :rolleyes:

Salud OS

jorgegetafe 31-10-2007 00:41:48

Vale muchas gracias, mañana seguiré con ello, ya es un poco tarde que hay que madrugar, ya tendreis noticias cuando grite socorro jajaja


gracias por todo de verdad, chao!!!

jorgegetafe 01-11-2007 09:39:44

Ya he retomado el programa jeje :-)

A ver si me ayudais con esto que por más que le doy vueltas no consigo ver el error, de tres edits consigo la hora introducida por el usuario y quiero calcular cuanto tiempo queda desde la hora actual, hasta la hora que ha introducido el usuario, lo hago de esta manera:


Código Delphi [-]
 
PROCEDURE TForm1.RestanteTimer(Sender: TObject); // Muestra la hora restante
VAR
a: ttime;
b: ttime;
c: ttime;
BEGIN
a:= now;
b:= EncodeTime( (StrtoInt(hora.Text)), (StrtoInt(minuto.Text)), (StrtoInt(segundo.Text)), (StrtoInt(msegundo.Text)));
c:= b-a;
label3.caption:= timetostr (c);
//Label3.caption:= TimeTostr(EncodeTime( (StrtoInt(hora.Text)), (StrtoInt(minuto.Text)), (StrtoInt(segundo.Text)), (StrtoInt(msegundo.Text)) ));
END;


Pero siempre el tiempo restante que me sale es muchísimo mayor de lo que deberia, es decir, si el usuario me pone las 10:00 y actualmente son las 9:00 me sale que faltan 23 horas!!!! y además cada segundo va aumentando el tiempo restante en vez de disminuirse!!!! No tiene ni pies ni cabeza :-(

jhonny 01-11-2007 13:42:00

La hora actual es mayor que la anterior, entonces deberias restar a-b y no b-a.

jorgegetafe 01-11-2007 13:44:39

Ahí esta el problema, da igual si pongo a-b que b-a que el resultado del tiempo restante siempre es el mismo, lo acabo de comprobar otra vez por si acaso y nada.

A mi no se me ocurre porque falla :-(

jhonny 01-11-2007 13:46:53

Tambien puedes hacer:

Código Delphi [-]
procedure Hora_restante; //Muestra la hora restante
var
  b: ttime;
begin
  b:= EncodeTime( (StrtoInt(hora.Text)), (StrtoInt(minuto.Text)),   (StrtoInt(segundo.Text)), (StrtoInt(msegundo.Text)));
  label3.caption:= IntToStr(HoursBetween(Now, b));
end;

jorgegetafe 01-11-2007 13:49:17

No estoy seguro de que esa funcion me sirva porque tan solo calcula la diferencia de horas, es decir, de 10:00 a 10:59 daria como resultado cero, y quiero que salgan horas, minutos y segundos...

gracias.

eduarcol 01-11-2007 13:55:09

Cita:

Empezado por jorgegetafe (Mensaje 242846)
No estoy seguro de que esa funcion me sirva porque tan solo calcula la diferencia de horas, es decir, de 10:00 a 10:59 daria como resultado cero, y quiero que salgan horas, minutos y segundos...

gracias.

necesita la use, DateUtils, a modo de dato en Delphi si te colocas sobre la palabra y le das al boton F1 en la ayuda te sale la uses que necesitas


La franja horaria es GMT +2. Ahora son las 18:38:27.

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