我在 Delphi XE2 中使用新的 VCL 样式系统。它工作得很好,但我希望为上面有许多图像的特定表单禁用它(启动/关于表单)。问题是我似乎无法找到将其与特定样式相关联的表单属性,因此不能仅针对该表单禁用它。似乎只有全局TStyleManager
类似乎是静态的。
考虑到这一点,实现这一点的唯一方法是调用TStyleManager.TrySetStyle('Windows')
,显示表单,然后在表单关闭时将其设置回原始样式?
我在 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。
从 Splash Form 的属性中删除(取消选中)seClient
选项StyleElements
对我有用(Delphi XE10)。
最简单的方法是将启动表单放在单独的 DLL 中。这样造型师就不会碰到它。