Создание редактируемого компонента времени разработки для Delphi - PullRequest
0 голосов
/ 20 декабря 2011

Я искал ответ по всему Интернету, но не могу его найти.

То, что я хочу сделать, - это создать компонент, к которому я во время разработки могу добавлять компоненты, перемещать их, щелкать по ним правой кнопкой мыши, чтобы открывать меню, изменять их свойства и т. Д. И т. Д.

Как, например, я удаляю свой компонент «A» (который основан на TImage32 из библиотеки Graphics32), а затем я хочу иметь возможность удалить компонент «B» (который основан на TBitmap32) в A, но поскольку B не наследуется от стандартного VCL, такого как TPanel, я не знаю, как сделать компонент времени проектирования.

1 Ответ

2 голосов
/ 20 декабря 2011

То, что вы ищете, - это возможность создать отношения родитель / ребенок.Родитель действует как контейнер, а потомок содержится в границах контейнера.TPanel - классический пример контейнера.Любой визуальный компонент может быть дочерним.

С точки зрения родословной родитель должен быть производным от TWinControl, а дочерний должен быть производным от TControl.На практике вы редко наследуете эти классы напрямую, а не от одного из их потомков.Другой фактор, если я правильно помню, состоит в том, что родительский элемент управления должен включать csAcceptsControls в его ControlStyle.

Теперь TImage32 действительно происходит от TWinControl итак что он может действовать как контейнер.Однако я не уверен, включен ли csAcceptsControls в ControlStyle для TImage32.

Я действительно не знаком с TImage32 и не знаю,не может выступать в роли родителя.У меня есть подозрение, что он не предназначен для использования в качестве контейнера.Если это так, то вы можете добавить csAcceptsControls к ControlStyle в конструкторе вашего производного класса и использовать элемент управления в качестве родителя.

Я подозреваю, что если TImage32 не включает csAcceptsControls, то это по замыслу и управление изображением не должно выступать в роли родителя.

Очевидно, TImage32, в отличие от VCL TImage, действительно способен выступать в роли родителя длядругие элементы управления.

Что касается другого элемента управления в вашем вопросе, TBitmap32 не является производным от TControl и не может быть дочерним элементом управления.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...