Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Problemas con el form de Inicio de Sesión (https://www.clubdelphi.com/foros/showthread.php?t=74550)

rubio 24-06-2011 17:45:44

Formulario de Inicio de Sesión
 
Hola, tengo una aplicación que posee un formulario de inicio de sesión que se ajecuta antes de inicializar la aplicación(Application.Run). El problema es que dentro de la aplicación tengo necesidad de volver a ejecutar ese formulario en un momento determinado para cambiar de usuario y comenzar la aplicación desde el formulario principal del sistema y no se como hacerlo. agradecería cualquier ayuda al respecto.

Gracias de antemano.

ecfisa 24-06-2011 18:02:28

Hola.

Simplemente llamándolo.

Por ejemplo:
Código Delphi [-]
procedure TElfrmQueSea.ButtonClick(Sender: TObject);
begin
  with TfrmInicioDeSesion.Create(Self) do
  try
    ShowModal;
  finally
    Free;
  end;
end;

Saludos.

rubio 24-06-2011 21:07:12

Gracias por la ayuda.

rubio 24-06-2011 21:19:46

Problemas con el form de Inicio de Sesión
 
Hola de nuevo, en el hilo anterior no me expliqué bien, la respuesta del moderador me ayudó, pero hay algo que no me corre bien, yo tengo el siguiente código:

Código Delphi [-]
  Application.Initialize;
  frmAutenticacion:= TfrmAutenticacion.Create(Application);
  if frmAutenticacion.ShowModal=mrOk then
  begin
    Application.Initialize;
    Application.CreateForm(TfrmPrincipal, frmPrincipal);
    Application.CreateForm(TfrmPresenta, frmPresenta);
    Application.Run;
  end;

pero aunque en el formulario Autenticacion yo declaro frmAutenticacion.ModalResult:=mrOk el no entra a correr la aplicación. Agradecería cualquier ayuda al respecto.

Gracias de antemano.

roman 24-06-2011 21:28:22

Cita:

Empezado por rubio (Mensaje 404761)
Hola de nuevo, en el hilo anterior

Hola,

He puesto este mensaje en el hilo original. No abras nuevos hilos para continuar lo que ya estás tratando en uno.

// Saludos

ecfisa 24-06-2011 21:48:24

Hola.

Probá de este modo:
Código Delphi [-]
  Application.Initialize;
  Application.CreateForm(TfrmPrincipal, frmPrincipal);
  Application.CreateForm(TfrmPresenta, frmPresenta);
  Application.ShowMainForm:= False;
  with TfrmAutenticacion.Create(nil) do
  try
    if ShowModal = mrOk then
    begin
      Application.ShowMainForm:= True;
      Application.Run;
    end;
  finally
    Free;
  end;

Saludos.

Chris 25-06-2011 21:46:39

Tienes que ver que si luego de hacer la asignación: frmAutenticacion.ModalResult := mrOk no debes de llamar al procedimiento Close del formulario. En ocaciones muchos cometen el siguiente error (yo lo hacía):
Código Delphi [-]
frmAutenticacion.ModalResult := mrOk;
frmAutenticacion.Close; // Close borra el resultado de ModalResult

Repito, tienes que fijarte que luego de hacer la asignación a la propiedad ModalResult, no llames a Close. Cuando asignas un valor a ModalResult, el formulario se cierra automáticamente por lo que no es necesario la llamada a Close.

Saludos,
Chris

rubio 27-06-2011 13:44:12

Hola, gracias a ambos por las respuestas, no había respondido ya que estaba de descanso de fin de semana, ecfisa he probado la variante que me mandaste y cuando voay a asignar el valor a ModalResult (frmAutenticacion.ModalResult:=mrOk) me da el siguiente error:



después probé poniendo lo viejo que yo tenía y quitando el Close como lo dice Chris y me funcionó correctamente, vos tenes alguna idea de que puede ser?.

Gracias de antemano.

rubio 27-06-2011 13:49:50

El error es el siguiente, parece que no se pegó bien:
raised exception class EAccessViolation with message 'Access violation at address004DD3DF in module 'OrdenesCompra'. Write of address 0000024C.

ecfisa 27-06-2011 15:44:36

Hola.

Mirá, yo no obtengo ninguna excepción así que supongo que el error lo está provocando TfrmPresenta. (unidad que desconozco y no incluí en mi prueba).

Comprobar si el error lo provoca TfrmPresenta es fácil, sólo desactivá la línea de creación:
Código Delphi [-]
  Application.Initialize;
  Application.CreateForm(TfrmPrincipal, frmPrincipal);
  //Application.CreateForm(TfrmPresenta, frmPresenta); // <-
  Application.ShowMainForm:= False;
  with TfrmAutenticacion.Create(nil) do
  try
    if ShowModal = mrOk then
    begin
      Application.ShowMainForm:= True;
      Application.Run;
    end;
  finally
    Free;
  end;

Saludos.

rubio 27-06-2011 16:40:44

Hola.

Quite frmPresenta tal y como me indicaste y vuelve a dar el error, te digo el error lo da en frmAutenticacion cuando le estoy asignando el valor a la propiedad ModalResult.

Código Delphi [-]
frmAutenticacion.ModalResult:=mrOk;

Ahora si lo hago de esta forma no me da error.

Código Delphi [-]
  Application.Initialize;
  frmAutenticacion:= TfrmAutenticacion.Create(Application);
  if frmAutenticacion.ShowModal=mrOk then
  begin
    Application.CreateForm(TfrmPrincipal, frmPrincipal);
    Application.Run;
  end
  else frmAutenticacion.Free;

Saludos.

ecfisa 27-06-2011 22:52:31

Cita:

el error lo da en frmAutenticacion cuando le estoy asignando el valor a la propiedad ModalResult.
Hola.

En lugar de hacer:
Código Delphi [-]
frmAutenticacion.ModalResult:=mrOk;

Hace:
Código Delphi [-]
Self.ModalResult:= mrOk;

O simplemente:
Código Delphi [-]
ModalResult:= mrOk;

Saludos.

rubio 28-06-2011 13:46:58

Gracias ecfisa, problema resuelto.

roman 28-06-2011 16:29:48

Por cierto, puedes ahorrate el código si al botón con el que cierras le pones su propiedad ModalResult en mrOk. Esto lo puedes hacer en el inspector de objetos.

// Saludos


La franja horaria es GMT +2. Ahora son las 00:50:35.

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