опубликованные свойства не отображаются в дизайнере

В предыдущих версиях Delphi моя пользовательская форма показывала свои опубликованные свойства.

Однако у меня возникла проблема с Delphi 10.2 Tokyo. В частности, я не вижу хорошего способа вызвать соответствующий метод, найденный в этот пост.

Подводя итог, необходимо вызвать RegisterCustomModule() в модуле DesignIntf, описанном здесь., TCustomModule нет (хотя есть TBaseCustomModule и TCustomModuleClass), а также базовый пользовательский модуль наследуется от TInterfacedObject, которого нет от TForm (используя FMX в качестве моего фреймворка).

Как правильно зарегистрировать форму FMX для отображения опубликованных свойств в последней версии Delphi?


person SmeTheWiz    schedule 28.06.2017    source источник


Ответы (1)


uses DesignEditors;

type
   TMySpecialForm = class(TCustomForm)
   end;


RegisterCustomModule(TMySpecialForm, TCustomModule);

RegisterCustomModule принимает 2 параметра: ComponentBaseClass и CustomModuleClass. Первый — это ваш пользовательский класс формы, который, конечно же, будет производным от TCustomForm. Второй — это класс, который будет использоваться дизайнером. Этот класс должен делать две вещи: наследоваться от TBaseCustomModuleDesignIntf модуле) и реализовывать интерфейс ICustomModule. Взгляните на комментарий в блоке DesignEditors, около строки 502.

Класс TCustomModule предоставляется для использования, если у вас нет другого поведения, кроме значения по умолчанию, которое можно добавить в пользовательскую форму во время разработки.

Если вам нужно какое-то пользовательское поведение для вашей формы в дизайнере, скажем, всплывающее меню с различными командами настройки свойств, вы должны создать свой собственный класс TCustomModule:

uses DesignEditors;

type
    TMySpecialFormDesigner = class(TCustomModule, ICustomModule)
        function GetVerb(Index: Integer): string; override;
        function GetVerbCount: Integer; override;
    end;

RegisterCustomModule(TMySpecialForm, TMySpecialFormDesigner);
person Dave Olson    schedule 28.06.2017
comment
спасибо, Дэйв, я понял требования, но я не знал, что класс TCustomModule был объявлен в модуле DesignEditors. Кроме того, оцените пример. - person SmeTheWiz; 28.06.2017