27/01/2006

criando data module ...

ola amigos ...

nao sei se é usual fazer isso ... mas estou deixando os datamodules sem carregar no comeco da aplicacao, eu crio somente quando vou usar

para criar to usando o seguinte codigo ....

  if not Assigned(DmRE)then
    Application.CreateForm(TDmRE,DmRE);


e no evento onDestroy do datamodule coloco o codigo:

  DmRE:= nil;


esse datamodule é destinado apenas a um formulario, criei mais por motivos de organizacao ... quando abro o formulario, crio o datamodule, e depois crio o form ... no evento onclose do form vai o seguinte codigo:

procedure TFrmRE.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  Action:= CaFree;
  FrmRe:= nil;
  DmRE.Destroy;
end;



agora me digam, isso esta certo???
é uma pratica segura???

conto com sua colaboracao ...
abraçoss


Rafael Gomes

Respostas

27/01/2006

Aroldo Zanela

Colega,

O importante é que ele esteja criado e disponível no momento que necessitar. Particularmente, prefiro criá-lo na inicialização do sistema.


Responder Citar

28/01/2006

Tnaires

Olá
Acho q seu código está bom, com exceção do DmRE.Destroy. Ao invés disso, chame DmRE.Free.
Abraços


Responder Citar

28/01/2006

Rafael Gomes

qual a diferenca dos metodos destroy e free????
[]ss


Responder Citar

28/01/2006

Tnaires

Extraído da ajuda do Delphi:
Do not call Destroy directly. Call Free instead. Free verifies that the object reference is not nil before calling Destroy.

Unlike Destroy, Free provides a safeguard when destroying objects that are nil.

O método Free verifica se a referência ao objeto não é nil antes de chamar o Destroy.


Responder Citar

28/01/2006

Rafael Gomes

entao chamando chamando free, logo em sguida é chamado o metodo destroy, e a vairavel fica valendo nil???

ou devo utilizar o seguinte codigo ..

DmRE.Free;
DmRE:= nil;



ou somente

DmRE.Free;


desculpe a pergunta, mas ficou meio confuso ...

[]ss
[/i]


Responder Citar

28/01/2006

Tnaires

Não, a variável deve ser setada como nil manualmente mesmo. O Free só elimina o objeto, mas a referência continua apontando para o endereço do objeto.
Por isso, vc deve usar o Free, e logo em seguida, atribuir nil à referência.
Abraços


Responder Citar