Inno setup 如何检测和;“固定”;是否使用Inno设置进行DPI设置?

Inno setup 如何检测和;“固定”;是否使用Inno设置进行DPI设置?,inno-setup,Inno Setup,我用自定义向导页面和自定义背景图像创建了一个设置。 问题在于非标准DPI系统 运行此设置时,背景图像未正确显示。 如何检测DPI大小并使用向导页面的自定义设置?最正确的方法是在小字体和大字体模式下使用替代图像。 “稍微不太正确”的方法是填充背景,使其显示,而不是缩小。 “非常错误”的方法是尝试调整表单布局/大小以适应 您可以使用TGraphicsObject.pixelsprench属性检测DPI大小,并加载不同的图像。最正确的方法是在小字体和大字体模式下使用替代图像。 “稍微不太正确”的方法是

我用自定义向导页面和自定义背景图像创建了一个设置。 问题在于非标准DPI系统

运行此设置时,背景图像未正确显示。 如何检测DPI大小并使用向导页面的自定义设置?

最正确的方法是在小字体和大字体模式下使用替代图像。 “稍微不太正确”的方法是填充背景,使其显示,而不是缩小。 “非常错误”的方法是尝试调整表单布局/大小以适应

您可以使用
TGraphicsObject.pixelsprench
属性检测DPI大小,并加载不同的图像。

最正确的方法是在小字体和大字体模式下使用替代图像。 “稍微不太正确”的方法是填充背景,使其显示,而不是缩小。 “非常错误”的方法是尝试调整表单布局/大小以适应


您可以使用
TGraphicsObject.pixelsprench
属性检测DPI大小,并加载不同的图像。

自行定义以下函数以欺骗Inno设置:

function ScaleX(Value: Integer): Integer;
begin
  Result := Value;
end;

function ScaleY(Value: Integer): Integer;
begin
  Result := Value;
end;

Bing GO ~

自行定义以下功能以欺骗Inno设置:

function ScaleX(Value: Integer): Integer;
begin
  Result := Value;
end;

function ScaleY(Value: Integer): Integer;
begin
  Result := Value;
end;

Bing GO ~

Deanna提到可以像这样检测DPI:

您可以使用
TGraphicsObject.PixelsPerInch
属性检测DPI大小,并加载不同的图像

但是,InnoSetup文档表明
TGraphicsObject
没有
PixelsPerInch
属性,而是
TFont
对象的属性

因此,可以使用类似以下代码检测DPI并实现自定义设置:

程序检查dpi;
变量
CurrentDPI、StandardDPI、MediumDPI、LargeDPI:整数;
开始
{获取当前DPI}
CurrentDPI:=WizardForm.Font.PixelsPerInch;
{根据Windows DPI设置确定的存储默认值}
标准dpi=96;{ 100% }
中等dpi:=120;{ 125% }
大DPI:=144;{ 150% }
如果(CurrentDPI>=标准DPI)和(CurrentDPI=MediumDPI)和(CurrentDPI=LargeDPI),则
开始
{为大型DPI或更高版本执行一些自定义代码}
终止
终止

Deanna提到可以像这样检测DPI:

您可以使用
TGraphicsObject.PixelsPerInch
属性检测DPI大小,并加载不同的图像

但是,InnoSetup文档表明
TGraphicsObject
没有
PixelsPerInch
属性,而是
TFont
对象的属性

因此,可以使用类似以下代码检测DPI并实现自定义设置:

程序检查dpi;
变量
CurrentDPI、StandardDPI、MediumDPI、LargeDPI:整数;
开始
{获取当前DPI}
CurrentDPI:=WizardForm.Font.PixelsPerInch;
{根据Windows DPI设置确定的存储默认值}
标准dpi=96;{ 100% }
中等dpi:=120;{ 125% }
大DPI:=144;{ 150% }
如果(CurrentDPI>=标准DPI)和(CurrentDPI=MediumDPI)和(CurrentDPI=LargeDPI),则
开始
{为大型DPI或更高版本执行一些自定义代码}
终止
终止

谢谢您的回答,但我找不到任何与此相关的代码。为什么inno不能自动检测并从96扩展到任何dpi?它会自动执行。然而,图像本身是固定的像素大小,因此在DPI较高的屏幕/设置上物理上较小。我已经给了你要检查的属性,你只需要提取一个不同的图像来适应(因为你已经提取了要使用的图像),谢谢你的回答,但是我找不到任何代码。为什么inno不能自动检测并从96扩展到任何dpi?它会自动执行。然而,图像本身是固定的像素大小,因此在DPI较高的屏幕/设置上物理上较小。我已经给了您要检查的属性,您只需要提取一个不同的图像来适应(因为您已经提取了要使用的图像),它将如何欺骗Inno安装程序?嗯,这些函数可能会被调用,但是是从你自己的脚本中调用的,所以我觉得为什么要首先调用它们有点道理。答案是非理性的,不会对任何事情产生影响,更不用说问题中的问题了。该函数不仅不会被调用,而且是非操作。它将如何欺骗Inno安装程序?嗯,这些函数可能会被调用,但是是从你自己的脚本中调用的,所以我觉得为什么要首先调用它们有点道理。答案是非理性的,不会对任何事情产生影响,更不用说问题中的问题了。该函数不仅不会被调用,而且是非操作。由于Windows 8.1用户可以调整每个监视器的DPI缩放比例,并且
Font。PixelsPerInch
始终为主监视器返回DPI值,因此这种方法有点过时;-)除此之外,您应该收听
WM\u DPICHANGED
通知,并根据更改的DPI调整窗口(此更改可能只是将窗口移动到具有不同DPI设置的监视器上)。要获得某个窗口的DPI,可能需要(我完全没有测试过,是从Windows SDK编写的)。例如,请参见如何将此应用于
WizardImageFile
WizardSmallImageFile
@TLama。如果是这样,Inno安装程序不会在其清单中宣布每个监视器的DPI感知。因此,对于Inno设置,系统将虚拟化所有屏幕