PDA

Ver la Versión Completa : cerrar sesión en aplicación


jano
22-11-2005, 10:34:42
Hola, lo que deseo hacer es poder cerrar sesion en mi aplicacion para que me vuelva a pedir la ventana de logueo, el codigo que utilizo para mostrar la ventana de usuario y contraseña es este

Application.Initialize;
Application.CreateForm(TmoduloDatos, moduloDatos);
frmInicio:=TfrmInicio.Create(nil);
if frmInicio.ShowModal = mrok then
begin
Application.CreateForm(TfmPrincipal, fmPrincipal);
Application.Run;
end
else
Application.Terminate;

Gracias por vuestro tiempo y atención

Enan0
22-11-2005, 11:50:22
Application.Initialize;
Application.CreateForm(TmoduloDatos, moduloDatos);
frmInicio:=TfrmInicio.Create(nil);
if frmInicio.ShowModal = mrok then
begin
Application.CreateForm(TfmPrincipal, fmPrincipal);
Application.Run;
end
else
Application.Terminate;


Mira no veo bien cual es el form que tiene el logue, pero lo que podes haces es un timer, enlazado al evento Onmousemove.. (creo que esasi) que se active cuando el mouse deja de moverse.. (es decir, lo dejas activo siempre pero pones un variable global que haga de control) despues de N veces que no se puso a cero, cuando pasa por el evento Ontime. mostras nuevamente el formulario de logueo..

Mas o menos como esto:

var
Form1: TForm1;
vTimer:integer;
implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
vTimer:=0;
Timer1.Enabled :=false;
Timer1.Interval:=60000;//un minuto
Timer1.Enabled :=true;
end;

procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
vTimer:=0;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
If vTimer=> 5 then
ShowMessage('Debes reloguearte')
else
inc(vTimer);

end;

end.

vtdeleon
22-11-2005, 17:19:00
Saludos

Este codigo Application.Initialize;
Application.CreateForm(TmoduloDatos, moduloDatos);
frmInicio:=TfrmInicio.Create(nil);
if frmInicio.ShowModal = mrok then
begin
Application.CreateForm(TfmPrincipal, fmPrincipal);
Application.Run;
end
else
Application.Terminate; ya no te servira de mucho.
Has un codigo que haga:
1) Oculte la ventana principal
2) Muestre la pantalla de acceso:
Acepta: 2.1) Muestra el Formulario Principal
Cancelar:2.2) Cierra la aplicacion completa
....
....

jano
22-11-2005, 18:19:53
frmInicio --> es el formulario de logueo
fmPrincipal --> es el formulario principal MDI

Ahora mi problema es que si solo oculto el formulario fmPrincipal y este tiene abiertos forms MDIChild, la siguiente vez que lo muestro dichas ventanas siguen ahi. De todos modos preferiria crear nuevamente ese form, en vez de solo ocultarlo.

Probe con este código, pero se queda en un bucle infinito... :confused:
la variable Finalizar la cambio a true desde el evento OnClose de fmPrincipal
Finalizar:=false;
while not Finalizar do
begin
frmInicio:=TfrmInicio.Create(nil);
if frmInicio.ShowModal = mrok then
begin
Application.CreateForm(TfmPrincipal, fmPrincipal);
Application.Run;
fmPrincipal.Free;
end;
frmInicio.Free;
end;
Application.Terminate;

vtdeleon
22-11-2005, 23:27:19
Saludos
Si el problema es los formularios hijos puedes hacer esto antes del paso 1:
0) Cerrar todas las ventanas hijas activas
var
n:integer;
Begin
for n:= frmprincipal.MDIChildCount-1 downto 0 do
frmprincipal.MDIChildren[n].Free;
Has un codigo que haga:
1) Oculte la ventana principal
2) Muestre la pantalla de acceso:
Acepta: 2.1) Muestra el Formulario Principal
Cancelar:2.2) Cierra la aplicacion completa

jano
24-11-2005, 16:26:46
Gracias por las respuestas, pero lo que necesito es que se vuelva a mostrar la ventana de logueo y q la ventana principal se destruya, ahora no tengo idea de como hacer el codigo para eso, lo intente pero se queda en el bucle....:(

Lepe
24-11-2005, 17:30:25
Si la ventana principal es la MDI, cuando se destruye, se cierra la aplicación, y este efecto no puede cambiarse.

Si pones como ventana principal la de logueo, entonces jamás puedes destruir esa ventana, solo podrás ocultarla, y estará siempre en memoria.

Lo que yo haría es lo siguiente:
- Ventana principal la MDI.
- Cuando se muestre la de logueo:

Cierras las ventanas hijas que haya (cancelando los cambios si los hay).
Pones invisibles los botones del Toolbar que sean "sensibles" y dejas visibles los menús común a todos los usuarios.

- Haces un ShowModal de la ventana de logueo.
- Si cancela la ventana de logueo: Application.Terminate y corriendo que están levantando tabiques ;). Si aceptan la ventana de logueo, según el nuevo ususario, muestras los botones de la barra de herramientas y menús que sean oportunos.

saludos