PDA

Ver la Versión Completa : Ayuda para validar un Dato de Tipo Boleano en funcion


microbiano
05-05-2012, 01:54:56
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

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

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
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 wpago<Wtotal then
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:

...
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:

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:

with TFPago.Create(Self) do
try
ShowModal
finally
if ModalResult = mrOk then // implica que VerificaDatos = True
...
Free
end;


Saludos. :)´