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

Rob*_*ley 5 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;
Run Code Online (Sandbox Code Playgroud)

唯一的问题是,由于它使用绝对值进行定位,如果用户打开了 Windows 缩放(在屏幕分辨率 > 放大或缩小文本和其他项目下)并且缩放设置为中 125%,则按钮会出现与其他内置按钮不对齐,导致一团糟。因此,有没有一种方法可以将任何新创建的自定义按钮与内置按钮相关联,以便它们始终按预期显示在一行中?或者有没有其他解决方案可以解决我忽略的这种扩展困境?

Rob*_*beN 5

我会这样写:

  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;
Run Code Online (Sandbox Code Playgroud)

例子:

96(默认)

120 (125%)

144 (150%)

  • 如果您想避免缩放,请获取右侧取消按钮边缘和表单右侧客户端边缘之间的宽度。这已经比魔法值 10 更精确,[`here is how`](http://i.imgur.com/Rfw6CM8.png)。 (2认同)