【问题标题】:How to check if a style file is already loaded?如何检查样式文件是否已加载?
【发布时间】:2015-05-19 14:33:42
【问题描述】:

我有一个列出文件夹中所有样式文件 (vsf) 的 ListBox。 当用户单击文件时,我会加载该样式:

 if TStyleManager.IsValidStyle(sSkinFile, StyleInfo) then
  begin
   TStyleManager.LoadFromFile(sSkinFile);
   TStyleManager.SetStyle(StyleInfo.Name);
  end

但是,如果用户点击一个已经加载的样式(之前被点击过),Delphi 会出现异常:“样式‘Golden Graphite’已经注册”。

注意:加载新样式时,系统似乎不会释放以前的样式。我认为如果用户开始点击所有列出的样式,内存消耗会更高一些。

如何检查样式是否已加载?

【问题讨论】:

    标签: delphi delphi-xe7 vcl-styles


    【解决方案1】:

    您可以使用TStyleManagerStyle 属性,当未加载VCL 样式时,此属性将返回nil。试试这个示例。

    uses
      Vcl.Styles,
      Vcl.Themes;
    
    function  VCLStyleLoaded(StyleName : string) : Boolean;
    begin
     Result := TStyleManager.Style[StyleName] <> nil;
    end;
    
    procedure TForm1.Button1Click(Sender: TObject);
    var
     StyleInfo: TStyleInfo;
    begin
      if OpenDialog1.Execute then
      begin        
        if TStyleManager.IsValidStyle(OpenDialog1.FileName, StyleInfo)  and not VCLStyleLoaded(StyleInfo.Name) then
        begin
         TStyleManager.LoadFromFile(OpenDialog1.FileName);
         TStyleManager.SetStyle(StyleInfo.Name);
        end
      end;
    end;
    

    【讨论】:

    • @rruz-我今天发现了一些奇怪的东西:如果 Vcl.Styles 不在使用列表中,TStyleManager.IsValidStyle 总是失败!!!!我的意思是,程序编译时没有警告;但功能失败。
    【解决方案2】:

    您可以调用TStyleManager.TrySetStyle 并仅在失败时加载样式。

    【讨论】:

    • 谢谢。公认。这种方法是反直觉的。我正在挖掘主题单元代码以获得更像德尔福的东西,例如:如果不是 StyleRegistered(x) 那么 LoadFromFile(y) :)
    • @TLama-它必须与磁盘 (vcf) 文件一起使用。但我明白了。我现在可以做到。非常感谢。 +1
    • 不客气!该函数的输入就足够了,因为您在调用IsValidStyle 时获得了StyleInfo。类似的检查在内部完成并产生EDuplicateStyleException
    • 当您的代码部分在加载后激活样式时,我的印象是无论如何都应该激活列表框选择。然后if not TrySetStyle the begin LoadFromFile; SetStyle end; 看起来很明显。
    【解决方案3】:

    我今天发现了一些奇怪的东西:如果 Vcl.Styles 不在USES 列表中,TStyleManager.IsValidStyle 总是失败!!


    解决方案: 只需将 Vcl.Styles 添加到 Uses 列表即可。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-11-29
      • 1970-01-01
      • 2021-07-20
      • 2012-07-03
      • 1970-01-01
      • 1970-01-01
      • 2021-01-13
      • 2018-08-22
      相关资源
      最近更新 更多