Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Problema con 3 DBEdits relacionados (https://www.clubdelphi.com/foros/showthread.php?t=68400)

Kubelo 11-06-2010 09:19:30

Problema con 3 DBEdits relacionados
 
Perdón en primer lugar por el título, pero no sabía como llamar al post.

A ver, tengo 3 DBEdits que contienen, Cantidad, Precio y Total. El problema que me surge es que se debe de "abrir" el contenido de los 3 edits, ya que hay que ceñirse a unos documentos y a veces por el redondeo que llega en el documento no cuadra el (Cantidad x Precio). Así que a veces hay que poner Cantidad y Total y calcularse el precio.

Mi problema es que tengo en el evento OnChange de los 3 DBEDits y os explico.

El OnChange del DBEDit Cantidad calcula el bruto a partir de la cantidad y el precio.

El OnChange del DBEdit Precio hace lo mismo que el de cantidad.

El Onchange del DBEdit Total calcula el precio a partir de la cantidad y el total (Precio = Total/Cantidad).

El problema es que no me funciona, ya que cuando se modifica uno vuelve a saltar su evento Onchange y no funciona correctamente. Se hace como un "bucle" que no me permite modificar el valor en algunos casos.

Por favor sería de suma ayuda que me ilustráseis el modo de solucionar el problema. Sé que con un botoncito "Refrescar" o algo similar sería sencillo, pero me gustaría que fuese automático.

Gracias por la ayuda y perdón por la parrafada! Jejeje :D

cloayza 11-06-2010 17:16:01

Podrias deshabilitar los eventos OnChange cuando este en cierto DBEdit...

Ejm:

Cuando estas en el DBEdit1, se deberia desabilitar los eventos de DBEdit2, DBEdit3...

Para ello en el evento OnEnter de cada DBEdit podrias hacer...

Código Delphi [-]
procedure TForm1.DBEdit1OnEnter(Sender:TObject);
begin
      DBEdit1.OnChange:=DBEdit1Change;  //Activas el evento onchange del DBEdit1, para que realize los calculos...
      DBEdit2.OnChange:=NIL;
      DBEdit3.OnChange:=NIL;
end;

procedure TForm1.DBEdit2OnEnter(Sender:TObject);
begin
      DBEdit1.OnChange:=NIL
      DBEdit2.OnChange:=DBEdit2Change;  //Activas el evento onchange del DBEdit2, para que realize los calculos...;
      DBEdit3.OnChange:=NIL;
end;

Y asi con el DBEdit3...

Espero te sirva...Saludos

Kubelo 11-06-2010 17:18:43

Gracias, hace media hora dí con la solución y es supeditar la ejecución del código al foco. Así funciona perfectamente, es decir...

Código Delphi [-]
procedure TFrmOperaciones.DBEditPrecioCChange(Sender: TObject);
begin
  inherited;
  if (DBEditPrecioC.Focused) then
  begin
    MD.TOPeracionesRVBRUTO.AsFloat := StrToFloat(DBEditNTitulosC.Text)*StrToFloat(DBEditPrecioC.Text);
  end;
end;

Gracias por tu respuesta!


La franja horaria es GMT +2. Ahora son las 12:10:53.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi