Delphi 如何启用应用程序范围的配色方案?

Delphi 如何启用应用程序范围的配色方案?,delphi,background-color,color-scheme,Delphi,Background Color,Color Scheme,我想将配色方案应用于我的应用程序。这是通过将所有组件的ParentColor设置为true以及ParentBackground和ParentFont来实现的。当我改变窗体颜色时,一切都会改变。有一个例外:工具栏和工具按钮不会改变。是否可以使用表单的颜色更改它们,或者我必须以单独的方式实现它们 字体颜色也是如此,但这有点奇怪。当我更改表单的字体颜色时,groupbox标题的字体颜色不会更改,但标签标题的标题(也在groupbox内部)会更改 当实现某种允许用户选择自己颜色的方法时,这是一种方法(更

我想将配色方案应用于我的应用程序。这是通过将所有组件的
ParentColor
设置为
true
以及
ParentBackground
ParentFont
来实现的。当我改变窗体颜色时,一切都会改变。有一个例外:工具栏和工具按钮不会改变。是否可以使用表单的颜色更改它们,或者我必须以单独的方式实现它们

字体颜色也是如此,但这有点奇怪。当我更改表单的字体颜色时,groupbox标题的字体颜色不会更改,但标签标题的标题(也在groupbox内部)会更改


当实现某种允许用户选择自己颜色的方法时,这是一种方法(更改表单颜色,使所有组件都设置了
ParentColor
set),还是有更好的方法来实现这一目标

实现这一点的一种方法是使用
接口

这是一项(手动)工作,但如果您想以简单的方式完成,您可以简单地定义一个接口并确保所有表单都实现该接口

例如:

type ITheme = interface
  procedure SetTheme(const AColor : TColor);
end;
然后在每个表单中都可以实现这个接口

因此,要更改所有窗体的颜色,只需调用1个函数:

procedure SetGlobalTheme(const AColor : TColor);
var Intf : ITheme;
begin
  for i:=0 to screen.Formcount-1 do
  begin
    if Supports(Screen.Forms[i],ITheme,intf) then
      intf.SetTheme(AColor);
  end;
end;

使用此方法,您可以完全控制每个组件的颜色,尽管还需要进行一些编码。另一种选择是使用VCL样式(如果您的IDE支持)

许多Windows控件的设计不支持任意颜色。Delphi的最新版本XE2引入了一个称为VCL样式的新特性。这可能是实现所需内容的最简单、最快捷的方法。其中一些内容(如分组框、复选框或单选按钮)可能会受到主题的影响,因此您无法为它们指定字体或父字体。您必须修改它们以获得此支持。或者你可以得到Delphi XE2,正如David所指出的,其中是VCL样式。这意味着要不断枚举你想要更改的组件,并为它们指定你想要的颜色。我希望我忘记了什么:-)我还没有XE2,但这个VCL方案听起来很有趣。谢谢你的帮助!阿诺德;你的问题也可以简单地被问到“我如何皮肤,或主题,我的应用程序”,因此,是一种重复。XE2之前的版本有很多旧技术,但最简单的答案是按照David的建议,使用XE2和其中的新“VCL主题”支持。如果我有很多表单,这可能是一个有用的提示,但我只有一个,通过这个问题,我希望学习如何避免像现在这样手动实现颜色。