我一直在设计FireMonkey控件,但有一个问题我遇到了一些实际问题,那就是如何使用FireMonkey样式设计器(特别是Bitmap样式设计器)将位图合并到FireMonkey样式中。某些样式化对象(例如,TButtonStyleObject)具有BitmapLink属性,但我无法看到它们如何在为FireMonkey控件生成的新自定义样式中工作。
让我尽量让问题透明化。我添加了一个样书并将其资源设置为Delphi样式目录中的MetropolisUIGreen.Style(在XE7中,它位于C:\ Users \ Public \ Documents \ Embarcadero \ Studio \ 16.0 \ Styles中)。然后我打开FireMonkey样式设计器并找到按钮式样式,它由TButtonStyleObject和TButtonStyleTextObject组成,两者都是TLayout的父级。 TButtonStyleObject的SourceLookup属性值为MetroGreenstyle.png,它是一个StyleName,与加载了MetropolisUIGreen.png图像的TImage相关联。
选择TButtonStyleObject(其StyleName为背景),我检查NormalLink属性,它是TBitmapLinks的集合。据我所知,我在NormalLink中定义的BitmapLink包含有关应该用于按钮的位图的信息,包括与MetroGreenstyle.png文件的矩形区域对应的坐标(SourceRect)。
我的假设似乎是错误的,因为当我使用图形程序检查MetroGreenstyle.png时,这些坐标没有什么有趣的。我已经检查了许多其他样式的BitmapLinks,我也发现SourceRect坐标似乎没有实际定义stylelookup png文件的有意义区域。
我显然有这个错误。 BitmapLink的SourceRect坐标如何定义FireMonkey在渲染控件时应使用的位图。
- 编辑我实际问了四个问题。我已将此问题更新为仅包含一个问题。我将在其他帖子中包含其他问题。 -
答案 0 :(得分:4)
我认为.style文件中嵌入的位图(作为资源嵌入)与存储在文件中的位图(C:\ Users \ Public \ Documents \ Embarcadero \ Studio \ 15.0 \ Styles \ MetropolisUIGreen)之间存在差异.png,即519x760)。
嵌入式位图的大小似乎与外部文件不同(您可以通过查看样式编辑器,选择metrogreenstyle.png节点,打开MultiResBitmap的属性编辑器并查看为Scale提供的图像大小来检查它1.00:750x850。
这解释了为什么坐标看起来都错了。我不知道外部文件是否过时或相反。
HTH!
更新:我设法提取存储在.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文件中。注意还要修复宽度和高度属性:
MultiResBitmap = <
item
Width = 750
Height = 850
PNG = {...}
4)你应该能够在设计时看到图片;
5)添加一个带Image1.Bitmap.SaveToFile的按钮('C:\ temp \ new_file.png'); 运行程序并将文件保存到磁盘。 : - )
答案 1 :(得分:0)
我想验证Andreas的解决方案。这就是我所做的。
所有的颜色变化都在我的设计中得到了体现。可能有一种更简单的方法,但我不知道。我是在XE10西雅图做到的。