Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Valdiney F. Lima

Fechar um form... só que o nome dele ta em uma string

Recommended Posts

Seguinte

 

Eu estou guardando em uma string -> formAberto o nome de um formulário que esta aberto em uma operação...

 

exemplo:

 

VarformAberto : string;beginformAberto := 'frmDados';end;

Pronto, agora eu tenho uma VAR -> formAberto com o nome do form que eu preciso fechar...

 

 

Como eu faço pra fechar esse form?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pq você não altera o tipo de veriavel do formAberto para TForm, podendo ter o controle normal sobre ele, tipo formAberto.Free;

Bom, não deu certo...

 

É o seguinte, este form que eu quero fechar é criando dentro de uma scrollbox...

 

Quando eu coloquei formAberto.Free; não fechou... Tentei formAberto.Close; e nada...

 

 

O que pode ser?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mas em qual momento é passo o form para o formAberto ? No caso como você efetua a criação do form ?

tenho um botao que cria o form dentro de um scrollbox
// Abro o form	frmInformacoesDeRegistro := tfrmInformacoesDeRegistro.Create(application);	frmInformacoesDeRegistro.Parent := frmDados.ScrollBox1;	frmInformacoesDeRegistro.Show;	// seto a variavel do tipo  TForm com o nome do form aberto	frmPrincipal.formAberto := frmInformacoesDeRegistro;
Com o código acima eu crio o form e seto a variavel.Agora eu tenho um outro botão... Esse botao deve fechar esse form.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tente da seguinte form:

 

Para criar:

 

frmPrincipal.formAberto:=TfrmInformacoesDeRegistro.Create(application);frmPrincipal.formAberto.Parent := frmDados.ScrollBox1;frmPrincipal.formAberto.Show;

 

Para Fechar:

 

frmPrincipal.formAberto.Free;

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tente da seguinte form:

 

Para criar:

 

frmPrincipal.formAberto:=TfrmInformacoesDeRegistro.Create(application);frmPrincipal.formAberto.Parent := frmDados.ScrollBox1;frmPrincipal.formAberto.Show;

Para Fechar:

 

frmPrincipal.formAberto.Free;

Mas foi exatamente assim que fiz...

 

dai gerou esse erro quando fui fechar:

Imagem Postada

 

 

:/

Compartilhar este post


Link para o post
Compartilhar em outros sites

Por acaso você clicou 2x em abrir ou 2x em Fechar? Coloque exatamente o código do seu botão Abrir e do Fechar. Eu testei aqui exatamente com o código que o Marcio Theis postou e funcionou certinho ;)

Compartilhar este post


Link para o post
Compartilhar em outros sites

tem uma jogada que fazem o (sender as <tipo>) que acho que pode dar cero, mas não lembto como faz......Sei que é usado na dica para limpar todos os edits de um form. Eu acho que com isso pode dar certo...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Por acaso você clicou 2x em abrir ou 2x em Fechar? Coloque exatamente o código do seu botão Abrir e do Fechar. Eu testei aqui exatamente com o código que o Marcio Theis postou e funcionou certinho ;)

Segue abaixo um procedimento que eu fiz para abrir os forms que no caso são dois:
procedure menuDados( botao: string );begin  if botao = 'informacoesDeRegistro' then  begin	// Fecha o form aberto	frmPrincipal.menuDadosSelecionado.Free;	// Envia para a variavel, o form aberto	frmPrincipal.menuDadosSelecionado := frmInformacoesDeRegistro;	// efetua a ação do botão	frmInformacoesDeRegistro := tfrmInformacoesDeRegistro.Create(application);	frmInformacoesDeRegistro.Parent := frmDados.ScrollBox1;	frmInformacoesDeRegistro.Show;	// desabilita a seleção dos outros botões	frmDados.Image1.Picture.LoadFromFile('imagens/botoes/informacoesDeRegistro_on.bmp');	frmDados.Image2.Picture.LoadFromFile('imagens/botoes/gerenciamentoDeContas_off.bmp');  end;  if botao = 'gerenciamentoDeContas' then  begin	// Fecha o form aberto	frmPrincipal.menuDadosSelecionado.Free;	// Envia para a variavel, o form aberto	frmPrincipal.menuDadosSelecionado := frmGerenciamentoDeContas;	// efetua a ação do botão	frmGerenciamentoDeContas := tGerenciamentoDeContas.Create(application);	frmGerenciamentoDeContas.Parent := frmDados.ScrollBox1;	frmGerenciamentoDeContas.Show;	// desabilita a seleção dos outros botões	frmDados.Image1.Picture.LoadFromFile('imagens/botoes/informacoesDeRegistro_off.bmp');	frmDados.Image2.Picture.LoadFromFile('imagens/botoes/gerenciamentoDeContas_on.bmp');  end;end;
Meu erro ta ai no meu deste bolo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

O erro pode estar no .Free inicial que você dá, pode ser que não tenha nenhum form carregado na variavel, gerando assim o erro, o que poderia fazer é um teste antes, tipo:

 

if frmPrincipal.menuDadosSelecionado <> nil then	frmPrincipal.menuDadosSelecionado.Free;
Ficando:

 

