【问题标题】:Cannot get the selected VCL theme styles无法获取选定的 VCL 主题样式
【发布时间】:2016-06-27 20:26:36
【问题描述】:

在 Delphi 10.1 Berlin VCL 应用程序中,在 Appearance 页面上的 Project Options 中,我为默认 Windows 样式添加了两种样式:

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 样式:

那么如何在项目选项中检查所有样式?

【问题讨论】:

  • 您的代码非常适合我。我在组合框中看到了所有三个样式名称。我看到的唯一区别是外观对话框的屏幕截图;在我的列表中,当我下拉列表时,它是按字母顺序排序的,而你的不是。 (实际上,这是不正确的;如果我退出对话框并返回,它们将再次未排序并与您的匹配。)
  • 是否有额外的选项来激活/注册 VCL 样式?
  • 没有。我正在设置一台新机器,所以我在柏林安装了一个漂亮、干净的设备。你绝对没有什么特别需要做的。 (实际上,我复制并粘贴了您的代码,除了将组合框放在表单上并将 Vcl.Themes 添加到 uses 子句之外,我什么也没做。)
  • 你需要 Vcl.Themes 和 Vcl.Styles 在 dpr 使用部分。
  • 好吧,至少当您选择非 Windows 主题时 IDE 包含了这些内容。

标签: delphi vcl-styles delphi-10.1-berlin


【解决方案1】:

虽然TStyleManagerVcl.Themes 中的一个类(包含在单元的uses 子句中)并且问题中的代码示例不会产生任何编译器错误,但TStyleManager.StyleNames 不会给出正确的结果:它不会返回在“项目选项”对话框中激活的其他 VCL 样式。

要使TStyleManager.StyleNames 真正起作用,Vcl.ThemesVcl.Styles 都必须包含在项目文件 (.DPR) 的 uses 子句中。 (我不确定文档中的某处是否提到了这一点)。

我的测试已经证实了这一点。感谢@Uwe Raabe 的建议!

【讨论】:

  • 顺便说一句,不幸的是,“模态”错误仍未修复:在模态对话框中更改 VCL 样式时,此对话框失去其模态!
猜你喜欢
  • 2013-09-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多