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
解决方法
以这种方式使用此样式钩子
uses Vcl.Styles,Vcl.Themes,Vcl.Styles.DateTimePickers; initialization TStyleManager.Engine.RegisterStyleHook(TDateTimePicker,TDateTimePickerStyleHookFix);
这将是结果.