在TOpenDialog中右键单击文件时,使用自定义样式会显示无效字符。

10

请参照以下步骤进行复制。在XE2中正常工作,但在XE8中不行。

  1. 新建一个VCL表单应用程序 - Delphi
  2. 在表单上放置一个TButton和一个TOpenDialog
  3. 在按钮的OnClick事件中调用OpenDialog1.Execute
  4. 运行程序,打开文件对话框,右键点击文本文件=>菜单项正常显示
  5. 转到Project/Options/Application/Appearance。启用并选择自定义样式(如“Ruby Graphite”)并重新编译
  6. 运行程序,打开文件对话框,右键点击文本文件=>菜单项不能正确显示(显示无效字符)

在XE8订阅更新1(以及从8.1升级到10的Windows系统)下测试通过。


那是哪个本地的Windows版本? - Rudy Velthuis
@Rudy,Windows 10专业版 - Thomas
我的意思是,哪个国家的版本,例如丹麦、德国、美国、俄罗斯、中国、荷兰、法国、希腊等等。 - Rudy Velthuis
但那似乎已经过时了。 - Rudy Velthuis
Windows 10 Pro,瑞典语。 - Thomas
好的,谢谢。但是正如我所说,RRUZ的回答已经使得那个知识过时了。 - Rudy Velthuis
1个回答

17

Windows 10对绘制shell弹出菜单的代码进行了一些内部更改。因此,VCL样式代码必须进行修改才能与Windows 10兼容。我刚刚向EMB报告了这个问题 (链接)

作为解决方法,您可以使用VCL Styles Utils项目来修复此问题(只需将Vcl.Styles.Utils.Menus单元添加到您的项目中即可)。

请查看下图,左侧弹出菜单使用标准VCL样式,而右侧菜单使用VCL Styles Utils项目。

enter image description here


1
这是采用VCL样式的危险和风险之一。Embarcadero应该更好地传达这种风险。 - David Heffernan
这与DirectUI的逆向工程有关吗? - David Heffernan
@DavidHeffernan,不,菜单是使用一个“传统”的钩子(SetWindowsHookEx)在#32768类上绘制的。 - RRUZ

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接