Ir para conteúdo
Fórum Script Brasil
  • 0

Abertura De Form


Marcos-rj

Pergunta

4 respostass a esta questão

Posts Recomendados

  • 0
Marcos-rj, a diferença básica é que abrindo o form no modo modal, você não consegue acessar outra janela que esteja embaixo dela na sua aplicação - assim como ocorre com as caixas de diálogos padrão (que são modais). você tem que fechar esta janela para acessar outra. Não dá para pular de uma para a outra.
Link para o comentário
Compartilhar em outros sites

  • 0

Certo, tambem notei uma coisa, quando eu uso o modal chamo assim:

  Application.CreateForm(TFCadPF, FCadPF);
  FCadPF.ShowModal;
  FreeAndNil(FCadPF)

Mas seu eu usar assim mas sem ser ShowModal o forma abre e fecha em seguida!

por que? como liberar ele da memoria usando Show?

Link para o comentário
Compartilhar em outros sites

  • 0
  Application.CreateForm(TFCadPF, FCadPF);
  FCadPF.ShowModal;
  FreeAndNil(FCadPF)
Mas seu eu usar assim mas sem ser ShowModal o forma abre e fecha em seguida! por que?
É que minha resposta anterior não está 100%. Quando você usa ShowModal, a janela é mostrada e "fica num loop" até que você a feche (close) ou atribua um valor a ModalResult. Só então o fluxo do programa continua a ser executado a partir da linha posterior ao ShowModal. Já quando você utiliza simplesmente Show, a janela é apresentada e o fluxo do programa não é desviado para a mesma (não tem o tal loop); Assim a linha seguinte é logo executada - por isso seu form abre e fecha.
como liberar ele da memoria usando Show?
Se cada vez que você fechar a janela você quizer que ela seja eliminada, então você pode utilizar o evento OnClose:
procedure TForm4.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  Action := caFree;
end;
Com esta ação ao chamar o procedimento Close ou clicar no X superior, a janela será eliminada da memória. Só que a variável permanecerá apontando para um endereço, agora, não mais válido. Então, se você utilizar apenas a variável definida na unit do form para mostrá-lo, acrescente isto ao evento OnDestroy:
procedure TForm4.FormDestroy(Sender: TObject);
begin
  Form4 := Nil;
end;
Se ouver alguma possibilidade de você reutilizar a janela, ou seja, apenas fechá-la mas não eliminá-la, então talvez o que deva ser modificado é a forma de criação da mesma:
procedure TForm1.Button8Click(Sender: TObject);
begin
  if not Assigned(Form4) then
    Form4 := TForm4.Create(Self);
  Form4.Show;
end;

Assim, a janela será criada apenas uma vez. Nas demais chamadas a mesma será apenas apresentada. Este caso servirá igualmente para esta situação e a anterior - sem risco de erros de acesso a memória.

Acho que é isto

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...