12

我一直在设计 FireMonkey 控件的样式,但是我遇到了一些实际问题,那就是如何使用 FireMonkey 样式设计器(而不是位图样式设计器)将位图合并到 FireMonkey 样式中。某些样式对象(例如 TButtonStyleObject)具有 BitmapLink 属性,但我看不到它们在为 FireMonkey 控件生成的新自定义样式中是如何工作的。

让我尝试使问题尽可能透明。我添加了一个样书并将其资源设置为 Delphi 样式目录中的 MetropolisUIGreen.Style(在 XE7 中,它位于 C:\Users\Public\Documents\Embarcadero\Studio\16.0\Styles)。然后我打开 FireMonkey 样式设计器并找到 buttonstyle 样式,它由一个 TButtonStyleObject 和一个 TButtonStyleTextObject 组成,它们都是 TLayout 的父级。TButtonStyleObject 具有 MetroGreenstyle.png 的 SourceLookup 属性值,它是一个 StyleName,与已加载 MetropolisUIGreen.png 图像的 TImage 相关联。

选择 TButtonStyleObject(其 StyleName 为背景)后,我检查 NormalLink 属性,它是 TBitmapLinks 的集合。据我了解,我在 NormalLink 中看到的一个 BitmapLink 包含有关应用于按钮的位图的信息,包括与 MetroGreenstyle.png 文件的矩形区域相对应的坐标 (SourceRect)。

我的假设似乎是错误的,因为当我使用图形程序检查 MetroGreenstyle.png 时,这些坐标没有什么有趣的地方。我检查了许多其他样式的 BitmapLinks,我也发现 SourceRect 坐标似乎并没有真正定义 stylelookup png 文件的有意义的区域。

我显然有这个错误。BitmapLink 的 SourceRect 坐标如何定义 FireMonkey 在呈现控件时应使用的位图。

- 编辑我实际上问了四个问题。我已经更新了这个问题,只包含一个问题。我将在另一篇文章中包含其他问题。--

4

2 回答 2

7

我认为.style文件中嵌入的位图(作为资源嵌入)和文件中存储的位图(C:\Users\Public\Documents\Embarcadero\Studio\15.0\Styles\MetropolisUIGreen.png,即 519x760)。

嵌入位图的大小似乎与外部文件不同(您可以通过查看样式编辑器、选择 metrogreenstyle.png 节点、打开 MultiResBitmap 的属性编辑器并查看为 Scale 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) 将.Style 文件中的PNG 值复制到XFM 文件中。注意还要修复 Width 和 Height 属性:

MultiResBitmap = <
  item
    Width = 750
    Height = 850
    PNG = {...}

4)你应该能够在设计时看到图片;

5) 添加一个按钮 Image1.Bitmap.SaveToFile('C:\temp\new_file.png'); 运行程序并将文件保存到您的磁盘。:-)

于 2014-11-24T20:19:37.090 回答
2

我想验证 Andreas 的解决方案。这就是我所做的。

  1. 按照 Andrea 的描述导出 .png
  2. 在 Photoshop 中打开 .png 并更改了一些不同的对象
  3. 从 Photoshop 中保存 .png
  4. 将其加载到我在步骤 1 中用于导出它的临时项目 TImage 中。
  5. Alt+F12 并将 png 内容复制到剪贴板
  6. 将其直接粘贴到我的 .style 文件中(使用 Ultraedit)
  7. 在 Delphi 的样式编辑器中加载 .style 文件

所有的颜色变化都立即反映在我的设计中。可能有更简单的方法,但我不知道。我在 XE10 西雅图做了这个。

于 2016-03-22T15:58:49.307 回答