impedir que um form mdi shield seja reaberto

18/11/2008

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
Nirlan Fundao

Nirlan Fundao

Curtidas 0

Melhor post

Nirlan Fundao

Nirlan Fundao

19/11/2008

sim, agora a função openform está funcionando normalmente.

obrigado

Nirlan
GOSTEI 1

Mais Respostas

Guinther Pauli

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

Guinther Pauli

18/11/2008

Olá Nirlan,   Bom dia !!     Podemos encerrar esse chamado ?     abs
GOSTEI 0
POSTAR