如何检查样式文件是否已经加载?
How to check if a style file is already loaded?
我有一个列表框,其中列出了一个文件夹中的所有样式文件 (vsf)。
当用户单击文件时,我加载该样式:
if TStyleManager.IsValidStyle(sSkinFile, StyleInfo) then
begin
TStyleManager.LoadFromFile(sSkinFile);
TStyleManager.SetStyle(StyleInfo.Name);
end
但是,如果用户单击已经加载的样式(之前单击过),Delphi 将上升并出现异常:"Style 'Golden Graphite' already registered"。
注意:貌似加载新样式时系统不会释放之前的样式。我认为如果用户开始单击所有列出的样式,内存消耗会更高一些。
如何检查样式是否已加载?
您可以调用TStyleManager.TrySetStyle
并仅在失败时加载样式。
您可以使用 Style
property of the TStyleManager
,当未加载 VCL 样式时,此 属性 将 return 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;
我今天发现了一些奇怪的事情:如果 Vcl.Styles 不在 USES 列表中,TStyleManager.IsValidStyle 总是失败!!
解决方案:
只需将 Vcl.Styles 添加到使用列表即可。
我有一个列表框,其中列出了一个文件夹中的所有样式文件 (vsf)。 当用户单击文件时,我加载该样式:
if TStyleManager.IsValidStyle(sSkinFile, StyleInfo) then
begin
TStyleManager.LoadFromFile(sSkinFile);
TStyleManager.SetStyle(StyleInfo.Name);
end
但是,如果用户单击已经加载的样式(之前单击过),Delphi 将上升并出现异常:"Style 'Golden Graphite' already registered"。
注意:貌似加载新样式时系统不会释放之前的样式。我认为如果用户开始单击所有列出的样式,内存消耗会更高一些。
如何检查样式是否已加载?
您可以调用TStyleManager.TrySetStyle
并仅在失败时加载样式。
您可以使用 Style
property of the TStyleManager
,当未加载 VCL 样式时,此 属性 将 return 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;
我今天发现了一些奇怪的事情:如果 Vcl.Styles 不在 USES 列表中,TStyleManager.IsValidStyle 总是失败!!
解决方案: 只需将 Vcl.Styles 添加到使用列表即可。