我使用 Delphi 10.3 Rio,并且需要知道屏幕 PixelsPerInch 比率来相应地扩展我的应用程序。
用公式计算,我的屏幕有 142 ppi。(实际值是:15.5" 对角线和 1920 x 1080 分辨率)。但是当我在 Delphi 中读取该Screen.PixelsPerInch
属性时,我得到 134 !而且这个值也是我创建PixelsPerInch
的每个属性中的报告TForm
。那么,为什么会有这种差异?真正的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;