首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> Delphi

Delphi 取得螢幕毫米與像素尺寸:GetDeviceCaps 計算 DPI 與毫米像素換算

     編輯:Delphi

核心 API:GetDeviceCaps

GetDeviceCaps(hDC, nIndex) 可查詢裝置內容能力。關鍵索引值:

索引常數含義單位
HORZSIZE螢幕寬度毫米
VERTSIZE螢幕高度毫米
HORZRES螢幕寬度像素
VERTRES螢幕高度像素
LOGPIXELSX水平 DPIDots Per Inch
LOGPIXELSY垂直 DPIDots Per Inch

完整範例程式碼


procedure TForm1.FormCreate(Sender: TObject);
var
  mmW, mmH: Integer;      // 毫米尺寸
  pixW, pixH: Integer;    // 像素尺寸
  PixPerMm: Double;       // 每毫米像素數
begin
  // 取得裝置內容
  mmW  := GetDeviceCaps(Canvas.Handle, HORZSIZE);
  mmH  := GetDeviceCaps(Canvas.Handle, VERTSIZE);
  pixW := GetDeviceCaps(Canvas.Handle, HORZRES);
  pixH := GetDeviceCaps(Canvas.Handle, VERTRES);

  ShowMessageFmt('螢幕寬: %d 毫米; 高: %d 毫米', [mmW, mmH]);
  ShowMessageFmt('螢幕寬: %d 像素; 高: %d 像素', [pixW, pixH]);

  // 計算 1 毫米 = 幾像素
  PixPerMm := pixW / mmW; // 水平
  ShowMessageFmt('水平: 1 毫米 = %.2f 像素', [PixPerMm]);
  PixPerMm := pixH / mmH; // 垂直
  ShowMessageFmt('垂直: 1 毫米 = %.2f 像素', [PixPerMm]);

  // 一步到位
  ShowMessageFmt('水平 DPI: %d', [GetDeviceCaps(Canvas.Handle, LOGPIXELSX)]);
end;

輸出範例 (1024x768, 17吋螢幕)

螢幕寬: 320 毫米; 高: 240 毫米
螢幕寬: 1024 像素; 高: 768 像素
水平: 1 毫米 = 3.20 像素
垂直: 1 毫米 = 3.20 像素
水平 DPI: 96

DPI 與毫米換算關係


1 英吋 = 25.4 毫米
DPI = 每英吋像素數
像素/毫米 = DPI / 25.4

例: 96 DPI → 96 / 25.4 ≈ 3.78 像素/毫米
實際 GetDeviceCaps 回傳會因驅動程式回報而異

應用場景

  • 列印排版:精確計算列印頁面毫米對應像素
  • 繪圖縮放:依實際物理尺寸繪製 (如 CAD、地圖)
  • 高 DPI 適配:偵測系統 DPI 縮放比例,調整 UI 佈局
  • 多螢幕:需針對各螢幕 DC 獨立查詢

注意事項

  • Canvas.Handle 需在表單可見時有效,FormCreate 通常可用
  • 虛擬機/遠端桌面可能回報虛擬尺寸
  • 現代高 DPI 應用建議啟用 Per Monitor DPI Aware 並使用 GetDpiForWindow (Win10 1607+)

總結

GetDeviceCaps 是取得螢幕物理與邏輯尺寸的標準 API。透過 HORZSIZE/VERTSIZE (毫米) 與 HORZRES/VERTRES (像素) 即可計算「1毫米等於多少像素」,進而實現物理尺寸感知的繪圖、列印與 UI 縮放。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved