delphi – TDateTimePicker VCL样式XE2中的毛刺只发生在Windows Classic Theme上

前端之家收集整理的这篇文章主要介绍了delphi – TDateTimePicker VCL样式XE2中的毛刺只发生在Windows Classic Theme上前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我想这是VCL风格还没有准备好被真正使用的另一个原因.

TDateTimePicker控件看起来没有VCL样式.打开任何vcl风格,我得到这个外观:

我可以通过注册一个样式钩子来关闭这个组件类型的vcl样式,但是看起来真的很丑陋.

这是在安装了更新4的Delphi XE2上.

理想情况下,我希望有一个解决方法,或datetime选择器的某些属性,或者datetimepicker的一些子类,我可以做,以强制日期选择器正确绘制和主题.

请注意,正常的组合框正确配置.请注意,这可以很容易地在可以想象的最小的样本项目中重现.是.还有另一种风格的bug.

更新它可能是特定于平台的,与没有Aero的Windows Server 2008 R2上的Windows Common Controls版本相关(Windows服务器组件术语中的“桌面体验”).在其他人无法复制之后才发生这种情况,在几台不同的Windows机器上尝试这样做.在我这样做之后,我发现这个问题只能在Windows Server 2008 R2上复制.我们的一些客户使用Windows Server 2008 R2.如你所知,使用VCL Styles的主要原因在于它使您的应用程序看起来是一样的,无论Windows主题是什么.但是在上述情况下,除了DateTimePicker控件(主题不正确,仅在Windows Server 2008 R2上)外,整个应用程序的主题都是正确的.相同的基于XE2的演示程序在Windows 7上可以正常工作.

工作系统和非工作系统在SysWow64文件夹中都有一个ComCtl32.dll,版本为5.82.7601.17514.但是,当VCL主题关闭时,这些控件的本机布局和外观显然是不同的,并且这会影响到失效的皮肤代码.

Update2:报告为bug:QC Entry 106783

解决方法

好的,我刚刚对 Vcl.Styles.DateTimePickersVcl.Styles.DateTimePickers单元做了一个小的改动.当“Windows Classic”主题是活动的时候解决这个问题.

以这种方式使用此样式钩子

uses
  Vcl.Styles,Vcl.Themes,Vcl.Styles.DateTimePickers;

initialization
 TStyleManager.Engine.RegisterStyleHook(TDateTimePicker,TDateTimePickerStyleHookFix);

这将是结果.

原文链接:https://www.f2er.com/delphi/101371.html

猜你在找的Delphi相关文章