Orientação a objetos e instanciação de componentes

Delphi

24/08/2005

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

Curtidas 0

Respostas

Massuda

Massuda

24/08/2005

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


GOSTEI 0
Vitor Rubio

Vitor Rubio

24/08/2005

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!


GOSTEI 0
Massuda

Massuda

24/08/2005

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


GOSTEI 0
Adriano Santos

Adriano Santos

24/08/2005

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


GOSTEI 0
Vitor Rubio

Vitor Rubio

24/08/2005

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


GOSTEI 0
Adriano Santos

Adriano Santos

24/08/2005

[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


GOSTEI 0
Bruno Belchior

Bruno Belchior

24/08/2005

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


GOSTEI 0
Martins

Martins

24/08/2005

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


GOSTEI 0
Michael

Michael

24/08/2005

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


GOSTEI 0
Martins

Martins

24/08/2005

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


GOSTEI 0
POSTAR