2k,4k 高分屏顯示器DPI縮放檢測完整版

最近在做高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

代碼比較簡單,主要是程序的縮放主體不同的話判斷邏輯上有區別。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章