Fórum Como fechar todos os forms abertos no aplicativo #214094
14/02/2004
0
Obrigado
Marcos :?:
Pr.mas
Curtir tópico
+ 0Posts
14/02/2004
Ltres
procedure TForm1.Button1Click(Sender: TObject); var n: integer; begin for n:=0 to Application.ComponentCount-1 do if Application.Components[n] is TForm then if not(TForm(Application.Components[n]) = Application.MainForm) then if TForm(Application.Components[n]).Showing then TForm(Application.Components[n]).Close; end; procedure TForm1.Button2Click(Sender: TObject); begin Form3.Show; Form2.Show; end;
Lembrando q se quiser tirar eles da memoria vc tem q adicionar o comando TForm(Application.Components[n]).Free no button1, e para abrir Application.CreateForm(TForm2, Form2); depois dar o show.
Gostei + 0
14/02/2004
Pr.mas
Obrigado pela dica.
Marcos
Gostei + 0
14/07/2004
Fknyght
ela so funciona se o form for criado da seguinte forma
Tem alguma maneira outra maneira de fechar os forms abertos sem ser esta.
Grato
Gostei + 0
14/07/2004
Fknyght
O código acima não esta dentro de um for porque qdo der o [b:580f86a6a4]FREE[/b:580f86a6a4] no formulário aberto, o mesmo sai da lista de componentes, causando um erro de aplicação.
Quando damos um FREE no form, temos que reeniciar a consulta deste a partir do zero. Esta função faz isso perfeitamente
Qualquer duvida tamos ai
Qualquer melhoração no código sera bem vinda :)
Gostei + 0
14/07/2004
Paulo_amorim
Se os forms forem abertos em ShowModal, pode-se tentar fazer (continuando o codigo do LTres)
TForm(Application.Components[n]).ModalResult := 1;
Espero que ajude
Até+
Gostei + 0
14/07/2004
Ltres
var
Form1: TForm1;
OutForm: TForm;
ListFormsOut: array of HWND;
implementation
{$R *.dfm}
procedure FechaFormsForaAPP;
var
n: integer;
begin
for n := 0 to Length(ListFormsOut)-1 do
begin
SendMessage(ListFormsOut[n], WM_CLOSE, 0, 0);
SendMessage(ListFormsOut[n], WM_DESTROY, 0, 0);
end;
end;
procedure CriaForm(vC: TClass; var vF: TForm);
var
n: integer;
begin
vF := TFormClass(vC).Create(nil);
if vF <> nil then
begin
n := Length(ListFormsOut);
SetLength(ListFormsOut, n+1);
ListFormsOut[n] := vF.Handle;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
CriaForm(TForm, OutForm);
OutForm.Show;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
FechaFormsForaAPP;
end;
pelo q testei funcionou blz.. se tiver duvidas manda ai
Gostei + 0
14/07/2004
Ltres
procedure CriaForm(vC: TClass; var vF: TForm); //por procedure CriaForm(vC: TFormClass; var vF: TForm);
e tb
vF := TFormClass(vC).Create(nil); //por vF := vC.Create(nil);
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)