GARANTIR DESCONTO

Fórum Qual o método controla o AOwner em um novo Componente? #352312

23/01/2008

0

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

Responder

Posts

23/01/2008

Rodc

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


Responder

Gostei + 0

23/01/2008

Weber

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.


Responder

Gostei + 0

23/01/2008

Rodc

Mas não de TComponent!!!!


Responder

Gostei + 0

23/01/2008

Weber

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.


Responder

Gostei + 0

23/01/2008

Rodc

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;



Responder

Gostei + 0

23/01/2008

Weber

Irei verificar, obrigado pela dica.


Responder

Gostei + 0

23/01/2008

Weber

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


Responder

Gostei + 0

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

Aceitar