views:

74

answers:

1

how to create TCustomControl behave like Tpanel? like MyCustmComponent for example. That can drop a components in it like labels, images etc. sorry for my english..

+3  A: 

The trick is this piece of code in TCustomPanel:

constructor TCustomPanel.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  ControlStyle := [csAcceptsControls {, ... } ];
//...
end;

There are many more VCL controls you can descend from that have csAcceptsControls in their ControlStyle property.

If you want to do this in your own controls, but do not descend from such a VCL control, then you should do something like this:

  1. Override the Create constructor
  2. Add csAcceptsControls to the ControlStyle property

Like this sample code:

//MMWIN:MEMBERSCOPY
unit _MM_Copy_Buffer_;

interface

type
  TMyCustomControl = class(TSomeControl)
  public
    constructor Create(AOwner: TComponent); override;
  end;


implementation

{ TMyCustomControl }

constructor TMyCustomControl.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  ControlStyle := ControlStyle + [csAcceptsControls {, ...} ];
//...
end;


end.

--jeroen

Jeroen Pluimers