Delphi 无法获取选定的VCL主题样式
在Delphi 10.1 Berlin VCL应用程序中,在外观页面的项目选项中,我向默认的窗口样式添加了两种样式: 在Delphi 无法获取选定的VCL主题样式,delphi,vcl-styles,delphi-10.1-berlin,Delphi,Vcl Styles,Delphi 10.1 Berlin,在Delphi 10.1 Berlin VCL应用程序中,在外观页面的项目选项中,我向默认的窗口样式添加了两种样式: 在FormShow事件处理程序中,我有以下代码: procedure TForm1.FormShow(Sender: TObject); var s: string; begin // Show all available in application styles: ComboBox1.Items.BeginUpdate; try ComboBox1.
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;
但不幸的是,在运行时,组合框只包含一个项:默认的Windows样式:
那么,如何在项目选项中检查所有样式呢?而
TStyleManager
是Vcl.Themes
中的一个类(包含在单元的uses
子句中),并且问题中的代码示例不会产生任何编译器错误,TStyleManager.StyleNames
没有给出正确的结果:它没有返回在“项目选项”对话框中激活的其他VCL样式
要使TStyleManager.StyleNames
实际工作,项目文件(.DPR)的uses
子句中必须包含Vcl.Themes
和Vcl.Styles
。(我不确定文件中是否提到了这一点)
我的测试已经证实了这一点。感谢@Uwe Raabe的建议 你的代码非常适合我。我在组合框中看到所有三种样式名称。我看到的唯一区别是在外观对话框的屏幕盖上;在我的列表中,当我下拉列表时,它是按字母顺序排序的,而你的不是。(事实上,这不正确;如果我退出对话框并返回,它们将再次被取消排序并与您的匹配。)是否有其他选项来激活/注册VCL样式?没有。我正在设置一台新机器,因此我在一个漂亮、干净的柏林安装上进行了测试。你绝对没有什么特别需要做的。(实际上,我复制并粘贴了您的代码,除了在表单上删除组合框并将Vcl.Themes添加到uses子句之外,我没有做其他任何事情。)您需要在dpr uses部分中使用Vcl.Themes和Vcl.style。嗯,至少在您选择非Windows Themes.BTW时IDE包括了这一点,不幸的是,“模态”错误仍然没有修复:当在模态对话框中更改VCL样式时,该对话框将丢失其模态!