PDA

Ver la Versión Completa : pregunta de dtatepicker nueva


anubis
17-05-2007, 11:16:50
Misterios de la tecnologia creo.
Tengo 2 datepicker con el datemode dmupdown porqu ele otro metodo me iba peor.
tengo este codigo

procedure Tfhabitacion.fechasalidaChange(Sender: TObject);
begin
label24.caption:=datetostr(fechasalida.datetime);
label30.caption:=datetostr(fecharegistro.datetime);
fechasalida.refresh;
if (fechasalida.datetime) <= (fecharegistro.datetime) then
fechasalida.datetime:=fecharegistro.datetime+1;
diasestancia.caption:=inttostr(daysbetween(fechasalida.datetime,fecharegistro.datetime));

end;

los dos labels son de comprobacion.
Si es la primera vez que se ejecuta el programa, la fecha de salida es un dia mas que la de entrada.
Si es la primera vez que modifico la de salida para un dia menos, resulta que me lo cambia pero no realiza el if a pesar de que las dos fechas valen lo mismo, el if me lo hace cuando pulso una segunda vez.

alguna idea de esta anomalia?

gracias

ContraVeneno
17-05-2007, 16:43:03
No entiendo como es que la propiedad datemode te da problemas, las dos formas son exactamente lo mismo, simplemente se muestran de diferente manera en la pantalla. Pero esto no afecta la manera de como funciona el dtpicker.

Lo que sí me parece bastante extraño y quisiera preguntarte es:
¿Porqué haces un refresh a fechasalida?

anubis
17-05-2007, 18:25:58
La verdad es que nose porque da problema el sacar el calendario porque no me actualiza bien, nose si debo ponerlo en el evento onexit o en el onchange, pero de todas formas lo que he escrito esta bien no?, el problema, como explicaba, cuando inicialmente la fecha de entrada es 17/05/2007 y la de salida es 18/05/2007, si intento cambiar la fecha de salida al 17/05/2007, me la pone en el 17 pero el if no me lo hace aunque las dos fechas sean iguales.

El refresh lo puse por si hacia falta.
Tambien he probado a poner a fechadesalida.mintodate:=fechadentrada.datetotime+1;
ahi me sale un mensaje, pero como el delphi lo tengo en ingles, nose como cambiarlo al cristiano o bien no sacar ningun mensaje.

gracias

añado. si hago lo del mensaje si funciona bien, pero en ingles y lo quiero en español.

ContraVeneno
17-05-2007, 18:41:50
¿Es un mensaje de error? Si es así, ¿que dice?

Tal vez las fechas no te den iguales porque tiene variación en las horas, recuerda que el DTPicker comprueba desde el año hasta los milisegundos.

Tal vez utilizando la función formatdatetime.

Para capturar un error y poner el mensaje que tu quieras, puedes utilizar la cláusula:

Try
//acción que generar error
Except On E:TipodeExcepción do
//aquí tu mensaje
End

anubis
17-05-2007, 19:57:03
gracias, pense que en el tdatepicker cuando pones solo fecha no compara tambien las horas.
Probare otro metodo.

sobre el error, la verdad es que no se ocmo manejarlo, es decir
si es un evento change, al cambiar la fecha, me sale el aviso en ingles que la fecha es menor que....
si le pongo try
no se que va aqui, se me habia ocurrido poner
fechasalida.onchange pero nose que variable poner aqui.
gracias

marcoszorrilla
17-05-2007, 20:54:25
Por lo que veo estás utilizando la hora también mira este ejemplo en el que se trabaja solamente con la fecha.

procedure TForm1.Button1Click(Sender: TObject);
begin
ShowMessage(FormatDateTime('dd/mm/yy',DateTimePicker1.date + 10));
end;

Un Saludo.

anubis
17-05-2007, 22:16:06
gracias marcos, era sencillo cuestion de aplicar la logica ;).

Pero me seguia sin funcionar he tenido que hacer esto:

procedure Tfhabitacion.fecharegistroChange(Sender: TObject);
var
fechahoy:tdate;
begin
fechahoy:=now;
if fecharegistro.Date<=fechahoy then
begin
fecharegistro.date:=fechahoy;
end;
if fechasalida.date<=fecharegistro.date+1 then
fechasalida.date:= fecharegistro.date+1;
diasestancia.caption:=inttostr(daysbetween(fechasalida.date,fecharegistro.date));
end;



porque sino no me lo realiza, si le bajo a la fecha de salida dias hasta llegar a ser igual que la de entrada no me hace el if.

gracias de nuevo

lo unico que no me queda claro es lo de exception

si en este caso pongo un mindate, y le bajo, me sale aviso de que la fecha es menor, pero no puedo controlarlo con el exception
en el formshow he puesto esto

begin
fechasalida.mindate:=fecharegistro.date+1;
TRY
fechasalida.OnChange:=fechasalidachange;
EXCEPT ON E: EXCEPTION DO
begin
SHOWMESSAGE('LA FECHA NO PUEDE SER IGUAL A LA FECHA DE ENTRADA');
fechasalida.date:=fecharegistro.date+1;
end;
END;

pero no me lo realiza.

alguna idea?

gracias