作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在 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/
我是一名优秀的程序员,十分优秀!