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

时间:2015-05-19 14:33:43

标签: delphi delphi-xe7 vcl-styles

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

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

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

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

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

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:2)

您可以使用StyleTStyleManager属性,当未加载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;