Перейти к содержанию
  • 0
xenon54

[TStyleBook] Что нужно сделать, чтобы использовать свой компонент в StyleBook?

Вопросы

Сделал кастомный TCustomRoundRect  (потомок TRoundRect), хочу использовать его в стилях, а не тут-то было. Такая вот ошибка появляется при запуске приложения.

Отредактировал Brovin Yaroslav

Поделиться сообщением


Ссылка на сообщение

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

  • 0

Приложение не запускается, ошибка выходит до старта. Очевидно, что все внутренние компоненты абракадабры скомпилины еще в какие-то ресурсы и где-то лежат, и новый компонент тоже нужно как-то туда допилить, вопрос как.

Поделиться сообщением


Ссылка на сообщение
  • 0

Нужно зарегистрировать ваш класс, чтобы система знала, что он есть.

initialization
  RegisterFmxClasses([TCustomRoundRect]);
end.

Регистрацию делают в секции инициализации.

 

Для справки

 

Стиль сохраняется в бинарном виде. Поэтому, когда идет чтение стиля из бинарного вида, то система должна знать, а экземпляр какого класса именно нужно создать при чтении. Названия класса не достаточно, так как классов с одним именем может быть несколько. Чтобы четко указать, нужно сделать регистрацию вашего класса. Этот подход так же используется и в VCL.

Поделиться сообщением


Ссылка на сообщение
  • 0

Пришел, увидел, победил! Почему-то думал что "RegisterComponents" достаточно для регистрации компонента и однозначной его идентификации в системе.

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

Отредактировал Brovin Yaroslav

Поделиться сообщением


Ссылка на сообщение
  • 0

Сделайте так (и уверен - будет работать, но придется каждый раз так делать)))) :

  • Открываете Ваш проект (с Вашим компонентом)
  • среда ругнется
  • закрываете проект (Close all)
  • снова открываете Ваш проект

и он откроется нормально :))

 

З.Ы. этот баг тянется уже давно....

Поделиться сообщением


Ссылка на сообщение
  • 0

Не катит. Нужно обязательно положить на какую-нить форму этот компонент и только после этого среда перестает ругаться. Я так понял что регистрация класса проходит только тогда, когда добавляешь этот компонент, т.е. срабатывает секция initialization. А нужно чтобы класс регистрировался с запуском среды, наверное, ну или я чего-то недопонимаю.

Поделиться сообщением


Ссылка на сообщение
  • 0

Если вы хотите, чтобы ваш класс компонента мог быть использован в TStyleBook, нужно пометить ваш дизайн тайм пакет, как всегда загружаемым:

ForceDemandLoadState(dlDisable);

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

Поделиться сообщением


