Как создать TCustomControl, который ведет себя как Tpanel?
Как мне создать TCustomControl, который будет вести себя как Tpanel? например, MyCustomComponent, чтобы я мог добавлять компоненты, такие как метки, изображения и т. д.
1 ответ
Решение
Хитрость заключается в следующем фрагменте кода в TCustomPanel:
constructor TCustomPanel.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
ControlStyle := [csAcceptsControls {, ... } ];
//...
end;
Есть много других элементов управления VCL, которые вы можете использовать csAcceptsControls
в их ControlStyle
имущество.
Если вы хотите сделать это в своих собственных элементах управления, но не выходите из такого элемента управления VCL, то вы должны сделать что-то вроде этого:
- Переопределить конструктор Create
- добавлять
csAcceptsControls
кControlStyle
имущество
Как этот пример кода:
//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