Qual o método controla o AOwner em um novo Componente?
Estou criando dois componentes cada qual com sua finalidade.
Criar os componente e suas rotinas tudo bem, sem problemas.
Eu gostaria de saber qual o método que é responsável pelo controle onde em design o TCompB recebe como AOwner o TCompA.
Trocando em miudos, como fazer com que mesmo em design o TCompB fique dentro do TCompA.
* Alterar o DFM não é o caminho, eu precisava fazer isto diretamente ao colocar o novo componente TComB sobre o TCompA.
type TCompA = class(TComponent) //bla bla bla end; TCompB = class(TComponent) //bla bla bla end;
Criar os componente e suas rotinas tudo bem, sem problemas.
Eu gostaria de saber qual o método que é responsável pelo controle onde em design o TCompB recebe como AOwner o TCompA.
Trocando em miudos, como fazer com que mesmo em design o TCompB fique dentro do TCompA.
* Alterar o DFM não é o caminho, eu precisava fazer isto diretamente ao colocar o novo componente TComB sobre o TCompA.
Weber
Curtidas 0
Respostas
Rodc
23/01/2008
TComponent não é um container. Você precisa herdar de um container como por exemplo o TPainel.
GOSTEI 0
Weber
23/01/2008
Desculpe colega mas você não esta correto em sua afirmação. Por exemplo:
TStringGrid < TDrawGrid < TCustomDrawGrid < TCustomGrid < TCustomControl
TPanel < TCustomPanel < TCustomControl
Observe que tando o TStringGrid quanto o TPanel tem sua origem no TCustomControl.
Algum metodo no TCustomPanel ou no TPanel fazem o trabalho.
TStringGrid < TDrawGrid < TCustomDrawGrid < TCustomGrid < TCustomControl
TPanel < TCustomPanel < TCustomControl
Observe que tando o TStringGrid quanto o TPanel tem sua origem no TCustomControl.
Algum metodo no TCustomPanel ou no TPanel fazem o trabalho.
GOSTEI 0
Rodc
23/01/2008
Mas não de TComponent!!!!
GOSTEI 0
Weber
23/01/2008
Não é esta a questão de ser de TComponent ou TCustomControl, no final das contas tudo é TComponent. Como eu já havia dito mais acima, meu problema não esta na criação do componente e suas ações e sim e faze-lo aceitar outros componentes sobre ele.
Tenho certeza que existe algum metodo ou vários métodos que vão fazer com que meu componente vindo do TComponent aceite outros componentes dentro dele.
Tenho certeza que existe algum metodo ou vários métodos que vão fazer com que meu componente vindo do TComponent aceite outros componentes dentro dele.
GOSTEI 0
Rodc
23/01/2008
Pesquisando o código fonte da VCL, encontrei o código abaixo na criação do TCustomPanel. Acho que o csAcceptsControls faz ele aceitar os componentes, mas não cheguei a testar.
constructor TCustomPanel.Create(AOwner: TComponent); begin inherited Create(AOwner); ControlStyle := [csAcceptsControls, csCaptureMouse, csClickEvents, csSetCaption, csOpaque, csDoubleClicks, csReplicatable]; Width := 185; Height := 41; FAlignment := taCenter; BevelOuter := bvRaised; BevelWidth := 1; FBorderStyle := bsNone; Color := clBtnFace; FFullRepaint := True; UseDockManager := True; end;
GOSTEI 0
Weber
23/01/2008
Irei verificar, obrigado pela dica.
GOSTEI 0
Weber
23/01/2008
Exatamente como sua dica, funciona perfeitamente. :D
Mais uma vez obrigado!
Mais uma vez obrigado!
GOSTEI 0