procedure menuDados( botao: string );beginif botao = 'informacoesDeRegistro' then	begin	// Fecha o form aberto	if frmPrincipal.menuDadosSelecionado <> nil then		frmPrincipal.menuDadosSelecionado.Free;	// efetua a ação do botão	frmPrincipal.menuDadosSelecionado:=TfrmInformacoesDeRegistro.Create(application);	frmPrincipal.menuDadosSelecionado.Parent := frmDados.ScrollBox1;	frmPrincipal.menuDadosSelecionado.Show;	// desabilita a seleção dos outros botões	frmDados.Image1.Picture.LoadFromFile('imagens/botoes/informacoesDeRegistro_on.bmp');	frmDados.Image2.Picture.LoadFromFile('imagens/botoes/gerenciamentoDeContas_off.bmp');	end;if botao = 'gerenciamentoDeContas' then	begin	// Fecha o form aberto	if frmPrincipal.menuDadosSelecionado <> nil then		frmPrincipal.menuDadosSelecionado.Free;	// efetua a ação do botão	frmPrincipal.menuDadosSelecionado:=TGerenciamentoDeContas.Create(application);	frmPrincipal.menuDadosSelecionado.Parent := frmDados.ScrollBox1;	frmPrincipal.menuDadosSelecionado.Show;	// desabilita a seleção dos outros botões	frmDados.Image1.Picture.LoadFromFile('imagens/botoes/informacoesDeRegistro_off.bmp');	frmDados.Image2.Picture.LoadFromFile('imagens/botoes/gerenciamentoDeContas_on.bmp');	end;end;
Repare que alterei a forma de chamado dos forms, usando o frmPrincipal.menuDadosSelecionado para a criação...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Acho que o erro está aqui:

// Envia para a variavel, o form aberto	frmPrincipal.menuDadosSelecionado := frmInformacoesDeRegistro;	// efetua a ação do botão	frmInformacoesDeRegistro := tfrmInformacoesDeRegistro.Create(application);
Você está passando para frmPrincipal.menuDadosSelecionado o frmInformacoesDeRegistro que nem foi criado ainda (então, está passando null). Mas com o código que o Márcio colocou agora:
frmPrincipal.menuDadosSelecionado:=TfrmInformacoesDeRegistro.Create(application);
acredito que vá funcionar.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Só que agora você não apontou mais o form apra a variavel, tente...

 

 

procedure menuDados( botao: string );beginif botao = 'informacoesDeRegistro' then	begin	// Fecha o form aberto	if frmPrincipal.menuDadosSelecionado <> nil then		frmPrincipal.menuDadosSelecionado.Free;	// efetua a ação do botão	  frmInformacoesDeRegistro := TfrmInformacoesDeRegistro.Create(application);	  frmInformacoesDeRegistro.Parent := frmDados.ScrollBox1;	  frmPrincipal.menuDadosSelecionado:=frmInformacoesDeRegistro;	  frmInformacoesDeRegistro.Show;		// desabilita a seleção dos outros botões	frmDados.Image1.Picture.LoadFromFile('imagens/botoes/informacoesDeRegistro_on.bmp');	frmDados.Image2.Picture.LoadFromFile('imagens/botoes/gerenciamentoDeContas_off.bmp');	end;if botao = 'gerenciamentoDeContas' then	begin	// Fecha o form aberto	if frmPrincipal.menuDadosSelecionado <> nil then		frmPrincipal.menuDadosSelecionado.Free;	// efetua a ação do botão	  frmGerenciamentoDeContas := TfrmGerenciamentoDeContas.Create(application);	  frmGerenciamentoDeContas.Parent := frmDados.ScrollBox1;	  frmPrincipal.menuDadosSelecionado:=frmGerenciamentoDeContas;	  frmGerenciamentoDeContas.Show;	// desabilita a seleção dos outros botões	frmDados.Image1.Picture.LoadFromFile('imagens/botoes/informacoesDeRegistro_off.bmp');	frmDados.Image2.Picture.LoadFromFile('imagens/botoes/gerenciamentoDeContas_on.bmp');	end;end;

No caso somente foi adicionado para depois do .Parent atribuir o form para a variavel...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Só que agora você não apontou mais o form apra a variavel, tente...

procedure menuDados( botao: string );beginif botao = 'informacoesDeRegistro' then	begin	// Fecha o form aberto	if frmPrincipal.menuDadosSelecionado <> nil then		frmPrincipal.menuDadosSelecionado.Free;	// efetua a ação do botão	  frmInformacoesDeRegistro := TfrmInformacoesDeRegistro.Create(application);	  frmInformacoesDeRegistro.Parent := frmDados.ScrollBox1;	  frmPrincipal.menuDadosSelecionado:=frmInformacoesDeRegistro;	  frmInformacoesDeRegistro.Show;		// desabilita a seleção dos outros botões	frmDados.Image1.Picture.LoadFromFile('imagens/botoes/informacoesDeRegistro_on.bmp');	frmDados.Image2.Picture.LoadFromFile('imagens/botoes/gerenciamentoDeContas_off.bmp');	end;if botao = 'gerenciamentoDeContas' then	begin	// Fecha o form aberto	if frmPrincipal.menuDadosSelecionado <> nil then		frmPrincipal.menuDadosSelecionado.Free;	// efetua a ação do botão	  frmGerenciamentoDeContas := TfrmGerenciamentoDeContas.Create(application);	  frmGerenciamentoDeContas.Parent := frmDados.ScrollBox1;	  frmPrincipal.menuDadosSelecionado:=frmGerenciamentoDeContas;	  frmGerenciamentoDeContas.Show;	// desabilita a seleção dos outros botões	frmDados.Image1.Picture.LoadFromFile('imagens/botoes/informacoesDeRegistro_off.bmp');	frmDados.Image2.Picture.LoadFromFile('imagens/botoes/gerenciamentoDeContas_on.bmp');	end;end;
No caso somente foi adicionado para depois do .Parent atribuir o form para a variavel...
Então Márcio... eu consegui aqui.Valeu mesmo cara pela atenção!Abração.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.