【发布时间】:2022-01-20 15:10:06
【问题描述】:
我使用 Delphi 10.3 Rio,并且需要知道屏幕 PixelsPerInch 比率以相应地扩展我的应用程序。
用the formula计算,我的屏幕有142 ppi。 (实际值是:15.5" 对角线和 1920 x 1080 分辨率)。但是当我在 Delphi 中读取 Screen.PixelsPerInch 属性时,我得到 134 !这个值是我创建的每个 TForm 的 PixelsPerInch 属性中报告的. 那么,为什么会有这种差异,哪个是真正的ppi呢?
AIDA64 报告的实际值为 142 ppi...所以我认为 Delphi 中的每英寸像素比率有问题...
编辑:
我设法用这段代码获得了真正的 PPI……但我无法在每个 Delphi 组件中更改它。所以,如果我在我的组件中使用这个值,我会不会把一切都搞砸了?
procedure TForm1.FormCreate(Sender: TObject);
var PhiW, PhiH, PixW, PixH: Integer;
DC: HDC;
PhiD, PixD, PPI: Real;
begin
DC:= Form1.Canvas.Handle;
PhiW:= GetDeviceCaps(DC, HORZSIZE);
PhiH:= GetDeviceCaps(DC, VERTSIZE);
PixW:= GetDeviceCaps(DC, HORZRES);
PixH:= GetDeviceCaps(DC, VERTRES);
PhiD:= (Sqrt((PhiW*PhiW)+(PhiH*PhiH)))/25.4;
PixD:= Sqrt((PixW*PixW)+(PixH*PixH));
PPI:= PixD / PhiD;
Label1.Caption:= IntToStr(Round(PPI))+' ppi';
end;
【问题讨论】:
-
您使用的是哪个版本的 Delphi?听起来像一个错误,如果尚未报告,您应该 report to Embarcadero。
-
@RemyLebeau 我用的是 Delphi 10.3 Rio... 你能在其他 Delphi 版本中得到真正的价值吗?
-
@MarcusGradinaru 我没试过。
-
你的计算给了我 72 ppi 的 528x298 毫米显示 1920x1080 像素。 Delphi 7 的
Screen.PixelsPerInch报告 96。 -
我想我解决了这个问题...
Screen.PixelsPerInch不会报告屏幕的真实 ppi,而是由您的窗口缩放设置缩放的标准 96 ppi。我将窗口缩放设置为 140%。所以,96 x 1.4 = 134 ppi...
标签: delphi screen delphi-10.3-rio ppi