在Delphi中获取自定义DPI百分比

asa*_*add 15 delphi screen-resolution windows-7

在Windows 7的高DPI模式下尝试使用我的Delphi 2010应用程序更多用户我已经尝试了几种方法来检索PixelsPerInch并与96进行比较.唉,无论我尝试什么,我总是得到96.我的问题是:

  1. 获得自定义DPI模式的最佳做法是什么?
  2. 事实上,无论我的意义是什么,我都会得到一个恒定的96,这意味着我错过了什么?

这是我尝试过的

dpiX := Form1.PixelsPerInch
Run Code Online (Sandbox Code Playgroud)

dpiX := Screen.PixelsPerInch
Run Code Online (Sandbox Code Playgroud)

最后:

D2DFactoryOptions.DebugLevel := D2D1_DEBUG_LEVEL_NONE;
pD2DFactoryOptions := @D2DFactoryOptions;
if D2D1CreateFactory(
    D2D1_FACTORY_TYPE_SINGLE_THREADED,
    IID_ID2D1Factory,
    PD2DFactoryOptions,
    D2DFactory
    ) <> S_OK then exit;
D2DFactory.GetDesktopDpi(dpiX, dpiY)
Run Code Online (Sandbox Code Playgroud)

小心猜?这是正确的dpiX是100%,125%和150%的常数96

请指教.

Dav*_*nan 11

我认为您需要通过在应用程序清单中包含此项来将您的应用程序标记为具有高DPI感知能力:

<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>
Run Code Online (Sandbox Code Playgroud)

这里给出声明DPI意识的详细信息.

您好像正在回归所谓的DPI虚拟化.


Dmi*_*try 5

您可以在以下位置查看注册表值 AppliedDPI

HKEY_CURRENT_USER\Control Panel\Desktop\WindowMetrics\AppliedDPI
Run Code Online (Sandbox Code Playgroud)

感谢 Andreas Rejbrand。