Marcos-rj Postado Agosto 9, 2006 Denunciar Share Postado Agosto 9, 2006 Qual a diferença para:Form.Show e Form.ShowModal ?por que usam + o Show.Modal? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Micheus Postado Agosto 9, 2006 Denunciar Share Postado Agosto 9, 2006 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. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Marcos-rj Postado Agosto 10, 2006 Autor Denunciar Share Postado Agosto 10, 2006 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? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Micheus Postado Agosto 10, 2006 Denunciar Share Postado Agosto 10, 2006 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 Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Marcos-rj Postado Agosto 10, 2006 Autor Denunciar Share Postado Agosto 10, 2006 valeu, entendi.Muito Obrigado. Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
Marcos-rj
Qual a diferença para:
Form.Show e Form.ShowModal ?
por que usam + o Show.Modal?
Link para o comentário
Compartilhar em outros sites
4 respostass a esta questão
Posts Recomendados
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.