impedir que um form mdi shield seja reaberto
criei esta procedure no Delphi 2007 win32 para abrir os forms mdi shield.
procedure TDM.OpenForm(FClass: TFormClass; var Instance);
begin
try
Application.CreateForm(FClass, Instance);
TForm(Instance).Show;
except
TForm(Instance).Show;
end;
end;
A minha ideia seria que na segunda vez se tentasse criar um form já aberto, ocorreria uma exceção e o form seria simplesmente exibido. Isso só funciona quando a rotina acima é chamado de outro mdishiedl.
Quando a rotina é chamado a partir do main form, uma outra instancia do form é criado.
Gostaria que o form simplesmente seja exibido quando se tentasse criar uma nova instancia.
Nirlan
procedure TDM.OpenForm(FClass: TFormClass; var Instance);
begin
try
Application.CreateForm(FClass, Instance);
TForm(Instance).Show;
except
TForm(Instance).Show;
end;
end;
A minha ideia seria que na segunda vez se tentasse criar um form já aberto, ocorreria uma exceção e o form seria simplesmente exibido. Isso só funciona quando a rotina acima é chamado de outro mdishiedl.
Quando a rotina é chamado a partir do main form, uma outra instancia do form é criado.
Gostaria que o form simplesmente seja exibido quando se tentasse criar uma nova instancia.
Nirlan
Nirlan Fundao
Curtidas 0
Melhor post
Nirlan Fundao
19/11/2008
sim, agora a função openform está funcionando normalmente.
obrigado
Nirlan
obrigado
Nirlan
GOSTEI 1
Mais Respostas
Guinther Pauli
18/11/2008
Olá Nurlan,
Bem você terá que fazer uma pequena alteração em sua rotina. Ela deverá ficar assim:
procedure TDM.OpenForm(FClass: TFormClass; var Form: TForm);
begin
if Not Assigned(Form) then
begin
Form := FClass.Create(Self);
Form.Show;
end
else
Form.Show;
end;
Você terá que passar o parâmetro por referência tipado. Feito isso verificamos se a variável passará por parametro esra instanciada (assiged). Se não tiver criamos e exibimos senão só exibimos.
Agora considerações sobre MDI. O Evento onClose dos form MDIChild vc terá que destruir os form com freeannil.
Ex.: FreeAndNil(FrmCliente). Não use Self pois self e um outro ponteiro e não ira funcionar.
Para usar a função acima faça:
DM.OpenForm(TFrm1, TForm(Frm1));
É isso !!
Aguardamos seu retorno,
abs
GOSTEI 0
Guinther Pauli
18/11/2008
Olá Nirlan,
Bom dia !!
Podemos encerrar esse chamado ?
abs
GOSTEI 0