Orientação a objetos e instanciação de componentes
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á!
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
Curtidas 0
Respostas
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.
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
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!
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
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
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
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
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
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
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
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
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!!
Valew pela dica pessoal!!
GOSTEI 0
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
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
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