Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Ayuda para validar un Dato de Tipo Boleano en funcion (https://www.clubdelphi.com/foros/showthread.php?t=78623)

microbiano 05-05-2012 01:54:56

Ayuda para validar un Dato de Tipo Boleano en funcion
 
bien pues resulta que despues de que todo funcionaba de maravilla, ahora resulta que siempre
no funcion tratare de describir lo que paso en un form tengo un boton con la siguiente informacion, aqui el form se llama Fcobro
Código Delphi [-]
if GridResultado.SelectedRows.Count > 0 then
  begin
   CalculaImportes;
   with TFPago.Create(Self) do
    try
     ShowModal;
    finally
     FcobroOk:=Pago.result;//aqui es donde paso el valor de la variable result del form Fpago 
     Free;
     RealizaCobro;//este procedimiento valida si la variable Fcobro ok es verdadera 
con esta instruccion if (Fcobrook) then pero no funciona y cuando lo ejecuto resulta que la variable Pago.Result no trae nadad
    end;
  end;

en este resulta que lo unico que hago es esperar el resultado de una variable de tipo Boolean
de otro form en el que hago lo siguiente, este es el boton de aceptar en el segundo form de nombre Fpago
Código Delphi [-]
procedure TFPago.BtonAceptarClick(Sender: TObject);
begin
 if not (VerificaDatos) then
  begin
    Exit;
  end
 else
  begin
    close;
  end;   
end;


y esta es la funcion para validar los datos
Código Delphi [-]
function TFPago.VerificaDatos:Boolean;
var wpago,wcambio,wresultado:Double;
 Bverifica:Boolean;
begin
 Bverifica:=True;
 wpago:=TxtPago.Value;

 if TxtFolio.Value=0 then
  begin
   Application.MessageBox('Proporciona el numero de Folio del Recibo',PChar(Application.Title), MB_OK + MB_ICONERROR);
   TxtFolio.SetFocus;
   Bverifica := False;
   Exit;
  end;
 if TxtPago.Value=0 then
  begin
   Application.MessageBox('Proporciona la cantidad con la que se paga',PChar(Application.Title), MB_OK + MB_ICONERROR);
   TxtPago.SetFocus;
   Bverifica := False;
   Exit;
  end;
  if wpagothen
   begin
    Application.MessageBox('Con el importe Proporcionado con cubre el Total del Pago',PChar(Application.Title), MB_OK + MB_ICONERROR);
    TxtPago.SelectAll;
    TxtPago.SetFocus;
    Bverifica := False;
    Exit;
   end
  else
   begin
    wresultado:=wpago-Wtotal;
    TxtCambio.value:=wresultado;
   end;
   Result:=Bverifica;// aqui paso la variable a Result que es te tipo boolean y es publica.
end;


espero me puedan ayudar, de antemano muchas gracias, a resumidas cuentas
se pierde el valor de la variable result cuando la paso a FcobroOk.

ecfisa 05-05-2012 04:53:38

Hola microbiano.

El problema supongo (ya que no indicas el tipo de la variable FCobroOk) pasa por que FCobroOk es de tipo Boolean y la estas comparando con el valor devuelto por un form modal que es de tipo TModalResult.

Creo que deberías hacer:
Código Delphi [-]
...
  with TPago.Create(Self) do
  try
    ShowModal
  finally
    FCobroOk:= ModalResult = mrOk; // FCobroOk=True si ModalResult = mrOk 
    if FCobroOk then
    // mejor sería: if ModalResult = mrOk then ...
       ...
    Free
  end;
 ...

Saludos.

microbiano 05-05-2012 06:37:52

hola ecfisa muchas gracias por responder mira la variable FCobroOk (del formulario cobro) es de tipo Boolean al igual que la variable Result del Formulario (Fpago); tratare de implementar lo que comentas.

saludos

ecfisa 05-05-2012 08:16:39

Hola microbiano.

Por lo que entiendo del código de BtonAceptarClick, sólo debe salir de FPagos cuando la función VerificaDatos da un resultado verdadero.

Entonces se me ocurre que en FPagos podrías hacer:
Código Delphi [-]
procedure TFPago.btnAceptarClick(Sender: TObject);
begin
  ModalResult:= Integer(VerificaDatos); 
  // Close;
end;
Si VerificaDatos es True implica que Integer(VerificaDatos) = 1, por lo tanto ModalResult = mrOk y sale de FPagos.
Si VerificaDatos es False implica que Integer(VerficaDatos) = 0, por lo tanto ModalResult = mrNone y queda en FPagos
Por último, si deseas que salga de FPago de todas formas, basta con agregar una línea llamando al método Close.

Y en el form que lo invocas:
Código Delphi [-]
  with TFPago.Create(Self) do
  try
    ShowModal
  finally
    if ModalResult = mrOk then // implica que VerificaDatos = True
     ...     
    Free
  end;

Saludos. :)´


La franja horaria es GMT +2. Ahora son las 07:29:39.

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