我为Firemonkey(fmx)创建了一个自定义Delphi组件。我现在需要将自定义样式应用于组件。样式保存在资源中。以前,这是通过调用GetStyleObject
在TStyleManager.LoadFromResource
方法中完成的。
此方法(LoadFromResource
)在Delphi 10 Seattle中不再存在Firemonkey框架。
我在XE7中的代码正在使用LoadFromResource
:
function TFMXPic.GetStyleObject: TFmxObject;
var
style : string;
begin
if (StyleLookup = '') then
begin
style := GetClassStyleName;
Result := TControl(TStyleManager.LoadFromResource(HInstance,
style, RT_RCDATA));
Exit;
end;
Result := inherited GetStyleObject;
end;
如何在Delphi 10 Seattle实现这一目标?
答案 0 :(得分:1)
首先,我认为检查StyleLookup是不正确的。此属性告诉组件在样式簿中查找此特定样式名称。
然后,您尝试在组件级别加载样式文件。 FMX确实像这样工作。你有一个样式书,它加载样式文件,然后表单中的每个组件都使用这本书来定位样式名称,由stylelookup值定义。
在我的脑海中,这一行动应该起到作用:
将样式文件添加到项目资源中,就像您已经完成的那样。假设您的组件有一个名为“mycomponent”的样式
以
在OnCreate表格中,将资源文件加载到TResourceStream,然后使用TStyleBook.LoadFromStream将最后一个加载到样式簿
现在您可以通过设置组件的StyleLookup ='mycomponent'属性来访问该样式
希望这会有所帮助。
答案 1 :(得分:0)
我找到了解决方案。谢谢你们在TMS软件。应该使用TStyleStreaming类而不是TStyleManager类。我修改了我的代码如下(一切正在运行)
function TMyComponent.GetStyleObject: TFmxObject;
var
style : string;
begin
if (StyleLookup = '') then
begin
style := GetClassStyleName;
Result := TControl(TStyleStreaming.LoadFromResource(HInstance,
style, RT_RCDATA));
Exit;
end;
Result := inherited GetStyleObject;
end;