delphi - 如何检查样式文件是否已加载?

标签 delphi delphi-xe7 vcl-styles

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

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

但是,如果用户单击已经加载的样式(之前单击过),Delphi 将出现异常:“样式'Golden Graphite'已注册”。

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

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

最佳答案

您可以使用Style TStyleManager的属性(property),当未加载 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;

关于delphi - 如何检查样式文件是否已加载?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30328644/

相关文章:

delphi - 使用 Delphi 在网格面板中移动控件

delphi - 在64位Delphi程序中CreateOleObject?

delphi - 为 ListView Delphi XE7 创建自定义项目外观

Delphi TSplitter 闪烁问题

delphi - 如何从库的角度处理 COM(未)初始化?

delphi - 通过 COM 访问静态属性

delphi - 使用Canvas.TextOut有什么含义?

delphi - 如何在启用 VCL 样式的情况下更改 TPanel 的颜色?

Delphi XE2风格绘画

delphi - 如何获得 Firemonkey 中的默认系统颜色?