首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在Delphi中只设计一个VCL组件

在Delphi中只设计一个VCL组件
EN

Stack Overflow用户
提问于 2012-12-25 13:39:09
回答 1查看 4.6K关注 0票数 7

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

EN

回答 1

Stack Overflow用户

发布于 2012-12-25 17:49:03

大多数VCL控件内部使用StyleServices全局函数来获取绘制控件的方法。因此,如果不使用Vcl样式,则StyleServices将一个实例返回到windows函数以绘制主题控件(UxTheme API )。因为没有办法只对单个类控件进行皮肤(应用Vcl样式)(至少您自己绘制控件)。

因此,唯一的选择是应用Vcl样式,然后禁用所有控件,但您要寻找的一种类型除外。

你可以用这样的东西

代码语言:javascript
运行
复制
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样式检查此表单

现在在调用上述方法之后

代码语言:javascript
运行
复制
DisableVclStyles(Self,'TButton');

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

票数 13
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14031125

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档