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