我在FireMonkey(Delphi XE5)中编写了一个自定义组件(TGMailLabel),一切似乎都没问题但是当我在FireMonkey(桌面)表单上有一个组件实例并尝试“编辑自定义样式”时,IDE会放置正确地在我的表单上的TStyleBook实例并打开样式设计器但没有项目。
如果你做同样的事情,但试图“编辑默认样式”,它可以工作......
您可以在http://blog.delphiedintorni.it/2013/11/tgmaillabel-un-esempio-di-custom.html的博文中找到完整的源代码 (文章末尾有完整源代码zip的链接)
function TGMailLabel.GetStyleObject(const Clone: Boolean): TFmxObject;`
begin
if (StyleLookup = '') then
Result := TFmxObject(TStyleManager.LoadFromResource(HInstance, GMailLabelStyleName, RT_RCDATA))
else
Result := inherited GetStyleObject(Clone);
end;
此方法实现完全正确吗?
答案 0 :(得分:0)
组件供应商使用加载样式的方法,即重写GetStyleObject,因为它使最终用户更容易安装和使用它们的组件。实际上,在完成开发后,它可以是部署自己的组件的有用方法,因为它解决了FireMonkey管理样式的一些不足之处。但是,它还绕过了样式系统的一些默认行为,这些行为在开发和编辑样式时非常有用。
通常,FireMonkey会根据组件类名称或StyleLookup属性在活动样式和任何样式书中搜索合适的样式。您正在使用的代码直接从资源加载它的样式,并忽略活动样式和样式书中的任何内容,但如果设置了StyleLookup,它会保留默认行为。
要编辑样式,您需要将其加载到样式簿组件中。首先,您需要将样式包装在TLayout中,
object TLayout
...Your style here
end
(不要担心缩进)。
现在,您可以双击样式簿并打开文件。
通过获取组件的类名,删除T并附加“style”,设置样式的StyleName(它的“root”对象)。例如。 TMyEdit将成为'myeditstyle'。
注释掉你的GetStyleObject例程,你的组件应该选择样式。
现在你遇到了部署问题。