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

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


xenon54

Вопрос

Сделал кастомный 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 эмодзи.

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

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

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

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