【问题标题】:What is the native call equivalent to Application.EnableVisualStyles?什么是等效于 Application.EnableVisualStyles 的本机调用?
【发布时间】:2017-05-19 13:53:59
【问题描述】:

我的旧版 Windows 应用程序在最新的 Win10 Creators 更新中出现屏幕渲染问题。我看到.NET 应用程序可以通过调用Application.EnableVisualStylesresolve 这个问题。但是,鉴于我的应用是在 dotnet 之前编写的(在 Delphi 6 中),我希望有一个本机系统调用可以用来做同样的事情。

【问题讨论】:

  • 你总是可以consult the source
  • 没那么简单。如果您有足够现代的 Delphi,那就很容易了。但是对于 Delphi 6 及更早版本,您需要第三方组件。那么,您使用的是哪个版本的 Delphi。
  • Delphi 6. 我将更新问题以反映这一点
  • 您需要将应用程序清单添加到启用 ComCtrl32.dll v6 的项目中。这是在现代 Delphi 版本中默认完成的。 Delphi 从 Delphi 7 开始就对 Windows 视觉样式提供原生支持。在早期版本中,您需要使用 Soft-Gems 的 XP Theme Manager,它不仅提供了清单,还修复了各种原生 Delphi 组件的主题问题。
  • 我会试一试。把它写成答案,我会投赞成票。谢谢。

标签: .net windows delphi delphi-6


【解决方案1】:

在 Delphi 6 中,您不能直接使用视觉样式。您需要使用第三方库,Mike Lischke 的Windows XP Theme Manager。事实上,这个库构成了 Delphi 7 中内置支持的基础,通过阅读源代码可以很容易地观察到这一点。

为了在您的 Delphi 6 程序中使用它,您需要执行以下步骤:

  1. 在您的项目中包含 XP 主题管理器库。
  2. 将应用程序清单资源链接到指定 comctl32 v6 的可执行文件。网上有很多资源解释了如何做到这一点,这里不再赘述。

请注意,如果您的程序当前没有链接应用程序清单,那么当您这样做时,您可能会发现其他行为发生了变化。如果没有清单,程序会在 UAC 下虚拟化。使用清单,虚拟化被禁用。现在,虚拟化早在 2005 年就在 Vista 中引入,作为帮助开发人员适应 UAC 引入的变化的拐杖。如果你的程序还没有适应 UAC,那么我建议你现在是时候这样做了!

【讨论】:

  • “需要采取以下步骤” -> “.. 以下步骤之一”?
  • @sertac 我认为你需要两者
  • 我可能将它与 D7 的“xpman”单元混淆了,它唯一的作用就是包含“windowsxp.res”。
  • @Sertac 在 D7 中的第 2 步是 VCL 的一部分,但都是 Mike 的代码。
猜你喜欢
  • 2011-10-09
  • 2019-04-16
  • 1970-01-01
  • 2011-06-13
  • 2016-08-06
  • 1970-01-01
  • 1970-01-01
  • 2015-06-09
  • 1970-01-01
相关资源
最近更新 更多