Использование 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'); Запустите программу и сохраните файл на свой диск.:-)

Я хотел бы проверить решение Андреаса. Это то, что я сделал.

  1. Экспортировал.png, как описала Андреа
  2. Открыл.png в Фотошопе и изменил некоторые из различных объектов
  3. Сохранено.png из фотошопа
  4. Загрузил его в временный проект TImage, который я использовал для экспорта в шаге 1.
  5. Alt + F12 и скопировал содержимое PNG в буфер обмена
  6. Вставил его прямо в мой файл.style (с Ultraedit)
  7. Загружен файл.style в редакторе стилей в Delphi.

Все изменения цвета были немедленно отражены в моем дизайне. Возможно, есть более простой способ, но я этого не знаю. Я сделал это в Сиэтле XE10.

Другие вопросы по тегам