Fórum Orientação a objetos e instanciação de componentes #292930

24/08/2005

0

estou criando uma classe, sem usar form ou nenhum componente ´colado´ ou criado na form.

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

Vitor Rubio

Responder

Posts

24/08/2005

Massuda

[quote:0d7f0d0413=´vitor^_^´]...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....[/quote:0d7f0d0413]Você pode criar o componente passando [b:0d7f0d0413]nil[/b:0d7f0d0413] como sendo o Owner.

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.


Responder

Gostei + 0

24/08/2005

Vitor Rubio

Legal, não sabia desse detalhe, eu sempre dava free ou destroy nas minhas classes instanciadas por mim, mesmo que o owner fosse uma form ou outro objeto que fosse destruido posteriormente.

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!


Responder

Gostei + 0

24/08/2005

Massuda

[quote:117c2b7504=´vitor^_^´]... quer dizer que o owner só serve pra destruir automaticamente? para que mais serve o owner?[/quote:117c2b7504]Ja vi alguns usos diferentes do Owner (tipo, tentar descobrir quem é o form pai de um form), mas na verdade a idéia do Owner está relacionada com quem tem a responsabilidade de destruir um componente.


Responder

Gostei + 0

24/08/2005

Adriano Santos

[quote:c508059a73=´vitor^_^´]... quer dizer que o owner só serve pra destruir automaticamente? para que mais serve o owner?
Ja vi alguns usos diferentes do Owner (tipo, tentar descobrir quem é o form pai de um form), mas na verdade a idéia do Owner está relacionada com quem tem a responsabilidade de destruir um componente.[/quote:c508059a73]

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


Responder

Gostei + 0

05/09/2005

Vitor Rubio

mas não é só isso, também dá pra fazer umas coisas legais:

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


Responder

Gostei + 0

05/09/2005

Adriano Santos

[quote:655e163672=´vitor^_^´]mas não é só isso, também dá pra fazer umas coisas legais:

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


Responder

Gostei + 0

05/09/2005

Bruno Belchior

Particularmente não gosto de acessar o [b:fc65e47dbd]Owner[/b:fc65e47dbd] de um componente (principalmente quando o mesmo não é um formulário)... com certeza você perde em mantenabilidade, no momneto q vc faz é fácil lembrar o que é e o porque usou... mas quando se passa alguns mêses e vc tem de remexer no código até que vc encontro o ponto de partida vai tempo...


Responder

Gostei + 0

05/09/2005

Martins

Também não sabia dessa utilidade do [b:b78d07dd1e]Owner[/b:b78d07dd1e], preciso estudá-lo com mais calma e boa vontade, hehehehe!!!!


Valew pela dica pessoal!!


Responder

Gostei + 0

05/09/2005

Michael

Olá colegas!

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


Responder

Gostei + 0

05/09/2005

Martins

Olá colegas! 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

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


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar