Formularios MDI
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
Curtidas 0
Respostas
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.
Não esqueça de destruir os forms quando você os fechar.
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
05/08/2005
valeu RJun. obrigado pela dica. abração pra ti cara.
GOSTEI 0
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:
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:
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? :?
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
05/08/2005
Bom dia colega.
Troque a linha
por
ou
Atenciosamente,
Fernando.
Troque a linha
frmCadFunc.btnNovo.Enabled :=True;
por
btnNovo.Enabled :=True;
ou
Self.btnNovo.Enabled :=True;
Atenciosamente,
Fernando.
GOSTEI 0
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?
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
05/08/2005
Envia os fontes para mim.
Dou uma olhada e retorno em seguida.
Dou uma olhada e retorno em seguida.
GOSTEI 0
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;
frmCadFunc.Show; // o form mdichild é exibido automaticamente
e na sua procedure InicializaBotoes, deixe apenas:
btnNovo.Enabled := True;
GOSTEI 0
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:
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?
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