Использование TBitmapLinks с дизайнером стилей FireMonkey
Я стилизовал элементы управления FireMonkey, но есть одна проблема, с которой у меня возникли некоторые реальные проблемы, и это то, как включить растровые изображения в стили FireMonkey с помощью дизайнера стилей FireMonkey (и особенно не дизайнера стилей растровых изображений). Некоторые стилизованные объекты (например, TButtonStyleObject) имеют свойства BitmapLink, но я не вижу, как они работают в новых пользовательских стилях, созданных для элемента управления FireMonkey.
позвольте мне попробовать сделайте проблему максимально прозрачной. Я добавляю книгу стилей и устанавливаю ее ресурс в MetropolisUIGreen.Стиль в каталоге стилей Delphi (в XE7 это находится в C:UsersPublicDocumentsEmbarcaderoStudio16.0Styles). Затем я открываю конструктор стилей FireMonkey и нахожу стиль buttonstyle, состоящий из TButtonStyleObject и TButtonStyleTextObject, оба из которых являются родительскими для TLayout. TButtonStyleObject имеет значение свойства SourceLookup MetroGreenstyle.png, который является StyleName assoiated с Таймажем, в который Метрополитен-экран.загружено изображение png.
с выбранным TButtonStyleObject (чье имя стиля-background) я изучаю свойство NormalLink, которое представляет собой коллекцию TBitmapLinks. Насколько я понимаю, одна битовая ссылка, которую я вижу в NormalLink, содержит информацию о растровом изображении, которое должно использоваться для кнопки, включая координаты (SourceRect), соответствующие прямоугольной области Метрогринстайл.PNG-файл.
мои предположения кажутся неправильными, потому что когда я изучаю MetroGreenstyle.png используя графическую программу, в этих координатах нет ничего интересного. Я рассмотрел BitmapLinks многих других стилей, и там тоже я нахожу, что координаты SourceRect, похоже, на самом деле не определяют значимую область файла stylelookup png.
Я, очевидно, неправильно. Как координаты SourceRect BitmapLink определяют растровое изображение, которое FireMonkey должен использовать при отрисовке элемента управления.
-- Edit я на самом деле задал четыре вопроса. Я обновил вопрос, чтобы включить только один вопрос. Я включу другие вопросы в другой пост. --
2 ответов
Я думаю, что есть разница между растровый встроенный в .файл стиля (встроенный как ресурс) и тот, который хранится в файле (C:\Users\Public\Documents\Embarcadero\Studio\15.0\Styles\MetropolisUIGreen - ... png, то есть 519x760).
встроенное растровое изображение, похоже, отличается по размеру от внешнего файла (вы можете проверить это, посмотрев в Редакторе стилей, выбрав metrogreenstyle.png узел, открытие редактора свойств для MultiResBitmap и просмотр изображения размер предусмотренных шкалы 1.00: 750x850.
это объясняет, почему координаты кажутся неправильными. Я не знаю, является ли внешний файл устаревшим или наоборот.
HTH!
Update: мне удалось извлечь растровое изображение, хранящееся в.файл стиля, и я могу подтвердить, что координаты относительно этого растрового изображения!
обновление(2): .Стиль файлов и .файл FMX очень похожи, так что вы можете сделать:
1) Откройте MetropolisUIGreen.Стиль текста редактор и найдите встроенное растровое изображение (строка 18), вы можете увидеть:
object TImage
StyleName = 'MetroGreenstyle.png'
MultiResBitmap = <
item
Width = 0
Height = 0
PNG = {...}
2) Создайте новое приложение FMX, добавьте Таймаж в форму и загрузите растровое изображение (любое изображение, которое вы хотите)
3) скопируйте значение PNG из .Файл стиля в файл XFM. Остерегайтесь также исправить свойства ширины и высоты:
MultiResBitmap = <
item
Width = 750
Height = 850
PNG = {...}
4) Вы должны быть в состоянии видеть картину во время разработки;
5) добавьте кнопку с Image1.Растровый.SaveToFile ('C:\temp\new_file - ... ПНГ'); бежать программы и сохраните файл на жесткий диск. :-)
Я хотел бы проверить решение Andreas. Вот что я сделал.
- экспортировать .png, как описал Андреа
- открыл .png в Photoshop и изменил некоторые из различных объектов
- Спас .png из Photoshop
- загрузил его в Временное время проекта, которое я использовал для его экспорта на шаге 1.
- Alt+F12 и скопировал содержимое png в буфер обмена
- вставил его прямо в мой .файл стиля (с Ultraedit)
- загрузил .файл стиля в Редакторе стилей в Delphi
все изменения цвета были emediatly отражены в моем дизайне. Возможно, есть более простой способ, но я его не знаю. Я сделал это в Сиэтле XE10.