gpt4 book ai didi

delphi - 如何在Delphi中禁用VCL样式

转载 作者:行者123 更新时间:2023-12-03 14:34:47 25 4
gpt4 key购买 nike

我正在 Delphi XE2 中使用新的 VCL 样式系统。它工作得很好,但我希望针对其上有许多图像的特定表单(飞溅/关于表单)禁用它。问题是我似乎找不到将其与特定样式关联的表单属性,因此无法仅针对该表单禁用它。似乎只有全局 TStyleManager 类看起来是静态的。

考虑到这一点,实现此目的的唯一方法是调用 TStyleManager.TrySetStyle('Windows'),显示表单,然后在表单启动时将其设置回原始样式关闭?

最佳答案

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

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

TStyleManager.Engine.RegisterStyleHook(TFormChild, TStyleHook);

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

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

关于delphi - 如何在Delphi中禁用VCL样式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8598728/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com