如何使用Inno Setup检测和“修复”DPI设置?

时间:2011-07-05 16:03:14

标签: inno-setup

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

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

3 个答案:

答案 0 :(得分:4)

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

您可以使用TGraphicsObject.PixelsPerInch属性检测DPI大小并加载其他图像。

答案 1 :(得分:4)

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

  

您可以使用TGraphicsObject.PixelsPerInch属性检测DPI大小并加载其他图像。

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

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

procedure CheckDPI;
var
  CurrentDPI, StandardDPI, MediumDPI, LargeDPI: Integer;
begin
  { Get the current DPI }
  CurrentDPI  := WizardForm.Font.PixelsPerInch;

  { Store defaults determined from Windows DPI settings }
  StandardDPI := 96;  { 100% }
  MediumDPI   := 120; { 125% }
  LargeDPI    := 144; { 150% }

  if (CurrentDPI >= StandardDPI) and (CurrentDPI < MediumDPI) then 
  begin
    { Execute some custom code for small to medium DPI }
  end
  else if (CurrentDPI >= MediumDPI) and (CurrentDPI < LargeDPI) then
  begin
    { Execute some custom code for medium to large DPI }
  end
  else if (CurrentDPI >= LargeDPI) then
  begin
    { Execute some custom code for large DPI or above }
  end;
end;

答案 2 :(得分:-3)

自己定义以下功能以欺骗Inno Setup:

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

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

Bing GO~