Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Solo ejecutar un procedimiento cuando solo la ventana esta activa (https://www.clubdelphi.com/foros/showthread.php?t=83878)

feliz-58 09-08-2013 21:30:46

Solo ejecutar un procedimiento cuando solo la ventana esta activa
 
Buenas tardes club, espero que estén bien,

en esta ocasión me dirijo a ustedes con la siguiente intención:

tengo tres Dbedit de los cuales son uno de Cantidad, precio unitario, Valor total.

Puse el determinado codigo, en el evento Onchange del dbedit "Precio unitario" para que los valores se vallan calculando automaticamente.

Pero el asunto es que como todos saben al ejecutarse el programa los edits se autollenan y da error.
tambien pasa cuando insertas la tabla, al "Cambiar de contenido" y quedarse vacio, se ejecuta el codigo y al estar vacios los edits da error.

tienen alguna idea? (quiero evitar el uso de botones para calcular, y que se haga automaticamente luego de digitar el precio unitario)

saludos!

Caminante 09-08-2013 22:07:41

Bueno sin ver el codigo podria sugerirte usar el evento onexit en vez de onchange.

Espero te sea util

Saludos.

feliz-58 10-08-2013 05:12:34

El codigo
 
De la forma que dices lo probé, y funciona, pero mi intención principal es que se haga en tiempo real.

El codigo es el siguiente

Código Delphi [-]
var
a,b,c : real;

begin
a:=strtofloat(dbedit9.Text);
b:=Strtofloat(dbedit11.Text);
c:=a*b;
dbedit12.Text:=floattostr(C);
end;

Caminante 10-08-2013 07:11:31

Pensandolo mejor porque no creas un campo calculado. Asi el calculo se actualizara automaticamente al modificar algun dbedit.

Chris 10-08-2013 19:39:04

Lo importante es saber el tipo de error que tu aplicación está presentando. Como no lo has dicho, vamos a suponer que es EDatabaseError. Ese tipo de error usaré para el siguiente código de ejemplo. Cambialo con respecto al tipo de error que tengas:

Código Delphi [-]
var
    a,b,c : real;

begin
    try
        a:=strtofloat(dbedit9.Text);
        b:=Strtofloat(dbedit11.Text);
        c:=a*b;
        dbedit12.Text:=floattostr(C);
        
    // cambia EDatabaseError por el error que tengas.
    except on EDatabaseError do { nada } ;
    end;
end;

Como veras, la solución pasa por simplemente ignorar el error. Aunque seguramente existen muchas más soluciones, creo que ésta es una de las más seguras. Usar la propiedad Active del formario puede introducir bugs muy difíciles de rastrear.

Saludos!


La franja horaria es GMT +2. Ahora son las 05:39:15.

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