Ver Mensaje Individual
  #5  
Antiguo 11-10-2006
[FGarcia] FGarcia is offline
Miembro Premium
 
Registrado: sep 2005
Ubicación: Cordoba, Veracruz, México
Posts: 1.123
Reputación: 20
FGarcia Va por buen camino
Hola! Gracias por responder, con respecto al titulo del mensaje mil disculpas pero no se me ocurrio otro (por cierto ¿se pueden editar los titulos?)

//EDITADO: Al parecer ya corregi el error aun estoy en pruebas.

Con respecto al problema pues si, me enfoque solo al hecho de haber insertado esa linea y de que ahi provenia el error. En realidad es una continuacion de este otro hilo .

Como menciono en el hilo anterior desde un elemento de menu creo un formulario que me pide una clave antes de acceder al formulario de configuracion. Eso pues ya lo resolvi y no me genera ningun problema.

Código Delphi [-]
procedure TForm1.Ajustes1Click(Sender: TObject);
var
Respuesta : integer;
begin
  modoPass := 1;
  frmCfg := TfrmCfg.Create(nil); //Formulario que pide clave de ingreso a
                                 //la configuracion
  Respuesta := frmCfg.ShowModal;
  if Respuesta = mrOK then //Si la clave de ingreso es correcta
    begin
    frmConfigura := TfrmConfigura.Create(nil); //Formulario de configuracion
      try
        frmConfigura.ShowModal;
      finally
        frmConfigura.Free;
      end;
    end;
  frmCFG.Close;
  frmCFG.Free;    //SI AQUI LIBERO EL FORMULARIO frmCFG no necesito liberarlo en ningun otro lado!!!!!
end;

Código Delphi [-]
procedure TfrmCfg.BitBtn1Click(Sender: TObject);
var
  K: string;
begin
  case modoPass of
    1: K := DatetoStr(Date) + 'CFG';  // dd/mm/yyyyCFG
                                      //Clave de acceso a Config.
    2: K := DateToStr(Date) + 'GLAF'; // dd/mm/yyyyGLAF
                                      //Clave de acceso tipo Backdoor o sea si
                                      //la pierden.
  end;
  if edit1.Text <> '' then
    begin
      if (Edit1.Text = K) or (edit1.text = Password) then
        begin
          frmCfg.ModalResult := mrOk;
          K := '';
        end
      else
        begin
          showmessage('¡Clave de acceso invalida!');
          Edit1.Text := '';
          Edit1.SetFocus ;
        end;
    end
  else
    begin
      ShowMessage('Debe ingresar una clave valida');
      Edit1.setfocus;
    end;
end;


De ahi decidi colocar otra contraseña a otro formulario para mantenimiento de la BD, no encontre razon para crear otro formulario de "login" y decidi usar el que ya habia probado, desde el mismo formulario de configuracion inserte tres CheckBox :

a) uno para crear la contraseña por primera vez. Este crea un nuevo formulario donde se ingresa la contraseña y se le asigna a una variable, la cual no se guarda hasta que se le hace click en el boton de ok del formulario de configuracion. Este paso funciona bien, no me genera ningun error.

Código Delphi [-]
//Establece la contraseña por primera vez
procedure TfrmConfigura.CheckBox19Click(Sender: TObject);
begin
  frmPass := TfrmPass.Create(nil);   //Este es el formulario para crear
                                     //la contraseña de mantenimiento
  try
    frmPass.ShowModal;
  finally
    frmPass.Free;
  end;
end;


Código Delphi [-]
procedure TfrmPass.BitBtn1Click(Sender: TObject);
var
  oldPass: string;
begin
  oldPass := Password;
  if Edit1.Text <> '' then
    begin
      if (Edit1.Text = Edit2.Text) or
                              (Edit1.Text = DateToStr(Date) + 'GLAF') then
        begin
          newPass := Edit1.Text ;
          Close;
        end
      else
        begin
          showmessage('No hay coincidencia. Verifique nuevamente');
          Edit1.SelLength ;
          Edit1.SetFocus ;
        end;
    end
  else
    begin
      showmessage('Ingrese al menos un caracter');
      Edit1.SetFocus;
    end;
end;


b) otro (checkbox) para cambiar la contraseña; desde aqui se vuelve a llamar al formulario de ingreso de la contraseña y se ejecuta el mismo procedimiento. Aqui si cuando cierro el formulario de configuracion me da el error ya mencionado.

Código Delphi [-]
//Cambia la contraseña. Primero se le pide que ingrese la contraseña de
//mantenimiento actual
procedure TfrmConfigura.CheckBox20Click(Sender: TObject);
var
  respuesta: integer;
begin
  modoPass := 2;
  frmCfg := TfrmCfg.Create(nil); //Este es el formulario de ingreso de
                                 //contraseña de mantenimiento QUE ES EL MISMO
                                 //que pide la clave de ingreso a configuracion
  Respuesta := frmCfg.ShowModal;
  if Respuesta = mrOK then   //Si la contraseña es correcta
    begin
    frmPass := TfrmPass.Create(nil); //Este es el formulario para crear
                                     //la contraseña de mantenimiento
      try
        frmPass.ShowModal;
      finally
        frmPass.Free;
      end;
    end;
  frmCFG.Close ;
  frmCFG.Free ;  //¡¡¡¡ESTO ESTA DE MAS!!!!!
end;


c) un checkbox mas para eliminar la contraseña;desde aqui se vuelve a llamar al formulario de ingreso de la contraseña si la contraseña es correcta solo coloca una variable tipo string en vacio. Aqui tambien me da problema.

Código Delphi [-]
//Borra la contraseña. Primero se le pide que ingrese la contraseña actual
procedure TfrmConfigura.CheckBox21Click(Sender: TObject);
var
  respuesta: integer;
begin
  modoPass := 2;
  frmCFG := TfrmCFG.Create(nil); //Este es el formulario de ingreso de
                                 //contraseña de mantenimiento QUE ES EL MISMO
                                 //que pide la clave de ingreso a configuracion
  Respuesta := frmCfg.ShowModal;
  if respuesta = mrOK then  //Si la contraseña es correcta
    newPass := '';
  frmCFG.Close ;
  frmCFG.Free ;   ///ESTO TAMBIEN
end;

Y para terminar cuando hago click en el boton de aceptar del formulario de configuracion se salvan los cambios en el archivo .ini

Código Delphi [-]
procedure TMDatos.SalvarConfig;
begin
  ConfigTCP := TIniFile.Create(RutaAPP + 'ordenCfg.ini');
  with ConfigTCP do
    begin
      try
       //son muchas cosas mas que se guardan hasta llegar a esta nueva linea
        WriteString('Seguridad', 'Clave', newPass);
      finally
        Free ;
      end;
    end;
end;

Mientras escribo esto una idea me da vueltas pero no logro aterrizarla aun. Se que fue mucho "rollo", "choro", "verbo", y como se diga en diversas latitudes donde se hable Español o Castellano (Cual es la correcta ). Se agradece su ayuda

/// Bueno por fin aterrizo la idea y parece que funciono. El codigo supongo que se puede hacer mas elegante lo seguire revisando. Se aceptan sugerencias

Última edición por FGarcia fecha: 11-10-2006 a las 02:19:11.
Responder Con Cita