Formularios MDI

Delphi

05/08/2005

bom pessoal é o seguinte...eu gostaria que voces se possivel esclarecesse uma duvida minha a respeito de formularios mdi, pois ate hoje eu nao entendi muito bem a logica do negocio. bom é o seguinte, eu tenho um Form chamado FormPrincipal nesse form eu coloquei um botao e sua propriedade formstyle esta setada como fsmdiForm, e eu tenho um outro form chamado FormClientes e sua propriedade formstyle esta setada como fsMdiChield, no botao do FormPrincipal eu coloquei o Codigo FormClientes.Show; mas ocorre que quando eu inicio o aplicativo o FormClientes ja aparece aberto sem eu ter clicado no botao pq isso acontece?? espero que voces possam me dar uma força sobre como trabalhar com formularios mdi...valeu galera. abraço a todos!


L3gion4rio

L3gion4rio

Curtidas 0

Respostas

Rjun

Rjun

05/08/2005

Isso acontece pq ao carregar a aplicação os forms ja esta criados. Você precisa tirar os forms MDI do autocreate. Com seu projeto aberto, vá em Project->Options. Selecione a aba Forms. Mova os forms mdiChild para AvailableForms.

Para chamar seus forms, vc deve criá-los em runtime para depois exibi-los.

Form1 := TForm1.Create(Self);
Form1.Show;


Não esqueça de destruir os forms quando você os fechar.


GOSTEI 0
L3gion4rio

L3gion4rio

05/08/2005

valeu RJun. obrigado pela dica. abração pra ti cara.


GOSTEI 0
Mordred

Mordred

05/08/2005

Criei um form MDI com um menu principal e depois criei um form MDI child pra ser chamado a partir do menu principal. Até aí tudo bem, criei o item no menu e adicionei o seguinte código:
  frmCadFunc:=TfrmCadFunc.Create(Self);
  frmCadFunc.Show;


OK, o programa compila bonitinho, mas na hora em que eu clico no menu pra abrir o form, dá um erro de Access Violation na seguinte linha:
      frmCadFunc.btnNovo.Enabled     :=True;

Esta linha está dentro da procedure InicializaBotoes que é chamada no evento OnShow do form frmCadFunc. Enquanto depurava, notei que o valor da variável frmCadFunc estava nulo (nil).

O que eu fiz de errado? :?


GOSTEI 0
Bico

Bico

05/08/2005

Bom dia colega.

Troque a linha
frmCadFunc.btnNovo.Enabled     :=True;

por
btnNovo.Enabled     :=True;

ou
Self.btnNovo.Enabled     :=True;


Atenciosamente,
Fernando.


GOSTEI 0
Mordred

Mordred

05/08/2005

Valeu pela dica Bico, mas infelizmente não deu certo aqui, deu erro de Undeclared Identifier na linha que eu alterei...
Tenho certeza de que tem alguma coisa a ver com a criação do Form, mas não faço idéia do que seja. Porque tenho certeza? Bom, o form estava funcionando antes de eu passar ele pra MDI Child...

Será o Benedito?


GOSTEI 0
Bico

Bico

05/08/2005

Envia os fontes para mim.
Dou uma olhada e retorno em seguida.


GOSTEI 0
Emerson Nascimento

Emerson Nascimento

05/08/2005

exclua a linha
frmCadFunc.Show; // o form mdichild é exibido automaticamente

e na sua procedure InicializaBotoes, deixe apenas:
btnNovo.Enabled := True;


GOSTEI 0
Mordred

Mordred

05/08/2005

Valeu pelas dicas aí pessoal, mas já resolvi meu problema usando a seguinte linha de comando na hora de criar o form:
  If Application.FindComponent(´frmCadFunc´)=Nil Then
    Begin
      Application.CreateForm(TfrmCadFunc,frmCadFunc);
      frmCadFunc.Show;
    End;
  frmCadFunc.SetFocus;


Agora meu problema é o seguinte, meu form principal tinha um panel com um efeito de baixo relevo (só pra ficar mais bonitinho) e eu descobri que o form MDI Child não aparecia pq ficava encoberto pelo panel. Exclui o panel e tentei usar outros componentes (TBevel, TImage) mas eles simplesmente desaparecem quando executo a aplicação.

O que eu faço pra incrementar o visual do form MDI principal? É possível usar alguma coisa?


GOSTEI 0
POSTAR