我知道,可以禁用组件的自定义样式,但我怎样才能只为一个组件类启用样式?例如,让整个表单和其上的所有组件不蒙皮,并且只给 TButton 蒙皮。就像在这张图片上一样。

我知道,可以禁用组件的自定义样式,但我怎样才能只为一个组件类启用样式?例如,让整个表单和其上的所有组件不蒙皮,并且只给 TButton 蒙皮。就像在这张图片上一样。

大多数 VCL 控件在内部使用StyleServices全局函数来获取绘制控件的方法。因此,如果您不使用 Vcl 样式,则将StyleServices实例返回给 windows API 函数以绘制主题控件(UxTheme API)。因为没有办法将皮肤(应用 Vcl 样式)仅应用于单个类控件(至少您自己绘制控件)。
因此,唯一的选择是应用 Vcl 样式,然后禁用除您要查找的一种类型之外的所有控件。
你可以使用这样的东西
procedure DisableVclStyles(Control : TControl;const ClassToIgnore:string);
var
i : Integer;
begin
if Control=nil then
Exit;
if not Control.ClassNameIs(ClassToIgnore) then
Control.StyleElements:=[];
if Control is TWinControl then
for i := 0 to TWinControl(Control).ControlCount-1 do
DisableVclStyles(TWinControl(Control).Controls[i], ClassToIgnore);
end;
使用 Vcl 样式检查此表单

现在在调用上述方法之后
DisableVclStyles(Self,'TButton');

注意:使用StyleElements属性来启用或禁用 vcl 样式不适用于某些组件,例如(TStringGrid、TBitBtn、TSpeedButton 等)