19

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

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

4

3 回答 3

27

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

于 2011-12-22T02:53:16.700 回答
3

从 Splash Form 的属性中删除(取消选中)seClient选项StyleElements对我有用(Delphi XE10)。

于 2019-03-05T13:30:46.617 回答
-1

最简单的方法是将启动表单放在单独的 DLL 中。这样造型师就不会碰到它。

于 2011-12-22T12:50:50.990 回答