Пользовательский элемент управления, который наследуется от Vcl.Controls.TCustomControl, не имеет доступа к SetPopupMenu - PullRequest
0 голосов
/ 24 февраля 2020

У меня есть пользовательский элемент управления, который наследуется от Vcl.Controls.TCustomControl

Я бы хотел назначить ему экземпляр TPopupMenu, но это не работает, поскольку PopupMenu, по-видимому, недоступен.

Я не уверен, почему это так? Кажется, онлайн-документация предлагает PopupMenu доступно в TCustomControl? Однако __property TPopupMenu* PopupMenu = {read=FPopupMenu, write=SetPopupMenu}; - это protected

Я переопределил свойство как public в пользовательском элементе управления. Но теперь ошибка в том, что SetPopupMenu недоступен. SetPopupMenu не указан как protected. Возможно private? Я не вижу этого в документации.

Это виртуальная реализация, и это так же просто, как добавить член TPopupMenu и написать функцию SetPopupMenu самостоятельно? Чего мне не хватает?

1 Ответ

1 голос
/ 25 февраля 2020

Свойство PopupMenu имеет значение protected в TControl и не повышается в TCustomControl. Поэтому вам нужно повысить до public / __published в вашем производном классе, но не переопределить полностью, что, как вам кажется, вы пытаетесь сделать.

И да, SetPopupMenu() равно privateTControl) и, следовательно, недоступно для производных классов.

Попробуйте это:

class TMyControl : public TCustomControl
{
    ...
__published:
    __property PopupMenu; // <-- that is all you need!
};

То же самое происходит для любого другого protected базового свойства, к которому вы хотите предоставить доступ в своем производном элементе управления.

...