Re: [delphi-br] form ja criado

2004-09-25 Por tôpico Marcelo Almeida
Vitor Luiz Redes wrote:

e adotar a MDI não é o caso, nunca trabalhei com forms MDI (nunca houve necessidade), 
mas pelo que já vi e ouvi, é complicado, e tem alguns Bug´s.
  


A propria microsoft recomenda não usar MDI por causa dos bugs, mas tem 
gente que insiste.

Quando a destruição de formulários, procuro sempre cria-los em tempo de execução, 
 e destruir somente os formulários que não são necessários, portanto uso sempre 
 Release, ou FreeandNil, em casos mais simples.
  


A ideia do Action := cafree é que o release é feito automaticamente no 
close do form.
Se vc usa sempre a variavel form1 para criar o TForm1, vc pode colocar 
action := cafree e form1 := nil no onclose do form que iria funcionar 
tambem.
O único detalhe desta implementação é que vc não consegue acessar nada 
do form depois do showmodal.

-- 
Marcelo Almeida



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

 



[delphi-br] form ja criado

2004-09-24 Por tôpico tatu

como consigo descubrir se um terminado form ja foi criado ?



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

 





RES: [delphi-br] form ja criado

2004-09-24 Por tôpico Rubem Rocha

Essa dica (form  NIL) não é 100% confiável. Ela pode estar diferente de NIL e, no 
entanto, apontar para uma referência que já tenha sido liberada. Pra isso realmente 
funcionar bacana, no momento da liberação do form, a variável de instância do mesmo 
tem que apontar para NIL (ou seja, form := NIL)!

[]s

