最近在做高DPI顯示器的適配,由於很多用戶不知道自己的顯示器是否有dpi縮放。於是做了這麼個小工具,專門用於系統dpi縮放參數的檢測。
程序下載:鏈接: https://pan.baidu.com/s/1XR2nvwYWFKd6DH6PMCeNyQ 提取碼: hvff
程序運行效果圖:
如果修改一下程序屬性裏的兼容性,更改高dpi設置,高dpi縮放替代,選擇 系統,那麼運行效果也會不同
如圖
程序下載:鏈接: https://pan.baidu.com/s/1XR2nvwYWFKd6DH6PMCeNyQ 提取碼: hvff
源碼分享:
function getDPI(var h1:integer; var h2: integer): integer;
var
DC: HDC;
begin
DC := GetDC(0);
Result := GetDeviceCaps(DC, logpixelsx); //獲取邏輯dpi,如果由系統負責縮放那麼獲取的值固定爲96
h1:= GetDeviceCaps(DC, DESKTOPHORZRES); //當程序屬性,兼容,更改高dpi設置,高dpi縮放替代,選擇 應用程序,那麼 h1,h2相同
h2:= GetDeviceCaps(DC, HORZRES); //當程序屬性,兼容,更改高dpi設置,高dpi縮放替代,選擇 系統,那麼 h2比 h1 小
ReleaseDC(0, DC);
end;
procedure TForm1.Button1Click(Sender: TObject);
var k,h1,h2,j: integer;
s: string;
begin
k:= getDPI(h1,h2);
memo1.Lines.Add('屏幕實際像素:'+ h1.ToString+ ' 屏幕邏輯像素:'+ h2.ToString);
memo1.Lines.Add('當前邏輯DPI(每英寸點數)是:'+ inttostr(k));
if h1=h2 then
begin
j:= round(k / 96*100);
if j=100 then
memo1.Lines.Add('當前程序沒有縮放。')
else
memo1.Lines.Add('當前程序縮放由程序自己完成。');
end else begin
j:= round(h1 / h2*100);
memo1.Lines.Add('當前程序縮放由操作系統完成。');
end;
if j=100 then
s:= s+ '當前DPI沒有放大,值爲:'+ j.ToString +'%'
else
s:= '當前DPI已經放大,值爲:'+ j.ToString +'%';
memo1.Lines.Add(s );
end;
源碼下載:鏈接: https://pan.baidu.com/s/1DBi-saG_0Lh4Y-mtTM_7zA 提取碼: 5ea7
代碼比較簡單,主要是程序的縮放主體不同的話判斷邏輯上有區別。