Fechar e abrir formulários criados em tempo de execução

Delphi

25/10/2004

Bom pessoal,

hoje (25/10/2004) foi minha pré-apresentação de projeto final.

Tenho algumas exigências mas tem uma que preciso de ajuda.
Meus formulários são abertos pelo menu ou por uma barra vertical localizada na parte
esquerda da tela (Barra do Outlook).
Quando clico em uma opção a tela é aberta da seguinte forma, por exemplo:

Application.CreateForm(TFormContatos, FormContatos);
formcontatos.ShowModal;
FormContatos.Destroy;

A exigência é a seguinte: se o usuário quiser ativar uma outra tela ele poderá abrir a
tela desejada. A primeira precisa fechar automaticamente e a tela requisitada será aberta.

Primeiro problema é como a tela está em showmodal não consigo ter acesso ao restante dos menus e da barra vertical.
Segundo problema como eu posso saber qual é a tela que está aberta para poder fechar.

Quem puder ajudar !!!

Valeu a força !!!

JR.


Jrjoliv2003

Jrjoliv2003

Curtidas 0

Respostas

Gilvanj

Gilvanj

25/10/2004

> Primeiro problema é como a tela está em showmodal não consigo ter
> acesso ao restante dos menus e da barra vertical.
Por que vc não usa o método Show, ao invés de ShowModal ?

> Segundo problema como eu posso saber qual é a tela que está aberta > para poder fechar.
Vc pode acessar as forms ativas da aplicação com o objeto Screen, através da propriedade Forms, que é uma array com todas as telas da aplicação


GOSTEI 0
Jrjoliv2003

Jrjoliv2003

25/10/2004

Em relação ao primeiro problema, eu teste colocar somente show mas o form não abriu.


Vc teria um exemplo em relação ao segundo problema.

Valeu a força !!!

JR.


GOSTEI 0
Jrjoliv2003

Jrjoliv2003

25/10/2004

Meus formulários são abertos pelo menu ou por uma barra vertical localizada na parte
esquerda da tela (Barra do Outlook).
Quando clico em uma opção a tela é aberta da seguinte forma, por exemplo:

Application.CreateForm(TFormContatos, FormContatos);
formcontatos.ShowModal;
FormContatos.Destroy;

gostaria que se o usuário quiser ativar uma outra tela ele poderá abrir a
tela desejada. A primeira precisa fechar automaticamente e a tela requisitada será aberta.

Primeiro problema é como a tela está em showmodal não consigo ter acesso ao restante dos menus e da barra vertical.
Segundo problema como eu posso saber qual é a tela que está aberta para poder fechar.

Quem puder ajudar !!!

Valeu a força !!!

JR.


GOSTEI 0
Paulo_amorim

Paulo_amorim

25/10/2004

Olá

Seus formulários não aparecem com o comando Show pois vc os destrói logo depois

:idea: Não use Form.Destroy! Use Form.Free ou Form.Release ao invés

Para consertar isso, coloque no OnClose do teu form
Action := caFree;


Para fechar os abertos, na chamada do teu form faça:

for i := 0 to Screen.CustomFormCount-1 do
begin
  { O Form principal fica aberto, né!!! }
  if Screen.CustomForms[i] <> Application.MainForm then
     Screen.CustomForms[i].Close;
end;
MeuForm := TMeuform.Create(Self);
MeuForm.Show;


Esse negócio de usar a variável TScreen eu não conhecia, aprendi agora...então qualquer coisa posta ae que a gente conserta!

Espero que ajude
Até+


GOSTEI 0
Jrjoliv2003

Jrjoliv2003

25/10/2004

Essa linha Screen.CustomFormCount verifica a qunatidade forms abertos é isso? Ordem dos forms abertos?


Valeu a força!!!

JR.


GOSTEI 0
Paulo_amorim

Paulo_amorim

25/10/2004

Essa linha Screen.CustomFormCount verifica a qunatidade forms abertos é isso? Ordem dos forms abertos?


Olá

Essa linha eh uma repetição para fechar todos os forms abertos

