Fórum Forms em Delphi #576773

10/03/2017

0

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!
Bruno Guimarães

Bruno Guimarães

Responder

Posts

10/03/2017

Marcos Cunha

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
Responder

Gostei + 0

10/03/2017

Alberto

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

  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;

Responder

Gostei + 0

13/03/2017

Bruno Guimarães

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.
Responder

Gostei + 0

13/03/2017

Alberto

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.
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar