Inno Setup相对于现有按钮定位自定义按​​钮

时间:2015-02-04 18:32:34

标签: inno-setup

我知道可以在任何页面上创建自定义按钮,并使用以下代码使用绝对值定位它:

//Create the About button
  AboutButton := TButton.Create(WizardForm);
  AboutButton.Caption := '&About';
  AboutButton.Width := ScaleX(75);
  AboutButton.Height := ScaleY(23);
  AboutButton.Left := WizardForm.InfoAfterPage.Left + 10;
  AboutButton.Top := WizardForm.InfoAfterPage.Height + 90;
  AboutButton.OnClick := @AboutButtonClick;
  AboutButton.Parent := WizardForm.NextButton.Parent;

唯一的问题是,因为它使用绝对值进行定位,如果用户打开了Windows缩放(在屏幕分辨率>使文本和其他项目更大或更小),并且缩放设置为中等125%,然后按钮显示与其他内置按钮不对齐,导致令人讨厌的混乱。因此,是否有一种方法可以将任何新创建的自定义按钮与内置按钮相关联,以便它们始终按照预期显示在线状态?或者,我忽略了这种缩放困境的另一种解决方案吗?

2 个答案:

答案 0 :(得分:3)

这就是我写它的方式:

  AboutButton := TButton.Create(WizardForm);
  AboutButton.Caption := '&About';
  AboutButton.Left := WizardForm.InfoAfterPage.Left + (WizardForm.ClientWidth - 
   (WizardForm.CancelButton.Left + WizardForm.CancelButton.Width)); 
   // sets Left position from the Page Left 
   // + already scaled gap calculated on the basis of TLama's recommendations
  AboutButton.Width := WizardForm.NextButton.Width;   
   // sets same Width as NextButton
  AboutButton.Top := WizardForm.NextButton.Top;       
   // sets same Top position as NextButton
  AboutButton.Height := WizardForm.NextButton.Height; 
   // sets same Height as NextButton
  AboutButton.OnClick := @AboutButtonClick;
  AboutButton.Parent := WizardForm.NextButton.Parent;

示例:

96 (Default)

120 (125%)

144 (150%)

答案 1 :(得分:0)

在所有位置/尺寸上使用 ScaleX() ScaleY()

  AboutButton.Width := ScaleX(75);
  AboutButton.Height := ScaleY(23);
  AboutButton.Left := ScaleX(WizardForm.InfoAfterPage.Left + 10);
  AboutButton.Top := ScaleY(WizardForm.InfoAfterPage.Height + 90);

这应该适用于所有DPI。