Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Problema con el TDate. (https://www.clubdelphi.com/foros/showthread.php?t=19305)

alfredosg19 10-03-2005 07:32:48

Problema con el TDate.
 
Hola a todos, mi problema es que tengo un componente del tipo DAtaTimePicker que comienza con la fecha del sistema, pero cuando hago click sobre el para elegir una fecha la fecha del Tdate se modifica y no hay forma de volverle a introducir la fecha actual. El problema es que si queremos hacer una reserva para una fecha que ya pasó me encuentro con dos problemas:
- doy el mensaje de error pero la fecha sigue modificada y sigue pudiéndose hacer la selección de reservas en fechas pasadas.
- Si hago un bucle como la fecha no se actualiza no sale nunca (se cuelga).
He probado de actualizar el Tdate con la hora del sistema incluso haciendo una función, o ligándola al botón de reservas pero no se puede. ¿Existe alguna posibilidad?. Gracias de antemano.
Código:

DtDAta.DAte(DAte)

marcoszorrilla 10-03-2005 07:52:38

Código Delphi [-]
DateTimePicker1.Date:=Date;

Un Saludo.

alfredosg19 10-03-2005 14:45:41

No se puede cambiar fecha al Tdate.
 
El problema sigue siendo el mismo, es muy curioso pero nbo se puede ¿no existe otra función?.

marcoszorrilla 10-03-2005 14:51:00

El ejemplo que te estoy dando es para un DateTimePicker.

Código Delphi [-]
 procedure TForm1.Button1Click(Sender: TObject);
 begin
 DateTimePicker1.Date:=Date + 10;
 end;

Qué componente estás utilizando, o al menos muestra el código al completo para ver que es lo que está ocurriendo.

Un Saludo.

alfredosg19 11-03-2005 12:18:58

El componente DataTimePicker no se actualiza.
 
HOla, pongo el trozo de código, se trata de un programa que hace reservas y claro no se pueden hacer reservas de días pasados, ni con más de una semana de anticipación para eso hice una función para saber los dias pasados y otra para saber si la fecha es anterior. Hasta aquí todo muy bien, pero al final del código el TData.Date no hay forma de ponerle la fecha de hoy (al principio cuando el programa comienza sí), he probado con todo incluso he hecho una función para coger la fecha del sistema (que es una tonteria pero por probar). No sé que hacer al final la única opción que veo y poco elegante es poner en el botón de hacer reservas que si la fecha no es correcta obligue al usuario a moficarla manualmente (esta opción no me gusta nada).

Cita:

if (Diasdesde(DatetoStr(DtData.Date))<=0) and (Diaspasats(DtData.Date)<7) then
begin
Showmessage(DatetoStr(DiasDesde(DatetoStr((DtData.Date)))));
data(FormatDateTime('dddd',dtData.Date),FormatDateTime('mmmm',dtData.Date));
lbBselec.Caption:='';
stSalaplena.Visible:=False;
Llegeixdades;
sgSala.Enabled:=True;
ImPeli.Visible:=True;
Esborratot;
Cerca;
Salapeli;
lbBlliures.Caption:=InttoStr(Contar);
Salaplena;
{NOTA: no puc canviar la data a la data actual}No puedo canviar la fecha
DtData.Date:=DataSistema(Date);
end
else
{NOTA: Passa ho mateix, s'ha de clicar dues vegades quan surt el misatge)} tengo que clicar dos veces para salir
Begin
Showmessage('La data no es correcta'); La fecha no es correcta
DtData.Date:=DataSistema(Date);
end;
Para terminar agradecer vuestra ayuda, ha! y las notas que están aquí puestas no están en castellano (es como están en el programa) pero he puesto al lado lo que significa, espero no molestar a nadie con eso. Muchas gracias.

Kreyser 11-03-2005 13:18:29

DtData.Date
 
Hola.

No queda me queda muy claro el código, que indicas, de todas formas la lógica de lo que deseas hacer es algo tal que así??

Código:

if (Condicion1) and (Condicion2) then
begin
  Showmessage('Fecha OK!!');
  {NOTA: no puc canviar la data a la data actual}
  //                --> Pero la fecha es valida!!
  // luego no hay que...  DtData.Date:=DataSistema(Date);
end
else
begin
  Showmessage('Error');
  DtData.Date:=Date;
end;
end.

Has hecho la depuración paso a paso??, en que linea te salta el error??, que error??... la lógica de las condiciones es correcta??, and??, or??...:confused:

alfredosg19 11-03-2005 15:56:07

No se actualiza el DataTimePicker
 
Quiero decir que si comienzas un programa actualizando el DataTimePicker después no puedes actualizarlo otra vez, el código que tú tienes ya lo probé y tampoco me va. :eek:. ASí que no sé como hacer para cambiarlo. Gracias.

marcoszorrilla 11-03-2005 17:40:09

El DateTimePicker lo puedes actualizar las veces que desees:

Aquí tienes un ejemplo, necesitas.
1 DateTimePicker
3 Botones.

Copia el códiigo y haz la prueba, fíjate que utilizo Now en vez de Date, esto es para que me actualice fecha y hora cuando pulse los botones 2 y 3 con el botón 1 visualizo la fecha y hora actuales para ver como cambia.

Código Delphi [-]
  procedure TForm1.Button1Click(Sender: TObject);
  begin
  ShowMessage(FormatDateTime('',DateTimePicker1.date));
  end;
  
  procedure TForm1.Button2Click(Sender: TObject);
  begin
  DateTimePicker1.DateTime:=Now;
  end;
  
  procedure TForm1.Button3Click(Sender: TObject);
  begin
  DateTimePicker1.DateTime:=Now;
  end;

Un Saludo.

rafita 15-03-2005 13:05:30

Hola Alfredosg19,

Solo quería decirte que te ocurre lo que a mí: te curras todo a mano, incluso funciones que ya existen. Tengo cientos de líneas de código sustituidas por una sola función que trae Delphi, y que descubrí tras largas horas de trabajo y buenos dolores de cabeza.

Para saber si la fecha introducida es anterior a la fecha actual o una semana posterior utiliza las funciones DaysSpan y CompareDate:
Código:

if CompareDate(FechaD.Date,Now)=-1 then
    ShowMessage('¡Aviso! Estas realizando una reserva en un día anterior a hoy');
 if Round(DaysSpan(Fecha1.Date,Now))<0 then
    ShowMessage('Anterior a hoy');

Para poner la fecha del sistema simplemente utiliza la función NOW:
Código:

    DtData.Date:=Now;
También te sirve para la hora (actual)
Código:

DTFechaYHora.DateTime:=Now;
 DTSoloHora.Time:=Now;

Como dice Marcos, puedes cambiar el valor tantas veces como quieras. Suele ser lo habitual.

Puedes comprobar la validez de la fecha al salir del campo DTData. Yo lo hago de la siguiente forma:
Evito que el usuario introduzca una fecha a mano: en el evento OnKeyPress pongo una función con un
Código:

Key:=#0;
Capturo el repliege del calendario en el evento OnCloseUp.
Código:

var FHBuena : TDateTime;
 begin
 if (not TryStrToDate(DateToStr(FechaD.Date), FHBuena)) or
                  (not TryStrToDate(DateToStr(FechaH.Date), FHBuena)) or
                  (not TryStrToTime(HoraD.Text, FHBuena)) or
                  (not TryStrToTime(HoraH.Text, FHBuena)) then
                  begin
                  ShowMessage('¡Error! Faltan datos (fecha u hora) para poder realizar la reserva');
                    Exit;  // podría haberlas inicializado FechaD.Date:=NOW; ....
                  end;

Por último, te recomiendo que le eches un vistazo a los componentes de las RXLib, sobre todo a uno llamado DateEdit.

Seguimos en contacto.


La franja horaria es GMT +2. Ahora son las 03:35:01.

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