【问题标题】:Delphi Firemonkey - loading style at runtimeDelphi Firemonkey - 在运行时加载样式
【发布时间】:2023-03-21 04:16:02
【问题描述】:

我已从......\RAD Studio\9.0\Styles 中将几个示例样式作为资源加载到我的项目中,并且我“只是”尝试在运行时加载其中一个。

我正在使用以下代码来尝试这样做:

var
  vResourceStream : TResourceStream;
begin

  vResourceStream := TResourceStream.Create( HInstance, 'DARKSTYLE', RT_RCDATA );

  try
    StyleBook1.LoadFromStream( vResourceStream );
  finally
    vResourceStream.Free;
  end;

它编译好,但是当我运行它时,我得到了一堆错误,第一个是“属性对齐不存在”,然后是“读取 TStyleBook.Align 时出错:属性对齐不存在”,这似乎是为了一堆更多的属性,高度等。

有人可以指点一下如何解决吗?

【问题讨论】:

    标签: delphi styles runtime firemonkey


    【解决方案1】:

    并不是我对 FMX 有一点了解,而是 AFAIU 的 .style 文件是 resource 定义文件。您应该读取其资源,而不是从流中读取样式书对象:

    StyleBook1.Resource.LoadFromStream( vResourceStream );
    

    【讨论】:

    • 忽略我。由于某种原因,当用户单击 TListBox 时,该过程会触发两次。所以,你的答案是正确的。非常感谢你。我现在必须解决奇怪的列表框行为:)
    【解决方案2】:

    作为参考,TStyleBook 中有LoadFromStreamLoadFromFile 方法,但也有带有额外LoadFromResource 实用方法的TStyleStreaming 类(除了它自己的LoadFromStream 和LoadFromFile)。可能他们也应该向 TStyleBook 类添加一个 LoadFromStream (猜想它会调用相应的 TStyleStreaming 类)

    【讨论】:

    • 顺便说一句,可以选择使用带有多个样书的 DataModule,而不是使用 RCDATA 资源,并从他们想要的表单的相应属性中引用特定的样书(在他们“使用"这些表单的单元中的 DataModule 的单元),或者告诉样书他们希望从该 DataModule 使用 StyleManager(将属性 UseStyleManager 设置为 true,在他们将旧的设置为 false 之后)。请注意,您可以以任何形式显式覆盖样书
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-05-15
    • 2013-10-25
    • 2017-10-13
    • 2019-05-09
    • 2014-08-28
    • 2012-06-08
    • 2016-01-28
    相关资源
    最近更新 更多