Marcelo,

Vamos fazer apenas uma pequena ressalva:

ESTA ROTINA NÃO FUNCIONA MUITO BEM EM FORMS MDICHILD.

Pq não podemos definir ShowModal para estes form's
Estah faltando setar o Form como NIL e usar o RELEASE.

----------------------------------------------------------------------------
MSc.: Murilo Cesar Starke da Cunha
Engenheiro Agrônomo
[EMAIL PROTECTED]
[EMAIL PROTECTED] (MSN)




-----Mensagem original-----
De: Marcelo Silva [mailto:[EMAIL PROTECTED] 
Enviada em: quinta-feira, 3 de março de 2005 08:57
Para: delphi-br@yahoogrupos.com.br
Assunto: [delphi-br] [CONTRIBUIÇÃO] Automatizar processos OnClose do Form


Pessoal... meu lema é escrever pouco e deixar o computador trabalhar por mim
:-) (já que ele foi feito pra isso)

Então segue uma dica para aqueles que tem este mesmo conceito de deixar  seu
projeto mais "enxuto"

Levantei a Thread :-) com relação a Automatizar a abertura e fechamento de
Forms.
Imagino que o Delphi até já tenha esta função embutida... pois é a rotina
mais usada em qualquer aplicação... mas ainda não encontrei.

Coloque esta função naquela Unit de funções plubicas que vc deve ter...
(pois não seria vantajoso colocar para um unico form)

Bem aí vai minha dica:

procedure MostraLiberaForm(pForm: TForm; cForm: TFormClass); begin
  pForm := cForm.Create(nil); // Aqui vc pode usar Self, Application, ou nil
  try
    pForm.ShowModal; // Nao funciona para form Show, pois o mesmo não para
aqui e será liberado
  finally
    pForm.Free; // Só libera quando o ShowModal é fechado.
  end;
end;

Para utiliza-la:

MostraLiberaForm(SeuForm, TSeuForm);



Esta função deve ser usada naqueles forms que não tem nenhuma rotina antes
da sua abertura (por ser ShowModal)... ou a tal rotina deve estar no
OnCreate do Form em questão.


* Rotina sujeita a mudanças sem prévio aviso :-)


Marcelo Silva
Cel. 11 9693-4251
ICQ - 49224093
MSN [EMAIL PROTECTED]


  ----- Original Message -----
  From: Marcelo Silva
  To: delphi-br@yahoogrupos.com.br
  Sent: Wednesday, March 02, 2005 6:24 PM
  Subject: Re: [delphi-br] Automatizar processos OnClose do Form


  Free -- serve para o Objeto que não tenha um dono... por exemplo

  var
    MinhaLista: TStringList;
  begin
    MinhaLista := TStringList.Create;
    MinhaLista.Blablabla...

    MinhaLista.Free;
  end;

  MinhaLista é dona dela mesma... assim não depende de outra instancia e
pode ser liberada da memoria sem erros.

  Outro exemplo

  SeuForm := TSeuForm.Create(nil);
  Try
    SeuForm.ShowModal;
  finally
    SeuForm.Free;
  end;

  SeuForm é dono dele mesmo... o que seria diferente de:

  Application.CreateForm(TSeuForm, SeuForm);

  Desta forma Application é dona do SeuForm e teria que ser destruido assim

  SeuForm.Release; // Aguarda todos os processos(componentes e variaveis)
pendendentes dentro dele.
  SeuForm := Nil; // Limpa a variável SeuForm para poder ser Recriada

  Se usar Free neste caso poderá causar violation por outros componentes
estarem dependentes do SeuForm

  Observe que se voce nao utilizar Release e Nil neste caso, sera criado um
outro form com o nome SeuForm_1 e assim por diante. 

  Se for usar aplicações MDI use Free ... do contrário use Release e Nil


  Pelo menos é o que eu entendi no Help do Delphi como segue abaixo: E estou
pronto para novas ideias :-)

  Description

  Use Free to destroy an object. Free automatically calls the destructor if
the object reference is not nil. Any object instantiated at runtime that
does not have an owner should be destroyed by a call to Free so that it can
be properly disposed of and its memory released. Unlike Destroy, Free is
successful even if the object is nil; so if the object was never
initialized, Free won't result in an error.

  When you call Free for a component, it calls Free for all components that
it owns-that is, all components in its component list. Since a form owns all
the controls and other components that are created on it in design mode,
those components are automatically freed when the form is freed. By default,
all forms are owned by the Application object; when the application
terminates, it frees the Application object, which frees all forms. For
objects that are not components, or for components created with a nil owner,
be sure to call Free after you are finished with them; otherwise the
allocated memory will not be usable until after the application terminates.

  Warning: Never explicitly free a component within one of its own event
handlers or the event handler of a component it owns or contains. For
example, don't free a button, or the form that owns the button, in its
OnClick event handler.

  To free a form, call its Release method, which destroys the form and
releases the memory allocated for it after all its event handlers and those
of the components it contains are through executing.



    ----- Original Message ----- 
    From: Fabio Giro 
    To: delphi-br@yahoogrupos.com.br 
    Sent: Wednesday, March 02, 2005 9:53 AM
    Subject: Re: [delphi-br] Automatizar processos OnClose do Form



    Marcelo, muito boa a sua explicação. Poderia me informar como funciona o
    Free.

    Obrigado antecipadamente.

    ----- Original Message -----
    From: "Marcelo Silva" <[EMAIL PROTECTED]>
    To: <delphi-br@yahoogrupos.com.br>
    Sent: Wednesday, March 02, 2005 9:38 AM
    Subject: Re: [delphi-br] Automatizar processos OnClose do Form



    Se você não utilizar Release o formulario será imediatamente