Até+


GOSTEI 0
Jrjoliv2003

Jrjoliv2003

25/10/2004

Resumindo ficou assim:

form principal com a propriedade FormStyle = fsMDIForm
os outros forms com a propriedade FormStyle = fsMDIChild

Para abrir o form:
Application.CreateForm(TForm2, Form2);
form2.show;

Para liberar o form:
evento on close => Action:= caFree;

Procurar e fechar os forms aberto:
procedure TForm1.fecharforms;
var
i:integer;
begin
for i := 0 to Screen.CustomFormCount-1 do
if Screen.CustomForms[i] Application.MainForm then
Screen.CustomForms[i].Close;
end;


Valeu a força!!!

JR.


GOSTEI 0
Jrjoliv2003

Jrjoliv2003

25/10/2004

Nem tudo saiu como esperava. A resposta acima foi um teste que fiz em um projeto de teste.
No meu projeto está acontecendo alguns probleminhas.

quando o projeto abre aparece uma tela de splash (mainform);
a seguir uma tela de login de usuário;
após o login a tela principal (está como fsMDIForm);
quando clico em uma opção para ativar uma tela, aparece esse erro:

´Cannot create form. No MDI forms are currently active.´

Não entendo. Não é possível criar o form pq o MDIForm não está ativo. É isso?

Valeu a força!!!

JR.


GOSTEI 0
Jrjoliv2003

Jrjoliv2003

25/10/2004

Nem tudo saiu como esperava. A resposta acima foi um teste que fiz em um projeto de teste.
No meu projeto está acontecendo alguns probleminhas.

quando o projeto abre aparece uma tela de splash (mainform);
a seguir uma tela de login de usuário;
após o login a tela principal (está como fsMDIForm);
quando clico em uma opção para ativar uma tela, aparece esse erro:

´Cannot create form. No MDI forms are currently active.´

Não entendo. Não é possível criar o form pq o MDIForm não está ativo. É isso?

Valeu a força!!!

JR.


GOSTEI 0
Jrjoliv2003

Jrjoliv2003

25/10/2004

Nem tudo saiu como esperava. A resposta acima foi um teste que fiz em um projeto de teste.
No meu projeto está acontecendo alguns probleminhas.

quando o projeto abre aparece uma tela de splash (mainform);
a seguir uma tela de login de usuário;
após o login a tela principal (está como fsMDIForm);
quando clico em uma opção para ativar uma tela, aparece esse erro:

´Cannot create form. No MDI forms are currently active.´

Não entendo. Não é possível criar o form pq o MDIForm não está ativo. É isso?

Valeu a força!!!

JR.


GOSTEI 0
Jrjoliv2003

Jrjoliv2003

25/10/2004

Nem tudo saiu como esperava. A resposta acima foi um teste que fiz em um projeto de teste.
No meu projeto está acontecendo alguns probleminhas.

quando o projeto abre aparece uma tela de splash (mainform);
a seguir uma tela de login de usuário;
após o login a tela principal (está como fsMDIForm);
quando clico em uma opção para ativar uma tela, aparece esse erro:

´Cannot create form. No MDI forms are currently active.´

Não entendo. Não é possível criar o form pq o MDIForm não está ativo. É isso?

Valeu a força!!!

JR.


GOSTEI 0
Jrjoliv2003

Jrjoliv2003

25/10/2004

Pessoal

Obtive alguns progressos na minha dúvida em trabalhar com form MDI.


Coloquei o formPrincipal como MainForm.
Coloquei os outros forms como MDIChild.
O form de splash coloquei como formsplah.show na inicialização.
Logo após é aberto o formlogin como showmodal.

Só que tenho dois problemas:

1 - Os form que precisam ser criados na inicialização estão aparecendo junto com a tela de login;
Trabalho com form pai e filho.

2 - Abro um form normalmente. Apartir da segunda vez em diante o form sempre aparece mais abaixo e a esquerda.
Como fixar o form em uma posição.

Valeu a força!!!

JR.


GOSTEI 0
POSTAR