Перейти к содержанию
Fire Monkey от А до Я
  • 0

Стиль через наследование TCheckStyleObject


ddr 2

Вопрос

Пытаюсь реализовать CheckBox  с дополнительными визуальными представлениями, которые можно задавать в редакторе стилей.

Реализация: компонент созданный наследованием от TCheckBox и элемент стиля через наследование TCheckStyleObject.

Пока написал класс поражденный от TCheckStyleObject (код ниже). Тестирую поместив на форму компонент TCheckBox   и указываю ему в StyleLookup, стиль создванный с испозольванием класса поражденного от TCheckStyleObject, компонент успешно применяет Стиль, что я визуально наблюдаю. Т.е. в дизайнере все состовляющие стиля видны(зарегистрированы) и доступны. Но при запуске приложения ошибка: First chance exception at $77079962. Exception class EClassNotFound with message 'Class TCheckDUStyleObject not found'. Process TestCheckBox.exe (20216). Ошибка при  загрузке StyleBooka.

В чем может быть проблема?

Подозреваю, что проблема окажеться из разряда базовых "детских", поэтому описываю более подробно свои дейсвия. Возможно проблема в одном из этий действий.

По тестирование. На форму кидаю TCheckBox . На нем "Edit Custom Style...". В редакторе стилей появившемся стиле удаляю background(TCheckStyleObject) 

   CheckBoxStyle.png.24b7bcea064d85653d95b0a131a27c44.png

и заменяю его своим background(TCheckDUStyleObject) перетаскиванием из палитры и меняю часть свойств в т.ч. SourceLink и другие *Link, что бы в дальнейшем увидеть нужные визуальное предстваление. Закрываю редактор стилей. Меняю StyleLookup чекбокса на "CheckBoxNew". И его визуальное представление меняется, т.е. стиль УСПЕШНО применен. 

Про TCheckDUStyleObject.

Файл UCheckDUStyleObject содержащий класс, добавлен в пакет. Пакет собирается, компилируется инсталируется. Пути(Library Path) к нему пропысаны. Класс в палитре отображается.

unit UCheckDUStyleObject;

interface
uses FMX.Styles.Objects,System.Classes,FMX.Ani,FMX.Types;

 type
  TCheckDUStyleObject=class(TCheckStyleObject)
   protected type
    TLinkEx = (Pressed,ActivePressed,WaitingResponse,ActiveWaitingResponse,Disabled,ActiveDisabled);
    {$SCOPEDENUMS ON}
    TStateEx = (Active,Pressed, WaitingResponse, Disabled);
    {$SCOPEDENUMS OFF}
    TTransitionRec = record
      Animation: TAnimation;
      Event: TNotifyEvent;
    end;
   private

   protected
    FBitmapLinksEx: array [TLinkEx] of TBitmapLinks;
    FTransitionsEx: array [TStateEx] of TTransitionRec;
    FStateEx: set of TStateEx;
    procedure DefineProperties(Filer: TFiler); override;
    procedure SetupAnimations; override;
    function GetCurrentLink: TBitmapLinks; override;
    function GetLinkEx(Index: TLinkEx): TBitmapLinks;
    procedure SetLinkEx(Index: TLinkEx; const Value: TBitmapLinks);
    procedure ActiveTriggeredEx(Sender: TObject);
    procedure PressedTriggered(Sender: TObject);
    procedure WaitingResponseTriggered(Sender: TObject);
    procedure DisabledTriggered(Sender: TObject);
   public
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
    procedure StartTriggerAnimation(const AInstance: TFmxObject; const ATrigger: string); override;
   published
    property PressedLink: TBitmapLinks index TLinkEx.Pressed read GetLinkEx write SetLinkEx;
    property ActivePressedLink: TBitmapLinks index TLinkEx.ActivePressed read GetLinkEx write SetLinkEx;
    property WaitingResponseLink: TBitmapLinks index TLinkEx.WaitingResponse read GetLinkEx write SetLinkEx;
    property ActiveWaitingResponseLink: TBitmapLinks index TLinkEx.ActiveWaitingResponse read GetLinkEx write SetLinkEx;
    property DisabledLink: TBitmapLinks index TLinkEx.Disabled read GetLinkEx write SetLinkEx;
    property ActiveDisabledLink: TBitmapLinks index TLinkEx.ActiveDisabled read GetLinkEx write SetLinkEx;
  end;

procedure Register;

implementation

procedure Register;
begin
  RegisterComponents('Мои компоненты', [TCheckDUStyleObject]);
end;
// и т.д. Далее реализация TCheckDUStyleObject

 

 

Ссылка на комментарий

Рекомендуемые сообщения

  • 0
6 часов назад, ddr 2 сказал:

procedure Register; begin RegisterComponents('Мои компоненты', [TCheckDUStyleObject]); end;

там другие методы для регистрации.. не RegisterComponents, а что то другое..  RegisterFmxClasses...  посмотрите как регистрируется тот же самый TCheckStyleObject...  попробуйте, может получится.....

1715855746_.png.35e4a5aae2be9c0a3bb7a026dc72d1dd.png

Ссылка на комментарий

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить на вопрос...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...