Cita:
Empezado por Neftali
Puedes recorrer todos los formularios de la aplicación y cerrarlos uno a uno.
Si lo necesitas puedes "saltarte" el actual...
Código Delphi [-]
var
i:integer;
F:TForm;
begin
for i := 0 to (Application.ComponentCount - 1) do begin
if (Application.Components[i] is TForm) then begin
F := TForm(Application.Components[i]);
if (F <> Self) then begin
F.Close;
end;
end;
end;
end;
|
Muchas gracias por responder tan rápido.
Tengo la siguiente inquietud porque no se que pasa.
Cree un proyecto nuevo agregué varios botones y varios formularios al form principal llamado form1 por ejemplo, y agregué un botón con este código, al presionar este botón automáticamente me cierra todos los formularios, pero al probar en mi aplicación se cierran todas las ventanas y hay que abrir nuevamente la aplicación y esto no es lo que quiero.
Mi aplicación consta de lo siguiente:
el formprincipal donde se inicia solicitando que digite el usuario y la contraseña adjunto el código.
adjunto el código:
Código Delphi
[-]
unit Form_Login_Principal;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, jpeg, ExtCtrls, StdCtrls, Buttons;
type
TForm1_Form_Login_Principal = class(TForm)
BitBtn1: TBitBtn;
BitBtn2: TBitBtn;
GroupBox1: TGroupBox;
Label1: TLabel;
Label2: TLabel;
Image2: TImage;
txtusuario: TEdit;
txtpassword: TEdit;
Image1: TImage;
Label3: TLabel;
Button1: TButton;
procedure BitBtn1Click(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure FormShow(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
public
end;
var
Form1_Form_Login_Principal: TForm1_Form_Login_Principal;
implementation
uses tablas, principal, administraciondesistemas, Adm_accesos_y_clausuras,
esperar, cambiar_contrasena;
{$R *.dfm}
procedure TForm1_Form_Login_Principal.BitBtn1Click(Sender: TObject);
begin
if (txtusuario.Text='') or (txtpassword.Text='') then
begin
ShowMessage('Usuario y/o Contraseña Incorrecta');
end
else
if (txtusuario.Text <>'') and (txtpassword.Text<>'') then
begin
form_tablas.queryiniciarsession.SQL.Clear;
form_tablas.queryiniciarsession.SQL.add('select * from Usuarios where Usuario =:usu');
form_tablas.queryiniciarsession.Parameters.ParamByName('usu').Value := txtusuario.Text;
form_tablas.queryiniciarsession.Open;
if (txtpassword.Text = form_tablas.queryiniciarsession.Fieldbyname('Password').Asstring) then
begin
ShowMessage('Bienvenido(a) ' + form_tablas.queryiniciarsession.Fieldbyname('Nombre_Completo').Asstring);
formPrincipal.LabeNombredelUsuario.Caption := form_tablas.queryiniciarsession.Fieldbyname('Nombre_Completo').Asstring;
txtpassword.Text := '';
if form_tablas.queryiniciarsession.Fieldbyname('CambioProximaSession').Asstring <> 'Si' then
begin
formPrincipal.Show;
Form1_Form_Login_Principal.Visible:= false;
end
else
begin
showmessage('Debes cambiar tu contraseña');
form_cambiar_contrasena.show
end
end
else
begin
ShowMessage('Usuario y/o Contraseña Incorrecta');
end
end;
end;
procedure TForm1_Form_Login_Principal.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Application.Terminate
end;
procedure TForm1_Form_Login_Principal.FormShow(Sender: TObject);
begin
txtusuario.SetFocus;
end;
procedure TForm1_Form_Login_Principal.Button1Click(Sender: TObject);
var
i:integer;
F:TForm;
begin
for i := 0 to (Application.ComponentCount - 1) do begin
if (Application.Components[i] is TForm) then begin
F := TForm(Application.Components[i]);
if (F <> Self) then begin
F.Close;
end;
end;
end;
end;
end.
Ademas de este formulario, este llama al formulario principal y en este es donde tengo en un menú la opción de cerrar sesión, así como también tengo los botones para abrir los demás formularios..
Código Delphi
[-]
unit principal;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls, Menus, Buttons, jpeg;
type
TformPrincipal = class(TForm)
MainMenu1: TMainMenu;
Panel1: TPanel;
LabeNombredelUsuario: TLabel;
Label1: TLabel;
btnsalir: TBitBtn;
MiCuenta1: TMenuItem;
CerrarSession1: TMenuItem;
CambiarContrasea1: TMenuItem;
SalirdelSistema1: TMenuItem;
Panel2: TPanel;
Panel3: TPanel;
btnModuloAuditoriaTi: TBitBtn;
BtnModuloAuditoriaFinanciera: TBitBtn;
Image1: TImage;
Image2: TImage;
Reportes1: TMenuItem;
Reporteporactividades1: TMenuItem;
ReportedeActividadesrealizadasporaplicacin1: TMenuItem;
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure SalirdelSistema1Click(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure Reporteporactividades1Click(Sender: TObject);
procedure btnmodulodereunionesClick(Sender: TObject);
procedure btnrutinasClick(Sender: TObject);
procedure CerrarSession1Click(Sender: TObject);
procedure CambiarContrasea1Click(Sender: TObject);
procedure btnModuloAuditoriaTiClick(Sender: TObject);
procedure cerrarlosformularios();
procedure Button1Click(Sender: TObject);
private
public
end;
var
formPrincipal: TformPrincipal;
implementation
uses ModuloAccesosyClausuras, soporte_auditores,
Adm_accesos_y_clausuras_opc, Reporte_ACTIVIDADES_REALIZADAS,
procedimientos, ins_procesos, Reporte_de_actividades_por_aplicacion,
Seguimientos, Reuniones, RutinasTI, Form_Login_Principal,
cambiar_contrasena, usuarios, modulo_auditoriaTI;
{$R *.dfm}
procedure TformPrincipal.cerrarlosformularios();
var
i:integer;
F:TForm;
begin
for i := 0 to (Application.ComponentCount - 1) do begin
if (Application.Components[i] is TForm) then begin
F := TForm(Application.Components[i]);
if (F <> Self) then begin
F.Close;
end;
end;
end;
end;
procedure TformPrincipal.FormClose(Sender: TObject;
var Action: TCloseAction);
begin
Application.Terminate
end;
procedure TformPrincipal.SalirdelSistema1Click(Sender: TObject);
begin
Application.Terminate;
end;
procedure TformPrincipal.FormShow(Sender: TObject);
begin
formPrincipal.WindowState := wsMaximized;
Form_Adm_accesos_y_clausuras_opc.pasar_fechadeedit_a_timer();
end;
procedure TformPrincipal.Reporteporactividades1Click(Sender: TObject);
begin
Form_Reporte_ACTIVIDADES_REALIZADAS.Fechadesde.Date:= strtodate(datetostr (date));
Form_Reporte_ACTIVIDADES_REALIZADAS.Fechahasta.Date:= strtodate(datetostr (date));
Form_Reporte_ACTIVIDADES_REALIZADAS.show
end;
procedure TformPrincipal.btnmodulodereunionesClick(Sender: TObject);
begin
Form_Reuniones.show
end;
procedure TformPrincipal.btnrutinasClick(Sender: TObject);
begin
Form_RutinasTI.show;
Form_RutinasTI.reiniciar;
end;
procedure TformPrincipal.CerrarSession1Click(Sender: TObject);
begin
if MessageDlg('¿Desea Cerrar la Sesión?', mtInformation, [mbyes, mbno], 0) = mryes then
begin
cerrarlosformularios;
ShowMessage('Se cerraron todos los formularios');
formPrincipal.hide;
Form1_Form_Login_Principal.Show;
Form1_Form_Login_Principal.txtusuario.Clear;
Form1_Form_Login_Principal.txtpassword.Clear;
ShowMessage('Sesión Cerrada');
end
end;
procedure TformPrincipal.CambiarContrasea1Click(Sender: TObject);
begin
Form_cambiar_contrasena.show;
Form_cambiar_contrasena.txtpassword.Clear;
Form_cambiar_contrasena.NewContrasena.Clear;
Form_cambiar_contrasena.confirmcontrasena.Clear;
end;
procedure TformPrincipal.btnModuloAuditoriaTiClick(Sender: TObject);
begin
Form_modulo_auditoriaTI.show
end;
procedure TformPrincipal.Button1Click(Sender: TObject);
var
i:integer;
F:TForm;
begin
for i := 0 to (Application.ComponentCount - 1) do begin
if (Application.Components[i] is TForm) then begin
F := TForm(Application.Components[i]);
if (F <> Self) then begin
F.Close;
end;
end;
end;
end;
end.
podrías dame una mano