-Mensagem original-
De: Paulo Daniel Dorensbach [mailto:[EMAIL PROTECTED] 
Enviada em: sexta-feira, 24 de setembro de 2004 13:47
Para: [EMAIL PROTECTED]
Assunto: Re: [delphi-br] form ja criado


tatu escreveu:

 como consigo descubrir se um terminado form ja foi criado ?

Assim:
if (form  nil) then

[ ]'s
-- 
Paulo Daniel 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

Não me entrego sem lutar, tenho ainda coração
Não aprendi a me render, que caia o inimigo então...
Metal contra as nuvens - Legião Urbana

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

 





Re: [delphi-br] form ja criado

2004-09-24 Por tôpico Vitor Luiz Redes
Você pode fazer a verificação de duas maneiras :

if Form = Nil

If Assigned(Form)

Particularmente, acho que a segunda opção é melhor, ela não deixa brechas 
Como por exemplo, o Form pode ser diferente de nil, e mesmo assim não estar criado 
...


Três salvas aos bons livros.
São o deleite dos sábios,
a educação dos ignorantes
e os verdadeiros feitos de nossa
raça: Os Seres Humanos

Vitor Luiz Redes

Redsystem Informática
  - Original Message - 
  From: tatu 
  To: [EMAIL PROTECTED] 
  Sent: Friday, September 24, 2004 12:32 PM
  Subject: [delphi-br] form ja criado


  como consigo descubrir se um terminado form ja foi criado ?



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


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



[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

 



Re: [delphi-br] form ja criado

2004-09-24 Por tôpico Marcelo Almeida
Vitor Luiz Redes wrote:

Você pode fazer a verificação de duas maneiras :

if Form = Nil

If Assigned(Form)

Particularmente, acho que a segunda opção é melhor, ela não deixa brechas 
Como por exemplo, o Form pode ser diferente de nil, e mesmo assim não estar 
 criado ...
  


Errado.
Exemplo retirado do help do delphi

var P: Pointer;

begin
  P := nil;
  if Assigned (P) then Writeln ('You won''t see this');
  GetMem(P, 1024);{P valid}
  FreeMem(P, 1024);{P no longer valid and still not nil}
  if Assigned (P) then Writeln ('You''ll see this');
end;

Resumindo: se vc der free, o assigned continua retornando true.

A única forma garantida de verificar se o form está criado é procurando 
ele em screen.forms.

-- 
Marcelo Almeida




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

 



Re: [delphi-br] form ja criado

2004-09-24 Por tôpico Vitor Luiz Redes
Certo !
Mas depende da maneira como destruímos o objeto TForm.
Se você fizer um teste com um Form.ShowModal, e um Form.Free, o Assigned retornará 
true, mas se destruírmos o form com FreeandNil(Form), o Assigned retornará False, da 
mesma forma, retornará se o objeto for destruído com Free, e tendo um valor nil 
atribuido a ele.

Terminando, ao meu ver, a maneira mais correta de destruir um objeto é FreeAndNil, 
ou Form.Releasee e Form:=NIL ...  o Free não é muito indicado para se destruir um form 
(Help - TCustomForm.Release) ... já que o Release executa todos os métodos 
pertinentes ao fechamento, destruição do objeto ...
Considerando que a destruição dos objetos é feita corretamente, o Assigned 
funcionará ... assim como o Screen.Forms ...



Três salvas aos bons livros.
São o deleite dos sábios,
a educação dos ignorantes
e os verdadeiros feitos de nossa
raça: Os Seres Humanos

Vitor Luiz Redes

Redsystem Informática

[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

 



Re: [delphi-br] form ja criado

2004-09-24 Por tôpico Marcelo Almeida
Vitor Luiz Redes wrote:

Considerando que a destruição dos objetos é feita corretamente, o Assigned 
 funcionará ... assim como o Screen.Forms


Errado novamente.
O Screen.Forms é a única maneira garantida de saber se o form está criado.
Motivos :
- vc pode criar o form sem usar variavel global
- vc pode criar o form mais de uma vez e dar freeandnil em um deles.
- vc não precisa de fazer 'form := nil'.
- vc pode usar 'action := cafree' no onclose.

Posso arrumar mais alguns motivos...

-- 
Marcelo Almeida




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

 



Re: [delphi-br] form ja criado

2004-09-24 Por tôpico Vitor Luiz Redes
Você está certo. Mas o que eu queria dizer com a mensagem anterior, é que deve-se 
tomar cuidado com a destruição de objetos.
Mas como o Screen, é a Screen, então concordo que é a maneira mais segura de 
verificar a existência de um formulário.


Três salvas aos bons livros.
São o deleite dos sábios,
a educação dos ignorantes
e os verdadeiros feitos de nossa
raça: Os Seres Humanos

Vitor Luiz Redes

Redsystem Informática

[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

 



Re: [delphi-br] form ja criado

2004-09-24 Por tôpico Marcelo Almeida
Vitor Luiz Redes wrote:

Mas o que eu queria dizer com a mensagem anterior, é que deve-se tomar cuidado com a 
destruição de objetos.
  


Neste ponto vc está certissimo.
Muita gente erra na hora de destruir os forms.
Como vc disse nas msgs anteriores, a maneira correta é usar o Release.

De acordo com a documentação, o release respeita a fila de msgs do 
windows e o free não; então, teoricamente, usando o free, o programa 
pode deixar de fazer alguma coisa, ou tentar usar algo que já foi destruido.
Digo teoricamente porque nunca ví acontecer nenhuma das 2 situações.

Atualmente estou usado sempre o 'action := cafree' e não me preocupo com 
destruição de form.
Meus sistemas estão sempre trabalhando com o form dentro de um tabsheet, 
ou seja, aparentemente só existe o form principal.
Para saber se o form está ou não criado eu procuro ele no pagecontrol, 
se tiver eu ativo a tabsheet associada ao form, senão eu crio a tabsheet 
e coloco o form dentro.

Funciona muito bem para o tipo de sistema que desenvolvo (B2B), os 
clientes estão achando bem simples de trabalhar assim, sem um punhado de 
tela, uma em cima da outra.

-- 
Marcelo Almeida




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

 



Re: [delphi-br] form ja criado

2004-09-24 Por tôpico Vitor Luiz Redes
De acordo com a documentação, o release respeita a fila de msgs do 
windows e o free não; então, teoricamente, usando o free, o programa 
pode deixar de fazer alguma coisa, ou tentar usar algo que já foi destruido.
Digo teoricamente porque nunca ví acontecer nenhuma das 2 situações.

Boa, eu nunca vi também.

Atualmente estou usado sempre o 'action := cafree' e não me preocupo com 
destruição de form.
Meus sistemas estão sempre trabalhando com o form dentro de um tabsheet, 
ou seja, aparentemente só existe o form principal.
Para saber se o form está ou não criado eu procuro ele no pagecontrol, 
se tiver eu ativo a tabsheet associada ao form, senão eu crio a tabsheet 
e coloco o form dentro.

Interessante, é uma boa solução para muitos formulários, já que a aparência é mais 
amigável. Até para quem desenvolve, trabalhar com muitas telas, não é muito bom, 
confunde, mesmo que você crie recursos de acesso rápido (como links, ou até mesmo um 
Run, como o do Windows), e adotar a MDI não é o caso, nunca trabalhei com forms MDI 
(nunca houve necessidade), mas pelo que já vi e ouvi, é complicado, e tem alguns Bug´s.
Quando a destruição de formulários, procuro sempre cria-los em tempo de execução, 
e destruir somente os formulários que não são necessários, portanto uso sempre 
Release, ou FreeandNil, em casos mais simples.
Valeu pelas dicas e sucesso !


Três salvas aos bons livros.
São o deleite dos sábios,
a educação dos ignorantes
e os verdadeiros feitos de nossa
raça: Os Seres Humanos

Vitor Luiz Redes

Redsystem Informática

[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