Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Solo una llamada a Onchange de tedit. ¿Se puede? (https://www.clubdelphi.com/foros/showthread.php?t=63845)

jotaeme 05-03-2009 13:07:00

Solo una llamada a Onchange de tedit. ¿Se puede?
 
Hola,

Mi problema es el siguiente:

Tengo un Tedit y un TUpDown para insertar números. Cada vez que se modifica el valor del Tedit(ya sea por teclado o por el TUpDown) tengo que hacer una consulta a Base de Datos.

Estoy usando el evento OnChange del Tedit, pero el problema es por ejemplo, si tengo el valor 2 en el Tedit y el usuario pulsa 8 veces continuas en TUpDown para cambiarlo a 10, quiero que solo se haga la consulta del último valor, no las otras 7 consultas. ¿Sabeis si esto se puede hacer?, lo mismo me ocurre si el usuario escribe 143 en el tedit, no quiero que se hagan las consultas con los valores 1 y 14, solo cuando haya terminado de escribir todo.

Gracias

juanlaplata 05-03-2009 14:30:22

y, segun lo dicho, el OnChange se produce cuando algo cambia dentro del TEdit, aun si lo estas borrando, por lo cual no conseguiras que no se ejecute la consulta la cantidad de veces que se produce eñ OnChange. Se me ocurre que tendrias que poner la opcion (boton, o lo que sea) que diga, "hay un valor definitivo" para el TEdit.
Tambien habria que ver que tan costosa es esa consulta, ya que tal ves no le va a tu diseño/manejo otra opcion (boton, etc).

PD: mirando un poco, ya dentro de delphi, esta el Evento OnExit, que es cuando el control pierde el foco, talves ahi es el momento de ejecutar la consulta.

PD 1 : Echa un vistazo a la pestaña "Samples" ahi esta el "SpinEdit" es un TEdit con UpDown Incorporado, todo un solo componente. Y este serviria mejor para el OnExit, yq que en tu caso se produciria OnExit al pasar del TEdit al UpDown y aun no te has hido por completo de la operacion.

Espero haber ayudado, estaremos por aqui para lo que podamos.

duilioisola 05-03-2009 14:33:09

Puedes usar un TTimer para que haga la consulta, por ejemplo, 1/4 de segundo después de la última tecla.

Código Delphi [-]
procedure TForm1.OnCreate();
begin
   // Inicializo Timer
   TimerConsultaSQL.Enabled := False;
   TimerConsultaSQL.Interval := 250;
end;

procedure TForm1.TEditOnChange();
begin
   // Reseteamos el Timer
   TimerConsultaSQL.Enabled := False;
   TimerConsultaSQL.Enabled := True;
end;

procedure TForm1.TimerConsultaSQLOnTimer();
begin
   // Paramos el Timer
   TimerConsultaSQL.Enabled := False;
   // Hacemos consulta
   //...
   //...
   //...
end;

kalimero 05-03-2009 14:35:25

Hola.Pureba con esto
Código Delphi [-]
try
 miedit.onchange := ni;
 HAGO LO QUE SEA
finally
 miedit.onchange := miEditOnchange;
end;

saludos

jotaeme 06-03-2009 11:43:04

Gracias,

Ya lo he solucionado. He usado el SpinEdit y un sleep dentro del Onchange.

El sleep no lo podia usar antes puesto que me daba problemas y se quedaba el foco en el TUpDown, pero con el SpinEdit no ocurre.

Un saludo


La franja horaria es GMT +2. Ahora son las 16:07:40.

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