造型在Delphi中只有一个VCL组件(Styling only one VCL component

2019-07-17 13:42发布

我知道,这是可能的禁用成分定制造型,但我怎么可以启用只有一个组件类样式? 例如离开整个窗体和无表层上的所有组件,并且皮肤只有TButton的。 这样的形象上。

Answer 1:

大部分的VCL控件内部使用StyleServices全局函数来获取方法绘制控制。 所以,如果你不使用VCL的款式, StyleServices返回一个实例到Windows API函数来绘制主题的控件(API的Uxtheme的)。 因为没有办法皮肤(适用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等)的某些部件的工作方式



文章来源: Styling only one VCL component in Delphi