2017-06-18 145 views
-1

WinAPI函数GetDpiForMonitor没有Delphi 7的标题转换和搜索我无法找到的互联网。GetDpiForMonitor与Delphi 7的每个监视器DPI感知

如果有人有示例代码显示如何使用Delphi 7中的WinAPI函数,这将有很大的帮助。

+1

这是一个非常简单的功能转换。你有没有尝试过?如果对你来说太难了,那就是头文件翻译的绝地项目。 –

+0

@DavidHeffernan我发布了这个作为互联网搜索没有解决清晰的Delphi代码,因为其他人也可能需要它,我发布了这个问题,以便将来的搜索将产生一个答案。我查看过JEDI API库,它不包含任何对“GetDpiForMonitor”的引用。 – bLight

+0

你为什么不自己写翻译。这很容易。你为什么不试试。请尝试。 –

回答

0

这里是如何动态地加载DLL和调用函数在Delphi 7:

Type 
    TMONITOR_DPI_TYPE = (
    MDT_EFFECTIVE_DPI {= 0}, 
    MDT_ANGULAR_DPI {= 1}, 
    MDT_RAW_DPI  {= 2}, 
    MDT_DEFAULT  {= MDT_EFFECTIVE_DPI }); 

var 
    dpiX    : UINT; 
    dpiY    : UINT; 
    ErrCode   : HResult; 
    hShcore   : THandle; 
    GetDpiForMonitor : function(monitor: HMONITOR; dpiType: TMONITOR_DPI_TYPE; var dpi, dpiY: UINT): HRESULT; stdcall; 

begin 
    hShcore := GetModuleHandle('Shcore'); 
    If hShcore <> 0 then GetDpiForMonitor := GetProcAddress(hShcore,'GetDpiForMonitor'); 
    If @GetDpiForMonitor <> nil then 
    ErrCode := GetDpiForMonitor(Monitor.Handle,MDT_EFFECTIVE_DPI,dpiX,dpiY); 
end; 
+0

这很好。做得好。你应该确保枚举声明MINENUMSIZE为4 –

+0

我的另一个意见是你应该使用LoadLibrary来获取模块句柄。它可能会被加载。或者,更糟糕的是,在您调用函数之前它可能会被卸载。 –