Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Lazarus, FreePascal, Kylix, etc. (https://www.clubdelphi.com/foros/forumdisplay.php?f=14)
-   -   Ayuda con inputquery (https://www.clubdelphi.com/foros/showthread.php?t=91187)

danielmj 28-11-2016 10:50:09

Ayuda con inputquery
 
Hola gente,

Estoy teniendo problemas con lazarus, en realidad, entiendo que pueda ser algo de lo mas sencillo pero a mi no se me ocurre que mas probar. El caso es que tengo el siguiente código:

Código Delphi [-]
procedure TryInputQuery;
   var respuesta: boolean;
       TextoUsuario: string;
  begin
     respuesta := InputQuery ('Cajón de claves.', 'Introduce la contraseña maestra.', true, TextoUsuario);
     if respuesta {= true} and (TextoUsuario = 'xxxxxxx') then
     begin
       form3.Label1.Visible:= true;
       form3.Panel1.Visible:= true;
       form3.sp1.visible:= true;
       form3.show
     end
     else
     ShowMessage('Error. Contraseña no reconocible');
//     form3.close
  end;

procedure TForm3.FormActivate(Sender: TObject);
begin
  TryInputQuery;
end;

La idea es que se obligue a introducir la contraseña correcta o se pulse el botón cancelar pero en lugar de eso, lo que hace es.., si se introduce la contraseña correcta deja avanzar pero si se pulsa el boton cancelar sigue mostrando el showmessage y cuando acepto ese mensaje el programa continua adelante, es decir, da acceso al listado, algo que no debe ocurrir hasta que se introduzca la clave correcta. Y no sé como solucionarlo, he pensado en un goto con su label pero no sé... creo que eso es de todo menos eficiente. ¿Alguna idea?
Un saludo.

danielmj 28-11-2016 11:35:09

Hola, ya está resuelto,

Código Delphi [-]
procedure TryInputQuery;
var
   respuesta: boolean;
   TextoUsuario: string;
   resp, estilo: integer;
   texto: pchar;

label salto;
begin
    salto:
    respuesta := InputQuery ('Cajón de claves.', 'Introduce la contraseña maestra.', true, TextoUsuario);
     if respuesta {= true} and (TextoUsuario = 'xr8mt5xr') then
     begin
       form3.Label1.Visible:= true;
       form3.Panel1.Visible:= true;
       form3.sp1.visible:= true;
       form3.show
     end
     else
     with application do
     begin
      estilo :=  MB_OKCANCEL + MB_ICONWARNING;
      resp :=  MessageBox ('Error. La contraseña introducida no es reconocible'+#13+
                           'o no has introducido ninguna clave válida. Vuelve a'+#13+
                           'intentarlo o pulsa sobre "Cancelar" para salir al '+#13+
                           'menú principal.', 'Cajón de claves. Error', estilo); //recogemos el valor de la función
      case resp of
        IDOK: goto salto;
        IDCANCEL: form3.Close;
      end; //case
     end; //with
  end;

procedure TForm3.FormActivate(Sender: TObject);
begin
  TryInputQuery;
end;

Hay que añadir la directiva {goto on}
Saludos.

cloayza 28-11-2016 19:36:55

A ver si esto te ayuda...

Código Delphi [-]
function TForm3.TryInputQuery:Boolean;
var
   respuesta: Boolean;
   Text, Values: String;
begin
     Values:='xr8mt5xr';
     Text  :=Chr(30)+'Introduce la contraseña maestra.';

     while True do
     begin
          Result := InputQuery('Cajón de claves.', Text, Values);

          if not Result then
             Exit;

          if Values='xr8mt5xr' then
             Exit;
     end;
end;

Tu la complementas...Saludos cordiales

danielmj 30-11-2016 20:43:07

Hola cloayza, gracias por responder, mañana me pongo con el a ver que tal funciona.. un saludo.


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

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