ainda com dúvidas no MDIchild quanto ao fechalas!
Estou com dúvida sobre o código abaixo, pois o que eu gostaria que fosse feito é que ao chamar a form pela primeira vez, sendo que ao chamar a instancia de um formulário o panel com os botões no formulário principal ficasse oculto, e somente ao fechar todos os formulários o panel reapareceria.
Além disso Se a instância do formulário já existir ele dá uma advertência (Formulário aberto)
O que ocorre é que ao abrir o formulário a panel some, mas ao fechar todos os forms(instancias) ele não reaparece.
E também está dando problemas na comparação se a instancia do formulário já está aberta.
segue o código
A função foi extraída do site [url]http://www.planetadelphi.com.br/dica/7554/-como-saber-se-um-formulario-do-tipo-mdichild-ja-esta-criado.-[/url]
Formulário principal (FrmMenu)
var
FrmMenu: TFrmMenu;
Result: Boolean;
function IsChildFormExist(InstanceClass: TFormClass): Boolean;
implementation
uses UClientes;
{$R *.dfm}
function IsChildFormExist(InstanceClass: TFormClass): Boolean;
var
I : Integer;
begin
with (Application.MainForm) do
for I := 0 to MDIChildCount - 1 do
if (MDIChildren[i] is InstanceClass) then
begin
Result:= True;
Exit;
end;
Result := False;
end;
------------------------------------
Evento ao clicar no botão para abrir o formulário de clientes
procedure TFrmMenu.BitBtn1Click(Sender: TObject);
begin
if IsChildFormExist(TFrmClientes) = true then
if MessageDlg(Quer abrir o formulário assim mesmo?,MtConfirmation,
[MbOk,MbCancel],0)= 1 then
begin
FrmMenu.Panel2.Hide;
FrmClientes := TFrmClientes.Create(Self);
Cascade;
end
else
exit
else
begin
FrmMenu.Panel2.Dide;
FrmClientes := TFrmClientes.Create(Self);
Cascade;
end;
end;
------------------------------------
Evento on close no form aberto
FrmClientes := nil;
Action := caFree;
if IsChildFormExist(TFrmClientes) = false then
FrmMenu.Panel2.show
Além disso Se a instância do formulário já existir ele dá uma advertência (Formulário aberto)
O que ocorre é que ao abrir o formulário a panel some, mas ao fechar todos os forms(instancias) ele não reaparece.
E também está dando problemas na comparação se a instancia do formulário já está aberta.
segue o código
A função foi extraída do site [url]http://www.planetadelphi.com.br/dica/7554/-como-saber-se-um-formulario-do-tipo-mdichild-ja-esta-criado.-[/url]
Formulário principal (FrmMenu)
var
FrmMenu: TFrmMenu;
Result: Boolean;
function IsChildFormExist(InstanceClass: TFormClass): Boolean;
implementation
uses UClientes;
{$R *.dfm}
function IsChildFormExist(InstanceClass: TFormClass): Boolean;
var
I : Integer;
begin
with (Application.MainForm) do
for I := 0 to MDIChildCount - 1 do
if (MDIChildren[i] is InstanceClass) then
begin
Result:= True;
Exit;
end;
Result := False;
end;
------------------------------------
Evento ao clicar no botão para abrir o formulário de clientes
procedure TFrmMenu.BitBtn1Click(Sender: TObject);
begin
if IsChildFormExist(TFrmClientes) = true then
if MessageDlg(Quer abrir o formulário assim mesmo?,MtConfirmation,
[MbOk,MbCancel],0)= 1 then
begin
FrmMenu.Panel2.Hide;
FrmClientes := TFrmClientes.Create(Self);
Cascade;
end
else
exit
else
begin
FrmMenu.Panel2.Dide;
FrmClientes := TFrmClientes.Create(Self);
Cascade;
end;
end;
------------------------------------
Evento on close no form aberto
FrmClientes := nil;
Action := caFree;
if IsChildFormExist(TFrmClientes) = false then
FrmMenu.Panel2.show
Carlos
Curtidas 0
Respostas
Cauê Nishijima
31/07/2012
Cara eu não entendi direito...vê se é isso:
Você tem um Form pai, nele há um Panel com botões pra chamar os Form filhos, e quando você chamar algum Form filho, você quer que este Panel do Form pai fique oculto, e quando fechar ele reapareça...É isso?
Att.
Cauê Nishijima
Você tem um Form pai, nele há um Panel com botões pra chamar os Form filhos, e quando você chamar algum Form filho, você quer que este Panel do Form pai fique oculto, e quando fechar ele reapareça...É isso?
Att.
Cauê Nishijima
GOSTEI 0
Carlos
31/07/2012
Isso, no exemplo fiz com apenas um form, mas terão quatro forms, que poderão ter instancias, por exemplo clientes, fornecedores, etc, o panel é oculto e é perguntado se deseja abrir novamente o formulário quando este já estiver aberto, caso sim abrirá normalmente. Ao primeiro formulário aberto o panel com os botões deverá ser ocultado, e só quando todos os forms forém fechados, exceto o pai, fará com que o panel reapareça com os botões.
GOSTEI 0
Cauê Nishijima
31/07/2012
Mas cara, após abrir o primeiro Form filho o Panel ficará oculto, como serao chamados os próximos Forms filhos? através do primeiro que foi aberto? É isso?
GOSTEI 0
Carlos
31/07/2012
Já observou que ao chamar um formulário filho MDI os botões de um panel do formulário pai ficam sobre o formulário filho ? além disso ele tem menu superior no qual o panel1 fica alinhado ao topo, enquanto que o panel2 mais visual na tela tem as opções mais faceis para serem escolhidas, por tanto quando ocultar o panel2 ainda terá como chamar os outros formulários através do menu. O panel2 está sendo usado apenas para facilitar a primeira entrada e alinha os botões independente do tamanho da janela. Então o que preciso corrigir no código é 1- Ao chamar qualquer um dos formulários por um dos botões (aqui só uso um como exemplo) o panel é oculto, 2- Se o form está aberto ao usuário tentar abri-lo novamente, já que uma janela pode estar sobre a outra o usuário é alertado, pois ele pode realmente querer duas instancias do mesmo form. 3- O panel com os botões somente será reexibido caso todos os forms filhos estejam fechados. Espero ter sido claro. O que preciso é isso, se alguém realmente souber e querer ajudar, agradeço.
GOSTEI 0