我知道可以在任何页面上创建自定义按钮,并使用以下代码使用绝对值定位它:
//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%,然后按钮显示与其他内置按钮不对齐,导致令人讨厌的混乱。因此,是否有一种方法可以将任何新创建的自定义按钮与内置按钮相关联,以便它们始终按照预期显示在线状态?或者,我忽略了这种缩放困境的另一种解决方案吗?
答案 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;
示例:
答案 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。