Forms em Delphi
Bom dia.
Estou criando uma aplicação no Delphi Seattle. Nessa aplicação tenho uma tela inicial onde é feito o login e direcionado o usuário para a tela principal do sistema, onde tenho um menu lateral com alguns ícones (na esquerda) e um painel na direita, onde serão carregados outros forms de acordo com o ícone selecionado.
O problema é que sempre que clico em um ícone, um form é carregado em cima do outro nesse painel. Eu tenho um botão de logout, que fecha os forms abertos, porém ele só fecha um dos forms, quando eu logo novamente, ainda existem forms abertos.
Eu gostaria de, a cada vez que clicar em um ícone do menu lateral, o form carregado no painel fosse substituído por outro correspondente ao ícone. Tentei várias formas, porém sem sucesso :(
Acredito que o problema do logout seria resolvido assim que conseguir 'substituir' os forms ao clicar nos ícones.
Desde já, agradeço a todos!
Estou criando uma aplicação no Delphi Seattle. Nessa aplicação tenho uma tela inicial onde é feito o login e direcionado o usuário para a tela principal do sistema, onde tenho um menu lateral com alguns ícones (na esquerda) e um painel na direita, onde serão carregados outros forms de acordo com o ícone selecionado.
O problema é que sempre que clico em um ícone, um form é carregado em cima do outro nesse painel. Eu tenho um botão de logout, que fecha os forms abertos, porém ele só fecha um dos forms, quando eu logo novamente, ainda existem forms abertos.
Eu gostaria de, a cada vez que clicar em um ícone do menu lateral, o form carregado no painel fosse substituído por outro correspondente ao ícone. Tentei várias formas, porém sem sucesso :(
Acredito que o problema do logout seria resolvido assim que conseguir 'substituir' os forms ao clicar nos ícones.
Desde já, agradeço a todos!
Bruno Guimarães
Curtidas 0
Respostas
Marcos Cunha
10/03/2017
Olá Bruno,
Não sei se é a forma mais fácil, mas ao meu ver, no evento OnClick do botão de atalho você tem que fazer um busca nos forms e ver se tem algum aberto, se tiver você da o comando close neles, nesse tópico fala como que faz pra ver se o form está aberto.
https://www.devmedia.com.br/dicas-saber-se-um-form-esta-aberto-ou-nao/1576
Não sei se é a forma mais fácil, mas ao meu ver, no evento OnClick do botão de atalho você tem que fazer um busca nos forms e ver se tem algum aberto, se tiver você da o comando close neles, nesse tópico fala como que faz pra ver se o form está aberto.
https://www.devmedia.com.br/dicas-saber-se-um-form-esta-aberto-ou-nao/1576
GOSTEI 0
Alberto
10/03/2017
Vou te passar um esquema generico:
Voce precisa só mudar o tag de cada botao
com numeros sequenciais e para todos os botoes
associa o evento onclick a procedure botaoclick
Voce precisa só mudar o tag de cada botao
com numeros sequenciais e para todos os botoes
associa o evento onclick a procedure botaoclick
Var F:TForm;
implementation
{$R *.dfm}
Uses NomeDoForm1, NomeDoForm2, NomeDoForm3;
procedure TFormPrincipal.BotaoClick(Sender: TObject);
Var n:Integer;
begin
n := (Sender as TButton).Tag; // (assumindo que seu botao é da classe TButton)
if Assigned( F ) then Begin
F.Free;
F.Destroy;
End;
case n of
1: F := TNomeDoForm1.Create( Panel1 );
2: F := TNomeDoForm2.Create( Panel1 );
3: F := TNomeDoForm3.Create( Panel1 );
end;
F.Show
end;
GOSTEI 0
Bruno Guimarães
10/03/2017
Bom dia! Desculpe pela demora para dar retorno. A resposta do Beto não funcionou e a do Marcos também não, porém, o link enviado pelo Marcos me ajudou a solucionar o problema, ao invés de verificar se o form = nil e depois setá-lo como nil, verifiquei se era diferente de nil, se sim, então fechei ele, senão, não fiz nada.
Ainda estou começando a aprender a linguagem, então não sei se minhas rotinas de create, close, free, destroy etc estão da maneira mais adequada, porém por enquanto está funcionando! :p
Obrigado a todos.
Ainda estou começando a aprender a linguagem, então não sei se minhas rotinas de create, close, free, destroy etc estão da maneira mais adequada, porém por enquanto está funcionando! :p
Obrigado a todos.
GOSTEI 0
Alberto
10/03/2017
O exemplo que eu dei era só um exemplo do qual você precisaria adaptar
a realidade da sua aplicação, tais como, mudar o nome dos formularios,
verificar a classe do botao, declarar a procedure corretamente, etc.
a realidade da sua aplicação, tais como, mudar o nome dos formularios,
verificar a classe do botao, declarar a procedure corretamente, etc.
GOSTEI 0