Paulo,

 

O método que passei foi testado e aprovado. Esclarecimentos  a seguir no
corpo da mensagem...

 

Alessandro Fernandes escreveu:

>
>Paulo, eu faço assim:
>
>01) Na implementation do form defini uma variável do tipo do 
>formulário:
>
>implementation
>
>{$R *.dfm}
>
>{ TForm2 }
>
>var
>
>  FForm: TForm2;  
>
>Por estar em Implementation ela fica protegida de acesso externo.
>  
>

:-\ Na implementation de qual form? O principal ou o que sera chamado?



Na implementation do form que será chamado.  Tudo aqui é feito no form que
será chamado. A não ser, é claro a chamada ao método ChamaForm.


>02) Crio no form um método de classe ChamaForm com a seguinte 
>implementação:
>
>class procedure TForm2.ChamaForm;
>
>begin
>
>  if FForm = nil then
>
>     FForm := TForm2.Create(nil);
>
>  FForm.Show;
>
>end;
>  
>

:-\ Aonde eu declaro este metodo de classe? Ele pode ser declarado como 
um metodo normal?



Declare esse método no form que será chamado. É declarado como um método
comum só que com a palavra “class” na frente. Como um método de classe, não
está associado a uma instância do form e sim à própria classe. Dessa forma
você pode chamar esse método antes do form ter sido criado. É esse método
que será responsável pela criação (quando necessário) e exibição do form. 


>03) No Create do form faço FForm receber NIL e no evento Destroy também. No

>OnClose uso CAFree.
>  
>

Nao entendi! No create eu ja aponto ele pro nil edou um Destroy? Vai dar 
'access violation', nao? =-O

 

Desculpe ouve um erro de digitação e ficou mesmo confuso. Reescrevendo...

03) Na seção Initialization da unit do form (o que será chamado) faço:

     FForm := NIL;  // Isso inicializa a variável que apontará para a
instância do form com NIL. Afinal o form não foi criado ainda e ela não
aponta pra nada.

     Isso garante que não haverá nada além de nil quando chamar pela
primeira vez o form.

     No evento ondestroy do form faço a variável receber nil novamente.  Ou
seja quando você fechar o form o mesmo será destruído por causa do
Action:=CAFree e FForm receberá NIL novamente de forma que quando chamar
denovo o método saberá que tem que recriar o form.

A idéia é: Você chama o método ChamaForm. O método faz:

      Se form não foi criado então
           Cria o form;

 

      Da show no form; 



>04) No local de chamada do form simplesmente faço:
>
>procedure TForm1.Button1Click(Sender: TObject);
>
>begin
>
>  TForm2.ChamaForm;
>
>end;
>
>Assim se o formulário não existir ele é criado se já existir apenas 
>é exibido.
>
>Acho que isso resolve.
>
>Me diga se não ajudar.
>
Desculpa se faco tantas perguntas, mas ha muito tempo tenho enfrentado 
problemas com abertura de forms de maneira correta.
Ja testei varias maneiras e quando parece que vai da tudo certo aparece 
uma excessao.

Ainda estou usando:

Para chamar o form:

   * if form2 = nil then
        form2 := Tform2 .Create(nil);
    form2 .Show;*

E no evento OnClose do form2:

    *form2 := nil;*

Mas de vez em quando aparece um problema de 'access violation' em algum 
form.

Obrigado pela atencao!!!
:-)



 

Tudo bem. Se ainda não ficou claro, me contate em private que monto um
projeto exemplo e te mando.

 

Um abraço.

 

Alessandro Fernandes


-- 
Paulo Daniel Dorensbach
http://geocities.yahoo.com.br/dorensbach
Usuario GNU/Linux 363631 - http://counter.li.org

NBR para a Internet já! Porque meu navegador não é penico.
http://www.w3.org/2003/03/Translations/byLanguage?language=pt-br

"De cada um conforme sua capacidade
a cada um conforme sua necessidade."
Karl Marx

By Mozilla Thunderbird
www.mozilla.org.br




-- 
<<<<< FAVOR REMOVER ESTA PARTE AO RESPONDER ESTA MENSAGEM >>>>>

Para ver as mensagens antigas, acesse:
http://br.groups.yahoo.com/group/delphi-br/messages

Para falar com o moderador, envie um e-mail para:
[EMAIL PROTECTED] ou [EMAIL PROTECTED]







Yahoo! Grupos, um serviço oferecido por:



  


  <http://br.i1.yimg.com/br.yimg.com/i/br/ads4/2309_lrec_yshopping2.gif> 



 
<http://br.rd.yahoo.com/SIG=12ajcces9/M=264105.3931087.6562589.1588051/D=brc
lubs/S=2137111264:HM/EXP=1106448525/A=2361264/R=6/SIG=10v4acpp0/*http:/br.sh
opping.yahoo.com/>  

  

 

 

  _____  

Links do Yahoo! Grupos

*       Para visitar o site do seu grupo na web, acesse:
http://br.groups.yahoo.com/group/delphi-br/
  
*       Para sair deste grupo, envie um e-mail para:
[EMAIL PROTECTED]
<mailto:[EMAIL PROTECTED]> 
  
*       O uso que você faz do Yahoo! Grupos está sujeito aos Termos
<http://br.yahoo.com/info/utos.html>  do Serviço do Yahoo!. 



[As partes desta mensagem que não continham texto foram removidas]



-- 
<<<<< FAVOR REMOVER ESTA PARTE AO RESPONDER ESTA MENSAGEM >>>>>

Para ver as mensagens antigas, acesse:
 http://br.groups.yahoo.com/group/delphi-br/messages

Para falar com o moderador, envie um e-mail para:
 [EMAIL PROTECTED] ou [EMAIL PROTECTED]
 
Links do Yahoo! Grupos

<*> Para visitar o site do seu grupo na web, acesse:
    http://br.groups.yahoo.com/group/delphi-br/

<*> Para sair deste grupo, envie um e-mail para:
    [EMAIL PROTECTED]

<*> O uso que você faz do Yahoo! Grupos está sujeito aos:
    http://br.yahoo.com/info/utos.html

 



Responder a