Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Cerrar varios formularios abiertos (https://www.clubdelphi.com/foros/showthread.php?t=87599)

jeremiselxi 29-01-2015 13:30:02

Cerrar varios formularios abiertos
 
Buenos días.

Hoy estaba realizando la opción cerrar sesión en una aplicación con la finalidad de poder cerrar todas las ventanas y dejar solo la del formulario donde realizan el login, en este sentido, ¿existe alguna propiedad o algo que tengan todos los formularios en común que pueda cerrar varios formularios al mismo tiempo y dejar solo el que quiero?

Saludos y muchas bendiciones para todos.

Neftali [Germán.Estévez] 29-01-2015 17:12:00

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
  // recorrer los componehtes
  for i := 0 to (Application.ComponentCount - 1) do begin
    // Nos centramos en los formularios
    if (Application.Components[i] is TForm) then begin
      F := TForm(Application.Components[i]);
      // No es este?
      if (F <> Self) then begin
        F.Close;
      end;
    end;
  end;
end;

jeremiselxi 29-01-2015 19:24:32

Cita:

Empezado por Neftali (Mensaje 488262)
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
  // recorrer los componehtes
  for i := 0 to (Application.ComponentCount - 1) do begin
    // Nos centramos en los formularios
    if (Application.Components[i] is TForm) then begin
      F := TForm(Application.Components[i]);
      // No es este?
      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
    { Private declarations }
  public
    { Public declarations }
  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
//Para cerrar el delphi
Application.Terminate
end;

procedure TForm1_Form_Login_Principal.FormShow(Sender: TObject);
begin
txtusuario.SetFocus;


end;

//agregué este botón para verificar si se cierran todos los formularios menos este.
procedure TForm1_Form_Login_Principal.Button1Click(Sender: TObject);
var
  i:integer;
  F:TForm;
begin
  // recorrer los componehtes
  for i := 0 to (Application.ComponentCount - 1) do begin
    // Nos centramos en los formularios
    if (Application.Components[i] is TForm) then begin
      F := TForm(Application.Components[i]);
      // No es este?
      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
    { Private declarations }
  public
    { Public declarations }
  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}

//creé este procedimiento para verificar si se cierran todos los formularios menos este 
procedure TformPrincipal.cerrarlosformularios();
var
  i:integer;
  F:TForm;
begin
  // recorrer los componehtes
  for i := 0 to (Application.ComponentCount - 1) do begin
    // Nos centramos en los formularios
    if (Application.Components[i] is TForm) then begin
      F := TForm(Application.Components[i]);
      // No es este?
      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
    //llamo al procedimiento cerrarlosformularios;
    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
  // recorrer los componehtes
  for i := 0 to (Application.ComponentCount - 1) do begin
    // Nos centramos en los formularios
    if (Application.Components[i] is TForm) then begin
      F := TForm(Application.Components[i]);
      // No es este?
      if (F <> Self) then begin
        F.Close;
      end;
    end;
  end;
end;

end.

podrías dame una mano :)

engranaje 30-01-2015 09:13:32

Creo que el problema está en:
Código Delphi [-]
procedure TformPrincipal.FormClose(Sender: TObject;   var Action: TCloseAction); 
begin 
  Application.Terminate 
end;

Si desde TForm1_Form_Login_Principal cierrras TformPrincipal, al cerrar TformPrincipal se dispara su FormClose y por tanto el Application.Terminate de modo que cierras la aplicación.

jeremiselxi 30-01-2015 13:32:07

Cita:

Empezado por engranaje (Mensaje 488283)
Creo que el problema está en:
Código Delphi [-]
procedure TformPrincipal.FormClose(Sender: TObject;   var Action: TCloseAction); 
begin 
  Application.Terminate 
end;

Si desde TForm1_Form_Login_Principal cierrras TformPrincipal, al cerrar TformPrincipal se dispara su FormClose y por tanto el Application.Terminate de modo que cierras la aplicación.

Amigo engranaje en Republica Dominicana se le dice esta frase cuando solucionan un problema, así que te diré esta frase: Engranaje tu eres un mounstruo :).

Muchísimas gracias eso era el problema.

Saludos y bendiciones a todos.


La franja horaria es GMT +2. Ahora son las 18:37:10.

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