Ir para conteúdo

POWERED BY:

Arquivado

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

Leonardo Machado Moreira

Forms MDI,,

Recommended Posts

Fala Pessoal Tudo bem...

 

Tenho uma duvida mas primeiro ...

 

 

Comeceu a programar agora com mdi, mas não sei se é uma particuláridade do MDI ou de alguma outra coisa que não sei oq é...pq quando eu tirei as propriedades mdi aconteceu do mesmo jeito ..

 

Ao abrir um formulário no delphi apenas com o código

frmForm1 := TfrmForm1.Create(Self);

ele cria o formulário e ja o abre ,, ou seja executando OnCreate e OnShow....

 

não entendo pq antes eu trabalhava apenas com forms normais utilizando showModal

frmForm1 := TfrmForm1.Create(Self);frmForm1.Caption := 'Teste';frmForm1.st_Create := 'Criando';frmForm1.ShowModal;

e desta maneira eu controlava certinho quando eu queria que ele fizesse o onShow,, apenas quando eu desse o showmodal,, ou seja eu passava as variaveis que eu fosse utilizar no onshow entre o create e o showmodal,,,

 

alguem sabe do motivo de forms mdi ,, executarem direto na instancia já abrir o form,, se isso é configuração do delphi ou algo do tipo

 

Des de já agradeço

Compartilhar este post


Link para o post
Compartilhar em outros sites

Td certo kra!bom eu naum trabalho com Aplicação MDI, entao naum posso lhe responder com tanta certeza, mas!! essa do formulario ser exibido logo apos a sua criacão, com certeza é uma caracteristica típica de MDI Applications ....no entanto, pode continuar controlando as variaveis (etc) pelo eventos onCreate e onShow... faz um teste ....no form Mdi Filho poew no evento:OnShow: ShowMessage('Mostrando form')onCreate: ShowMessage('Criando Form');bm é isso aew, peço aos colegas q trabalhm com MDI, q nos de uma força, explicando melhor a questao...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então...Já fiz isso e percebi que ele faz o seguinte ,,, ao instanciar...ele executa o create, e direto já executa o show,,, .. mesmo eu nao mandando abrir parece que ao instaciar(form := TForm.Create(Self))...... algo ja o manda abrir,,, logoele apareceShowMessage('Create')ShowMessage('Show')uma atraz da outra...Valw a atenção rodrigo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom, efetivamente o MDI Form cria e é exibido automaticamente pela aplicação... se estiver como Main Form..Uma Sugestão que lhe dou é:Saca quando você vai ver o Source do Projeto???Lá embaixo tem um Application.Create e tal...Aqui:

begin Application.Initialize; Application.CreateForm(TfrmPrincipal, frmPrincipal); Application.Run;end.

Acho que antes do Application.RUN você consegue colocar as variáveis para o MDI...Agora para MDI Child você consegue controle igual conseguia com os forms normais...

Compartilhar este post


Link para o post
Compartilhar em outros sites

vish entao me fala qual o codigo que você usar para abrir childs...meu problemas é com os childs mesmo ,, o main nao precisa disso ...eu já tentei fm_Form := Tfm_Form.Create(Self);fm_Form.Show //como eu disse acima achei desnecessário....ja tentei application.createform(tfm_form,fm_form);que tbm cria e abre junto...qual o codigo que você usou ???

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá,

 

Bem, para trabalhar com MDI eu levo em consideração o seguinte:

 

1-Uma aplicação pode ter somente 1 MDIForm, não sei porque ao certo mas só consegui fazer funcionar quando ela é o "MainForm" da aplicação.

2-Removo todos os MDIChilds do "Auto Create Forms" na options, ou vou lá no view source e deleto as linhas onde eles são criados, deixando automatico somente o MainForm (MDIForm).

3-Para criar um MDIChild eu uso a seguinte lógica:

 

CODE
if not(Assigned(frmMDIChild)) then

frmMDIChild.Create(frmMDIForm);

frmMDIChild.Show;

 

que vai fazer com que o form child seja criado somente se não tiver sido criado ainda, e vai mostrá-lo, pois assim o usuário pode navegar entre os varios MDIs sem você precisar liberar ele da memoria e sem ficar recriando ele milhares de veses na memoria. E se você tiver varios child e usar essa função em todos o usuário vai apenas pular de um para o outro sem precisar fechar o anterior.

4-dentro do mdi child eu no onClose eu coloco o código:

Action := caFree;

que vai liberar o MDI da memoria (para ele não ficar apenas minimizado quando o cara clicar no fechar)

5-O mdi child se mostra automaticamente assim que você cria ele, então se precisa setar variaveis antes dele abrir você pode setar elas no onCreate, pois ele acontece antes do onShow.

6-O MDICHild vai usar a "client area" do MDIForm, portanto você não pode ter nenhum objeto com a propriedade align := alClient no MDIForm

 

Eu nunca consegui fazer o showmodal funcionar direito com MDIChild.... mesmo porque isso fugiria um pouco da função do MDIChild que é abrir varias janelas ao mesmo tempo, pois o "Modal" não permite que você altere de janela até fechar a atual.

Uma boa ideia também é criar uma função para o código:

CODE

if not(Assigned(frmMDIChild)) then

frmMDIChild.Create(frmMDIForm);

frmMDIChild.Show;

dentro do MDIchild, algo como:

procedure TfrmMDIChild.SelfCreate;

begin

if not(Assigned(frmMDIChild)) then

frmMDIChild.Create(frmMDIForm);

frmMDIChild.Show;

end;

assim lá no MDIForm basta você dar um

frmMDIChild.selfCreate;

 

=D

Espero ter ajudado, qualquer coisa mande-me um e-mail ou posta aí, que se eu puder eu ajudo.

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.