destruido... o
    que poderá causar um Access Violation por alguns componentes ainda
estarem
    na memória ou aquele endereço irá demorar para estar disponível a outro
    solicitante.

    É como você mandar um arquivo para a lixeira... ele pode estar na
lixeira
    mas o espaço por ele utilizado ainda não está livre. Mas sim, só depois
de
    ele ser excluído da lixeira.

    Se voce usar Release ele aguarda que todos os processos relativos aquele
    Form seja finalizado depois executando Nil você arranca de vez o
formulario
    da memória e libera o endereço da mesma.

    * Lembre-se de que apesar de os componentes estarem dentro do
formulário...
    cada um utiliza um endereço na memória quando abertos, por isso a
    necessidade da espera até que eles sejam descaregados.

    Marcelo Silva
    Cel. 11 9693-4251
    ICQ - 49224093
    MSN [EMAIL PROTECTED]
      ----- Original Message -----
      From: Wildner B. Ferreira
      To: delphi-br@yahoogrupos.com.br
      Sent: Wednesday, March 02, 2005 9:26 AM
      Subject: RES: [delphi-br] Automatizar processos OnClose do Form


      Para liberar o form da memoria a realmente a necessidade de estar
    utilizando
      o form.release ????



        _____

      De: Marcelo Silva [mailto:[EMAIL PROTECTED]
      Enviada em: quarta-feira, 2 de março de 2005 09:18
      Para: delphi-br@yahoogrupos.com.br
      Assunto: [delphi-br] Automatizar processos OnClose do Form



      Pessoal em todos os Forms temos que colocar Release e nil para liberar
os
      formularios da memória...
      A pergunta é...
      Teria como automatizar para que a aplicação liberasse o formulario da
      memória de forma automática ?
      Ou seja, detectar que form está sendo fechado e dar um

      Form?.Release;
      Form? := nil;

      Será que tem ?

      Eu já consigo saber qual formulário está sendo executado, mas não
consigo
      detectar quando foi pedido para fechar... se eu souber quando ocorre
este
      evento... aí fica belesma...

      Marcelo Silva
      Cel. 11 9693-4251
      ICQ - 49224093
      MSN [EMAIL PROTECTED]
        ----------

      No virus found in this outgoing message.
      Checked by AVG Anti-Virus.
      Version: 7.0.300 / Virus Database: 266.5.4 - Release Date: 01/03/2005


      [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]







      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=12ajj3q7i/M=264105.3931087.6562589.1588051/D=brc

 
lubs/S=2137111264:HM/EXP=1109852332/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]



            Yahoo! Grupos, um serviço oferecido por:
                  PUBLICIDADE




 
----------------------------------------------------------------------------
    --
      Links do Yahoo! Grupos

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

        b.. Para sair deste grupo, envie um e-mail para:
        [EMAIL PROTECTED]

        c.. O uso que você faz do Yahoo! Grupos está sujeito aos Termos do
    Serviço do Yahoo!.




 
----------------------------------------------------------------------------
    --


      No virus found in this incoming message.
      Checked by AVG Anti-Virus.
      Version: 7.0.300 / Virus Database: 266.5.4 - Release Date: 01/03/2005

      ----------

    No virus found in this outgoing message.
    Checked by AVG Anti-Virus.
    Version: 7.0.300 / Virus Database: 266.5.4 - Release Date: 01/03/2005


    [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











    --
    No virus found in this incoming message.
    Checked by AVG Anti-Virus.
    Version: 7.0.308 / Virus Database: 266.5.7 - Release Date: 01/03/2005





    -- 
    No virus found in this outgoing message.
    Checked by AVG Anti-Virus.
    Version: 7.0.308 / Virus Database: 266.5.7 - Release Date: 01/03/2005






    -- 
    <<<<< 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: 
                PUBLICIDADE
                  
         


 
----------------------------------------------------------------------------
--
    Links do Yahoo! Grupos

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




 
----------------------------------------------------------------------------
--


    No virus found in this incoming message.
    Checked by AVG Anti-Virus.
    Version: 7.0.300 / Virus Database: 266.5.4 - Release Date: 01/03/2005

    ----------

  No virus found in this outgoing message.
  Checked by AVG Anti-Virus.
  Version: 7.0.300 / Virus Database: 266.5.4 - Release Date: 01/03/2005


  [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]



        Yahoo! Grupos, um serviço oferecido por: 
             
                    São Paulo Rio de Janeiro Curitiba Porto Alegre Belo
Horizonte Brasília  
             
       


----------------------------------------------------------------------------
--
  Links do Yahoo! Grupos

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




----------------------------------------------------------------------------
--


  No virus found in this incoming message.
  Checked by AVG Anti-Virus.
  Version: 7.0.300 / Virus Database: 266.5.4 - Release Date: 01/03/2005

  ----------

No virus found in this outgoing message.
Checked by AVG Anti-Virus.
Version: 7.0.300 / Virus Database: 266.5.4 - Release Date: 01/03/2005


[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




 









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