在Delphi中仅为一个VCL组件设置样式

我知道,可以禁用组件的自定义样式,但是如何只为一个组件类启用样式?例如,将整个表格和所有组件留在上面,而皮肤只有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属性启用o禁用vcl样式不适用于某些组件(TStringGrid,TBitBtn,TSpeedButton等)

相关文章

 从网上看到《Delphi API HOOK完全说明》这篇文章,基本上都...
  从网上看到《Delphi API HOOK完全说明》这篇文章,基本上...
ffmpeg 是一套强大的开源的多媒体库 一般都是用 c/c+&#x...
32位CPU所含有的寄存器有:4个数据寄存器(EAX、EBX、ECX和ED...
1 mov dst, src dst是目的操作数,src是源操作数,指令实现的...