Qual o método controla o AOwner em um novo Componente?

Delphi

23/01/2008

Estou criando dois componentes cada qual com sua finalidade.

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

Weber

Curtidas 0

Respostas

Rodc

Rodc

23/01/2008

TComponent não é um container. Você precisa herdar de um container como por exemplo o TPainel.


GOSTEI 0
Weber

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.


GOSTEI 0
Rodc

Rodc

23/01/2008

Mas não de TComponent!!!!


GOSTEI 0
Weber

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.


GOSTEI 0
Rodc

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

Weber

23/01/2008

Irei verificar, obrigado pela dica.


GOSTEI 0
Weber

Weber

23/01/2008

Exatamente como sua dica, funciona perfeitamente. :D
Mais uma vez obrigado!


GOSTEI 0
POSTAR