Ссылка на сообщение

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

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

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

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

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

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

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

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


  • Похожий контент

    • От krapotkin
      А также Cannot find style resource fir Windows.
      Воспроизведение
      1. создать новое FMX приложение
      2. кинуть TSyleBook
      3. зайти по двойному щелчку
      4. попытаться добавить платформу
      результат (1)

      5. добавить Windows, Android. Удалить Default. закрыть StyleBook editor
      6. Положить кнопку, ПКМ, Edit Custom Style
      7. Результат

       
      если же просто сначала кинуть кнопку, сделать ПКМ, Edit custom Style, то картина совсем другая

      поэтому и не находит ни Windows ни Android   Соответственно Workaround - найти в FMX Platform = 'Android' и заменить на Platform = 'AndroidL Light' Platform = 'Windows' тоже возможно надо будет заменить, но с ней проблем вроде нет пока.     Все это делал на Windows 7 x64 Pro SP1  
    • От Ra72
      Уважаемые эксперты!
      Хочу написать свой редактор стилей для мобильных платформ.
      Для полного счастья не хватает знаний каким образом из TStyleBook.Style выгрузить его изменения в TStyleBook.Resource для последующего сохранения в файл.
       
    • От sviat9440
      Всем привет! Давно с вами не виделись)) Вот такая проблема есть: У меня Виндовс 10, и все корректно отображается. Я имею в виду стили. У меня на данный момент нет возможности протестировать приложение на Виндовс 7, но прилагаю скрины (Как должно/Как отображается). Вопрос: Проблема у меня? Или на стороне FireMonkey?
       
      Попутный вопрос: Если на стороне FireMonkey, то как узнать версию ОС, чтобы при запуске на вин7, сообщать пользователю что то типа "Твоя ОС не поддерживается"?
       
      Дополнительная информация: Используется Delphi XE 10 Seattle.


    • От Ra72
      Следующий код не работает на Android. На Win32 в FBinary записывается примерно 100 килобайт, а на Android - 36 байт.
      FBinary := TMemoryStream.Create; TStyleStreaming.SaveToStream(AStyleBook.Style, FBinary, TStyleFormat.Binary);
    • От Ra72
      Уважаемые эксперты!
      Подскажите, как сохранить StyleBook в текстовом формате *.style динамически (во время исполнения программы) ? Например:
      object TLayout Align = alClient Height = 715.000000000000000000 Position.Y = 33.000000000000000000 Width = 1162.000000000000000000 object TSwitchObject StyleName = 'switchstyle' ...
    • От Ra72
      Создал компонент:
      type TTube = class(TFmxObject) private FTheColor: TAlphaColor; public constructor Create(AOwner: TComponent); override; published property TheColor: TAlphaColor read FTheColor write FTheColor; end; constructor TTube.Create(AOwner: TComponent); begin inherited; FTheColor := $FFFFFFFF; end; Вставил его в StyleBook.
      object TTube StyleName = 'tube1' TheColor = claViolet end Ищу его в стилизованном контроле:
       
      var tube: TTube; begin tube := ATarget.FindStyleResource('tube1') as TTube; Не находится компонент. 
      Стандартные Text, Rectangle... находятся таким способом, а свой - нет.
      Что я делаю не так?
    • От basnik
      Требуется консультация по составлению интерфейса и его верстка по готовому макету.
      ОС:Android
      Платформа: Delphi XE7
       
      Задачи: 
      - Создание стилей для FireMonkey 
      - Верстка интерфейса по макету 
      Требования: 
      - Опыт разработки мобильных приложений и интерфейсов 
      - Желание работать в команде 
      - Внимательность, способность выполнять работу качественно и в установленные сроки 
      - Коммуникабельность, адекватное восприятие критики, дисциплинированность и ответственность
       
      Работа удаленная, оплата по договоренности.
       
      Skype: basnik31
      ICQ: 629993
    • От ANovokreschenov
      Поставил XE7, создаю новое приложение FMX, добавляю на форму StyleBook, захожу в Style Designer, добавляю TLayout и в него добавляю TRectangle, в дереве объектов выделяю TRectangle, но он не выделяется в дизайнере, если попробовать потянуть его мышкой в дизайнере, то он улетает в правый нижний угол окна дизайнера... Пробовал разные комбинации, результат один и тот же - невозможно выделять и манипулировать объектами в дизайнере... Баг подтвержденный, есть в QC... А есть ли какой-то workaround/path для этой проблемы? Или ждать Update N или XE 8?
       
      Использую в работе Delphi более 12 лет, лучшая версия - Delphi 7, все что после - слабая надежда на кроссплатформу... сейчас смотрю на C# и Xamarin...
       
      Для чего такой продукт и тем более за такие деньги?
    • От ovk
      Прошу помощи,как вывести иконки в ListView которые хранятся в StyleBook ?
      у меня есть база,в ней хранятся ID иконок, которые нужно выводить,в StyleBook лежат иконки, может у кого есть подобный опыт?!
    • От kvantum
      Здравствуйте ! 
       
      В TStyleBook созданы стили для TLisboxItem и TListBox. При компилировании приложения для Win32 созданные стили видны, при компилировании приложения под Андроид стили заменяются на дефолтные.
       
      Как перенести пользовательские стили на Андроид - платформу?
      CustomStyle.zip
  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

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