无法获取选定的 VCL 主题样式
Cannot get the selected VCL theme styles
在 Delphi 10.1 Berlin VCL 应用程序中,在 Appearance 页面的项目选项中,我在默认 [=32] 中添加了两种样式=] 风格:
在 FormShow
事件处理程序中,我有以下代码:
procedure TForm1.FormShow(Sender: TObject);
var
s: string;
begin
// Show all available in application styles:
ComboBox1.Items.BeginUpdate;
try
ComboBox1.Items.Clear;
for s in TStyleManager.StyleNames do
ComboBox1.Items.Add(s);
ComboBox1.Sorted := True;
ComboBox1.ItemIndex := ComboBox1.Items.IndexOf(TStyleManager.ActiveStyle.Name);
finally
ComboBox1.Items.EndUpdate;
end;
end;
但不幸的是,在运行时,组合框仅包含 ONE 项:默认 Windows 样式:
那么如何在项目选项中选中所有样式?
虽然 TStyleManager
是 Vcl.Themes
中的 class (包含在单元的 uses
子句中)并且问题中的代码示例不会产生任何编译器错误,TStyleManager.StyleNames
没有给出正确的结果:它没有返回在“项目选项”对话框中激活的附加 VCL 样式。
要使 TStyleManager.StyleNames
真正起作用,Vcl.Themes
和 Vcl.Styles
都必须包含在项目文件 (.DPR) 的 uses
子句中。 (我不确定文档中是否提到了这一点)。
我的测试证实了这一点。感谢@Uwe Raabe 的建议!
在 Delphi 10.1 Berlin VCL 应用程序中,在 Appearance 页面的项目选项中,我在默认 [=32] 中添加了两种样式=] 风格:
在 FormShow
事件处理程序中,我有以下代码:
procedure TForm1.FormShow(Sender: TObject);
var
s: string;
begin
// Show all available in application styles:
ComboBox1.Items.BeginUpdate;
try
ComboBox1.Items.Clear;
for s in TStyleManager.StyleNames do
ComboBox1.Items.Add(s);
ComboBox1.Sorted := True;
ComboBox1.ItemIndex := ComboBox1.Items.IndexOf(TStyleManager.ActiveStyle.Name);
finally
ComboBox1.Items.EndUpdate;
end;
end;
但不幸的是,在运行时,组合框仅包含 ONE 项:默认 Windows 样式:
那么如何在项目选项中选中所有样式?
虽然 TStyleManager
是 Vcl.Themes
中的 class (包含在单元的 uses
子句中)并且问题中的代码示例不会产生任何编译器错误,TStyleManager.StyleNames
没有给出正确的结果:它没有返回在“项目选项”对话框中激活的附加 VCL 样式。
要使 TStyleManager.StyleNames
真正起作用,Vcl.Themes
和 Vcl.Styles
都必须包含在项目文件 (.DPR) 的 uses
子句中。 (我不确定文档中是否提到了这一点)。
我的测试证实了这一点。感谢@Uwe Raabe 的建议!