相关疑难解决方法(0)

在Windows Vista和Windows 7中对DPI虚拟化和DPI感知应用程序进行故障诊断

我有一个问题,在所有系统上,应用程序(用Delphi编写)在默认的96 DPI设置下表现正常,但在不同系统上的"150%文本大小"(内部144 dpi)设置下表现不一致.似乎在某些系统上,我的应用程序的某些文本/字体部分正在被拉伸,而在其他系统上,它们不是.我原以为我的应用程序,在某个版本的Windows(Win7)上,在某个DPI下,应该表现得一样.

我的应用程序将使Windows知道它不需要DPI虚拟化功能,或者它不需要.我明白了.我不明白的是DPI更改如何在两台机器上产生不同的外观,两台机器都以144 dpi运行Windows 7,以相同的固定大小显示相同的字体和形式.

我需要在Windows(注册表等)中检查DPI虚拟化中是否涉及一些与配置相关的元素?否则,您如何排除故障并了解是否在客户端窗口上进行了DPI虚拟化?

在Delphi中,如果不想扩展,必须将TForm.Scaled属性设置为false.但我不明白的是,当主窗体的Scaled属性为真时,我无法总是预测结果.

在我的应用程序中,最令我困惑的是,我有一个控件只在我的大型实际应用程序中行为不端,但在我试图调试控件的独立应用程序中没有出错.为了理解独立应用程序中的控件行为,我被迫制作了一个演示应用程序,我通过清单文件强制进行DPI感知.然后我可以重现控制绘图故障,虽然是以不同的形式.

这是我在我的演示应用程序中使用的清单文件,它暴露了我的控件在处理windows中的高dpi设置时遇到的问题.但是,我发现一件奇怪的事情是应用程序是可能的

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
 <asmv3:application xmlns:asmv3="urn:schemas-microsoft-com:asm.v3">
    <asmv3:windowsSettings
         xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">
      <dpiAware>true</dpiAware>
    </asmv3:windowsSettings>
  </asmv3:application>
  <assemblyIdentity version="14.0.3615.26342" processorArchitecture="*"            
   name="TestProject" type="win32"></assemblyIdentity>
  <description>High DPI Controls Test App</description>
</assembly>
Run Code Online (Sandbox Code Playgroud)

这是我在应用程序中禁用DPI虚拟化时,我的应用程序中的控件混乱的大约30个地方之一的示例.通过关闭我的表单中的Scaled属性来解决这个特殊的故障.但在其他地方,TForm.Scaled = false导致问题,而在某些形式,它修复它:

具有非DPI虚拟化应用清单的DPI Glitch示例,但主要形式是Scaled

更新:事实证明我的一些控件使用GDI +并且GDI +上下文中的字体行为与普通GDI上下文中的字体行为不同,至少对于使用GDI +的某些第三方控件而言.这是头痛的主要原因.其次,对于VCL中的DPI感知,存在不稳定的测试覆盖率和不明确的要求.一些VCL控件基于MS公共控件,虽然公平地说底层公共控件在高DPI情况下可能正常工作,但并不是所有的VCL控件包装都能保证正常工作.因此,在所有控件中查看高DPI感知应用程序,以及所有可用Windows 7主题中的正确行为:

  1. 96dpi的航空玻璃(大多数现代硬件上的默认Win7外观)
  2. 基本主题(航空玻璃关闭)但启用了XP主题
  3. 经典的win2000外观,玻璃关闭,以及XP级主题,
  4. 高对比度白色
  5. 高对比度黑色
  6. 各种96-DPI以外的设置

..并且列表继续.作为应用程序开发人员,你有一个相当沉重的负担.无论您是delphi用户还是使用VCL,或者您是MFC/ATL C++开发人员,在我看来,支持所有各种奇特的Windows模式是一种几乎无法承受的负担.所以大多数人都不打扰.我对吗?

delphi dpi highdpi windows-vista windows-7

18
推荐指数
4
解决办法
1万
查看次数

标签 统计

delphi ×1

dpi ×1

highdpi ×1

windows-7 ×1

windows-vista ×1