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

代码比较简单,主要是程序的缩放主体不同的话判断逻辑上有区别。

 

©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页