【问题标题】:How to apply a custom style to a custom Firemonkey component using Delphi Seattle如何使用 Delphi Seattle 将自定义样式应用于自定义 Firemonkey 组件
【发布时间】:2016-07-29 15:06:55
【问题描述】:

我有一个为 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 中实现这一目标?

【问题讨论】:

  • 没有XE10。你是说 Delphi 10 Seattle 吗?
  • 是的。最新的德尔福。

标签: delphi delphi-10-seattle firemonkey-style


【解决方案1】:

首先,我认为检查 StyleLookup 是不正确的。此属性告诉组件在样式簿中查找此特定样式名称。

然后,您尝试在组件级别加载样式文件。 FMX 确实像这样工作。你有一本样式书,它加载样式文件,然后表单中的每个组件都使用这本书来定位由 stylelookup 值定义的样式名称。

在我看来,这一系列的行动应该可以完成这项工作:

  1. 将样式文件添加到项目的资源中,就像您已经完成的那样。假设您的组件有一个名为“mycomponent”的样式

  2. 在表单中添加样式书

  3. 在表单的 OnCreate 中,将资源文件加载到 TResourceStream,然后使用 TStyleBook.LoadFromStream 将最后一个加载到样式簿

  4. 现在您可以通过设置组件的 StyleLookup='mycomponent' 属性来访问样式

希望这会有所帮助。

【讨论】:

  • 谢谢。不幸的是,TStylebook 没有 LoadFromresource 的属性。此外,我曾经在设计时将样式添加到我的自定义组件中。我希望仍然能够做到这一点。
  • 克里斯托,对不起,我的意思是 TStylebook.LoadFromStream。我在帖子中更正了。
  • 谢谢你,我搞定了。我现在只需要让它在设计时工作,而不仅仅是在运行时。有什么建议吗?
  • 如果你想在设计时加载它,为什么要在运行时加载它?您可以直接将样式文件加载到样式管理器中
  • 嗨,约翰。如果您查看我在问题中的示例代码,您会发现我确实是通过样式管理器完成的。问题是 Delphi Seattle 没有 TStyleManager 类中的功能。但是,正如我在下面的回答中所述,他们将其移至 TStyleStreaming。
【解决方案2】:

我找到了解决方案。谢谢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;

【讨论】:

    猜你喜欢
    • 2019-10-18
    • 2017-01-16
    • 1970-01-01
    • 1970-01-01
    • 2015-09-12
    • 1970-01-01
    • 2019-03-03
    • 2020-08-02
    • 2018-01-15
    相关资源
    最近更新 更多