Fórum Orientação a objetos e instanciação de componentes #292930
24/08/2005
0
esta minha classe é descendente de Tobject
esta minha classe usa alguns componentes, criados dinamicamente, e possui outros dentro dela.
meu problema está em instanciar componentes dinamicamente dentro dessa classe, pois o componente exige que seu owner, ou dono, seja outro da classe tcomponent, mas minha classe não pode ser dona dele porque é filha de tobject.
O que eu deveria fazer? Fazer minha classe ser filha de tcomponent? eu não queria criar um componente....
Se alguem puder me ajudar, agradeço desde já!
Vitor Rubio
Curtir tópico
+ 0Posts
24/08/2005
Massuda
A interpretação do Owner = nil é que você vai se responsabilizar pela destruição do componente, ou seja, está abrindo mão do mecanismo de destruição automática do componente quando o Owner é destruído.
Se for um componente visual, talvez você tenha problema com a propriedade Parent que deve receber uma valor não-nil para que o componente seja visível. O Parent indica sobre qual ´superfície´ o controle irá se desenhar.
Gostei + 0
24/08/2005
Vitor Rubio
de qualquer forma, então eu posso instanciar como nil, mas tenho que destruir manualmente, a minha classe não poderá ser seu owner... até aí beleza, mas... quer dizer que o owner só serve pra destruir automaticamente? para que mais serve o owner?
Valeu!
Gostei + 0
24/08/2005
Massuda
Gostei + 0
24/08/2005
Adriano Santos
Confesso [b:c508059a73]victor^_^[/b:c508059a73] e [b:c508059a73]Massuda[/b:c508059a73] que também não sabia esta do Owner ser usado ´apenas´ para saber como o objeto será destruído....boa dica essa em [b:c508059a73]Massuda[/b:c508059a73]?
Gostei + 0
05/09/2005
Vitor Rubio
por exemplo, se vc tem só um componente que não sabe de onde ele vem (qual form ou datamodule, ou quem é seu owner), isso acontece qdo vc passa o componente como parametro pra uma procedure. vc pode usar sua propriedade owner pra acessar a form de onde ele vem e fazer qualquer coisa com a form, desde fecha-la até limpar todos os seus edits, ou outro componente qualquer, usando o vetor xxxxx.owner.components[contador] e o numero de componentes xxxx.owner.componentcount.
lógico que vc tem que usar typecasting e perguntar antes se o componente que vc está acessando é do tipo que vc quer limpar.
essa é só uma coisa q dá pra fazer com o owner, tem muitas outras
Gostei + 0
05/09/2005
Adriano Santos
por exemplo, se vc tem só um componente que não sabe de onde ele vem (qual form ou datamodule, ou quem é seu owner), isso acontece qdo vc passa o componente como parametro pra uma procedure. vc pode usar sua propriedade owner pra acessar a form de onde ele vem e fazer qualquer coisa com a form, desde fecha-la até limpar todos os seus edits, ou outro componente qualquer, usando o vetor xxxxx.owner.components[contador] e o numero de componentes xxxx.owner.componentcount.
lógico que vc tem que usar typecasting e perguntar antes se o componente que vc está acessando é do tipo que vc quer limpar.
essa é só uma coisa q dá pra fazer com o owner, tem muitas outras[/quote:655e163672]
Engraçado [b:655e163672]vitor^_^[/b:655e163672], isso já fiz cara, mas meio ´inconsciente´ heheh.
Valeu
Gostei + 0
05/09/2005
Bruno Belchior
Gostei + 0
05/09/2005
Martins
Valew pela dica pessoal!!
Gostei + 0
05/09/2005
Michael
Eis aqui dois excelentes artigos (em inglês) sobre a função do Owner, seja em componentes ou em formulários:
[url=http://delphi.about.com/od/adptips2005/qt/aowner.htm]The role of the ´AOwner´ parameter in the Create constructor (O papel do parâmetro ´AOwner´ no construtor Create)[/url]
[url=http://delphi.about.com/od/adptips2005/qt/nilselfapp.htm]TForm.Create(?) Nil, Self or Application?[/url]
Muito bom! ;-)
[]´s
Gostei + 0
05/09/2005
Martins
Ah! garoto baum sô, vou dar uma olhada, mas alguém pode me emprestar um tradutor antes, hehehehe!!!!
Brincadeirinha pessoal, blz [b:10614774ae]Michael[/b:10614774ae], vou ler os artigos.
valew!!!
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)