PDA

Ver la Versión Completa : algo raro


rebollo75
29-12-2004, 20:23:05
hola a todos y feliz año 2005.

tengo un pequeño problema, bueno no tan pequeño. Tengo 2 datetimerpiker, el primero es una fecha inicial y el segundo una fecha final para hacer una busqueda entre las dos fechas.

en el de la fecha final, en el evento onchange tengo puesto:

if dtpfecfin.Date < dtpfecini.Date then
begin
showmessage('la fecha de finalizacion es menor que la de inicio.');
end;

bueno pues lo que me pasa es que el mensaje me sale 2 veces. haciendo el proceso paso a paso con f-8 cuando muestra la primera vez el mensaje y termina se me va a el evento ondrawcell y ya ahi se me queda colgado.

no entiendo nada de nada. si alguien sabe algo por favor que me ayude.

gracias.

marcoszorrilla
29-12-2004, 21:55:21
Pues es cierto la pulsación sobre el botón aceptar provoca según parece el evento OnChange por segunda vez. Prueba con esto y verás como te funciona sin problemas.

procedure TForm1.DateTimePicker2CloseUp(Sender: TObject);
begin
if DateTimePicker2.Date < DateTimePicker1.Date then
begin
showmessage('la fecha de finalizacion es menor que la de inicio.');
end;
end;

Un Saludo.

rebollo75
30-12-2004, 10:29:56
fue una solucion que pense, pero y si la modifica manualmente, sin tener que abrir la ventana?


gracias

marcoszorrilla
30-12-2004, 11:42:34
Pues entonces utiliza el evento OnExit.

Un Saludo.

rebollo75
30-12-2004, 17:34:19
no me termina de convecer, pero es la unica forma que tengo de poder hacerlo.


muchas gracias y feliz año.:)

Lepe
03-01-2005, 07:12:06
Pon un boton de Buscar (TBitBtn, por ejemplo), al pulsarlo chequeas las fechas y muestras el mensaje.

De esta forma siempre que se pulse el boton, se habrá pasado por el evento OnExit de los controles de fechas.

Saludos

roman
03-01-2005, 08:10:27
Intenta algo como esto:


{$writeableconst on}
procedure TForm1.DateTimePicker2Change(Sender: TObject);
const
Changing: Boolean = false;

begin
if not Changing then
ShowMessage('la fecha de finalizacion es menor que la de inicio.');

Changing := not Changing;
end;
{$writeableconst off}


EDITO:

Lo anterior no funciona muy bien: si cambias con el teclado la fecha mientras está desplegado el calendario se muestra el mensaje una vez sí y otra no.

Veamos el siguiente intento:


procedure TForm1.DateTimePicker2Change(Sender: TObject);
begin
if DateTimePicker1.Date <> Date then
begin
ShowMessage('Hola');
Date := DateTimePicker1.Date;
end;
end;


donde Date es una variable de tipo TDate que puedes inicializar con el valor de DateTimePicker2.Date.

// Saludos