我知道,可以禁用组件的自定义样式,但是如何为一个组件类启用样式呢?例如,让整个表单和它上的所有组件不被蒙皮,而只皮肤TButton。就像在这张照片上。

发布于 2012-12-25 17:49:03
大多数VCL控件内部使用StyleServices全局函数来获取绘制控件的方法。因此,如果不使用Vcl样式,则StyleServices将一个实例返回到windows函数以绘制主题控件(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');

注意:使用http://docwiki.embarcadero.com/Libraries/XE3/en/Vcl.Controls.TControl.StyleElements属性启用o禁用vcl样式不适用于某些组件(TStringGrid、TBitBtn、TSpeedButton等)
https://stackoverflow.com/questions/14031125
复制相似问题