加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

如何在Delphi中禁用VCL样式

发布时间:2020-12-15 10:17:18 所属栏目:大数据 来源:网络整理
导读:我在Delphi XE2中使用新的VCL风格系统。它的功能非常好,但我希望禁用它的一个特定的形式,其上有一些图像(一个飞溅/关于表单)。问题是,我似乎找不到将其与特定样式相关联的窗体的属性,因此无法禁用该窗体。只有似乎是全局TStyleManager类似乎是静态的。
我在Delphi XE2中使用新的VCL风格系统。它的功能非常好,但我希望禁用它的一个特定的形式,其上有一些图像(一个飞溅/关于表单)。问题是,我似乎找不到将其与特定样式相关联的窗体的属性,因此无法禁用该窗体。只有似乎是全局TStyleManager类似乎是静态的。

考虑到这一点,实现这一点的唯一方法是调用TStyleManager.TrySetStyle(‘Windows’),显示窗体,然后在窗体关闭时将其设置回原始样式?

解决方法

VCL样式将皮肤应用于所有VCL应用程序,但您可以禁用特定控件类的VCL样式。因此,如果要禁用特定表单的VCL样式,可以使用传递表单类型的 RegisterStyleHook函数和作为空样式钩子类的TStyleHook类。

这行代码将禁用所有类型为TFormChild的VCL样式:

TStyleManager.Engine.RegisterStyleHook(TFormChild,TStyleHook);

现在,如果您运行此代码,则表单的所有控件,TFormChild仍将使用VCL样式绘制,因此要修复,您必须使用此类技巧禁用表单的所有控件的默认样式钩子

unit uChild;

interface

uses
  Winapi.Windows,Winapi.Messages,System.SysUtils,System.Variants,System.Classes,Vcl.Graphics,Vcl.Controls,Vcl.Forms,Vcl.Dialogs,Vcl.StdCtrls;

type
  TButton   = class(Vcl.StdCtrls.TButton); //This declaration is only for disabling the TButton of this form
  TFormChild = class(TForm)
    Button1: TButton;
  private
    { Private declarations }
  public
    { Public declarations }
  end;

现在,您可以使用此代码禁用此表单的TButton的VCL样式

TStyleManager.Engine.RegisterStyleHook(uChild.TButton,TStyleHook);

如果您想了解有关使用TStyleHook类的更多信息,请查阅文章Exploring Delphi XE2 – VCL Styles Part II。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读