在Delphi中仅为一个VCL组件设置样式
发布时间:2020-12-15 10:04:54 所属栏目:大数据 来源:网络整理
导读:我知道,可以禁用组件的自定义样式,但是如何只为一个组件类启用样式?例如,将整个表格和所有组件留在上面,而皮肤只有TButton.喜欢这张图片. 解决方法 大多数VCL控件在内部使用 StyleServices 全局函数来获取绘制控件的方法.因此,如果您不使用Vcl样式,StyleSer
我知道,可以禁用组件的自定义样式,但是如何只为一个组件类启用样式?例如,将整个表格和所有组件留在上面,而皮肤只有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等) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |