2017-06-18 136 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來獲取模塊句柄。它可能會被加載。或者,更糟糕的是,在您調用函數之前它可能會被卸載。 –