Вопрос

как мне создать TCustomControl, который будет вести себя как Tpanel?например MyCustomComponent, в который я могу добавлять такие компоненты, как метки, изображения и т. д.

Это было полезно?

Решение

Хитрость заключается в следующем фрагменте кода в TCustomPanel:

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

Есть еще много элементов управления VCL, от которых вы можете отказаться. csAcceptsControls в их ControlStyle свойство.

Если вы хотите сделать это в своих собственных элементах управления, но не происходите от такого элемента управления VCL, то вам следует сделать что-то вроде этого:

  1. Переопределить конструктор Create
  2. Добавлять 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.

--джероен

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top