在Inno中动态设置按钮的宽度?

时间:2020-05-23 10:07:33

标签: inno-setup pascalscript

到目前为止,这是我的自定义页面定义:

var

  // Backup Settings Page & Controls
  pageAutoBackup: TWizardPage;
  btnSelectBackupFolder: TNewButton;
  textBackupFolder: TNewEdit;
  lblWhereToBackup: TLabel;
  lblPromptMode: TLabel;
  comboPromptMode: TNewComboBox;
  lblReminder: TLabel;
  radioBackupModeManual: TNewRadioButton;
  radioBackupModeAuto: TNewRadioButton;
  lblHowToBackup: TLabel;
  radioBackupHowEssential: TNewRadioButton;
  radioBackupHowComplete: TNewRadioButton;
  radioBackupHowNone: TNewRadioButton;
  lblWhatToBackup: TLabel;
  panelWhatToPackup: TPanel;
  panelHowToPackup: TPanel;

function pageAutoBackup_CreatePage(PreviousPageId: Integer): Integer;
begin
    pageAutoBackup := CreateCustomPage(PreviousPageId, 'Automatic Backup', 'Configure automatic backup settings.');

    { panelWhatToPackup (TPanel) }
    panelWhatToPackup := TPanel.Create(pageAutoBackup);
    panelWhatToPackup.Caption := '';
    panelWhatToPackup.BevelOuter := bvNone;
    panelWhatToPackup.BevelInner := bvNone; { default }
    panelWhatToPackup.BevelKind := bkNone;
    panelWhatToPackup.Parent := pageAutoBackup.Surface;
    panelWhatToPackup.Enabled := True;
    panelWhatToPackup.Visible := True;
    panelWhatToPackup.Left := ScaleX(0);
    panelWhatToPackup.Top := ScaleY(0);
    panelWhatToPackup.Width := pageAutoBackup.Surface.Width;
    panelWhatToPackup.Height := ScaleY(90);
    panelWhatToPackup.Anchors := [akLeft, akRight];

    { lblWhatToBackup (TLabel) }
    lblWhatToBackup := TLabel.Create(pageAutoBackup);
    lblWhatToBackup.Parent := panelWhatToPackup;
    lblWhatToBackup.Enabled := True;
    lblWhatToBackup.Visible := True;
    lblWhatToBackup.Width := panelWhatToPackup.Width;
    lblWhatToBackup.Font.Color := $000000;
    lblWhatToBackup.Color := $F0F0F0;
    lblWhatToBackup.Caption := 'What to backup:';

    { radioBackupHowNone (TNewRadioButton) }
    radioBackupHowNone := TNewRadioButton.Create(pageAutoBackup);
    radioBackupHowNone.Parent := panelWhatToPackup;
    radioBackupHowNone.Enabled := True;
    radioBackupHowNone.Visible := True;
    radioBackupHowNone.Top := lblWhatToBackup.Top + lblWhatToBackup.Height + ScaleY(2);
    radioBackupHowNone.Width := panelWhatToPackup.Width;
    radioBackupHowNone.Checked := False;
    radioBackupHowNone.Font.Color := $000000;
    radioBackupHowNone.Color := $F0F0F0;
    radioBackupHowNone.Caption := 'Don''t perform any backup when the program shuts down';

    { radioBackupHowComplete (TNewRadioButton) }
    radioBackupHowComplete := TNewRadioButton.Create(pageAutoBackup);
    radioBackupHowComplete.Parent := panelWhatToPackup;
    radioBackupHowComplete.Enabled := True;
    radioBackupHowComplete.Visible := True;
    radioBackupHowComplete.Top := radioBackupHowNone.Top + radioBackupHowNone.Height + ScaleY(2);
    radioBackupHowComplete.Width := panelWhatToPackup.Width;
    radioBackupHowComplete.Checked := False;
    radioBackupHowComplete.Font.Color := $000000;
    radioBackupHowComplete.Color := $F0F0F0;
    radioBackupHowComplete.Caption := 'Make a complete backup when the program shuts down';

    { radioBackupHowEssential (TNewRadioButton) }
    radioBackupHowEssential := TNewRadioButton.Create(pageAutoBackup);
    radioBackupHowEssential.Parent := panelWhatToPackup;
    radioBackupHowEssential.Enabled := True;
    radioBackupHowEssential.Visible := True;
    radioBackupHowEssential.Top :=  radioBackupHowComplete.Top + radioBackupHowComplete.Height + ScaleY(2);
    radioBackupHowEssential.Width := panelWhatToPackup.Width;
    radioBackupHowEssential.Checked := False;
    radioBackupHowEssential.Font.Color := $000000;
    radioBackupHowEssential.Color := $F0F0F0;
    radioBackupHowEssential.Caption := 'Only make an essential backup when the program shuts down';

    { panelHowToPackup (TPanel) }
    panelHowToPackup := TPanel.Create(pageAutoBackup);
    panelHowToPackup.Caption := '';
    panelHowToPackup.BevelOuter := bvNone;
    panelHowToPackup.BevelInner := bvNone; { default }
    panelHowToPackup.BevelKind := bkNone;
    panelHowToPackup.Parent := pageAutoBackup.Surface;
    panelHowToPackup.Enabled := True;
    panelHowToPackup.Visible := True;
    panelHowToPackup.Top := panelWhatToPackup.Top + panelWhatToPackup.Height + ScaleY(2);
    panelHowToPackup.Width := pageAutoBackup.Surface.Width;
    panelHowToPackup.Height := ScaleY(100);
    panelHowToPackup.Anchors := [akLeft, akRight];

    { lblHowToBackup (TLabel) }
    lblHowToBackup := TLabel.Create(pageAutoBackup);
    lblHowToBackup.Parent := panelHowToPackup;
    lblHowToBackup.Enabled := True;
    lblHowToBackup.Visible := True;
    lblHowToBackup.Width := panelHowToPackup.Width;
    lblHowToBackup.Font.Color := $000000;
    lblHowToBackup.Color := $F0F0F0;
    lblHowToBackup.Caption := 'How to backup:';

    { radioBackupModeAuto (TNewRadioButton) }
    radioBackupModeAuto := TNewRadioButton.Create(pageAutoBackup);
    radioBackupModeAuto.Parent := panelHowToPackup;
    radioBackupModeAuto.Enabled := True;
    radioBackupModeAuto.Visible := True;
    radioBackupModeAuto.Left := ScaleX(0);
    radioBackupModeAuto.Top := lblHowToBackup.Top + lblHowToBackup.Height + ScaleY(2);
    radioBackupModeAuto.Width := panelHowToPackup.Width;
    radioBackupModeAuto.Checked := False;
    radioBackupModeAuto.Font.Color := $000000;
    radioBackupModeAuto.Color := $F0F0F0;
    radioBackupModeAuto.Caption := 'Perform automatically when the program is shut down';

    { radioBackupModeManual (TNewRadioButton) }
    radioBackupModeManual := TNewRadioButton.Create(pageAutoBackup);
    radioBackupModeManual.Parent := panelHowToPackup;
    radioBackupModeManual.Enabled := True;
    radioBackupModeManual.Visible := True;
    radioBackupModeManual.Top := radioBackupModeAuto.Top + radioBackupModeAuto.Height + ScaleY(2);
    radioBackupModeManual.Width := panelHowToPackup.Width;
    radioBackupModeManual.Checked := False;
    radioBackupModeManual.Font.Color := $000000;
    radioBackupModeManual.Color := $F0F0F0;
    radioBackupModeManual.Caption := 'Prompt the user when the program is shut down';

    { lblPromptMode (TLabel) }
    lblPromptMode := TLabel.Create(pageAutoBackup);
    lblPromptMode.Parent := panelHowToPackup;
    lblPromptMode.Enabled := True;
    lblPromptMode.Visible := True;
    lblPromptMode.Top := radioBackupModeManual.Top + radioBackupModeManual.Height + ScaleY(2);
    lblPromptMode.Width := panelHowToPackup.Width;
    lblPromptMode.Font.Color := $000000;
    lblPromptMode.Color := $F0F0F0;
    lblPromptMode.Caption := 'Also prompt to backup at the following intervals while the application is running:';

    { comboPromptMode (TNewComboBox) }
    comboPromptMode := TNewComboBox.Create(pageAutoBackup);
    comboPromptMode.Parent := panelHowToPackup;
    comboPromptMode.Style := csDropDownList;
    comboPromptMode.Enabled := True;
    comboPromptMode.Visible := True;
    comboPromptMode.Top := lblPromptMode.Top + lblPromptMode.Height + ScaleY(2);
    comboPromptMode.Width := panelHowToPackup.Width;
    comboPromptMode.Font.Color := $000000;
    comboPromptMode.ItemIndex := 0;
    comboPromptMode.Color := $FFFFFF;
    comboPromptMode.Items.Add('Never prompt to backup');
    comboPromptMode.Items.Add('Prompt to backup everyday');
    comboPromptMode.Items.Add('Prompt to backup once a week');
    comboPromptMode.Items.Add('Prompt to backup once a month');
    comboPromptMode.Anchors := [akLeft, akRight];

    { lblWhereToBackup (TLabel) }
    lblWhereToBackup := TLabel.Create(pageAutoBackup);
    lblWhereToBackup.Parent := pageAutoBackup.Surface;
    lblWhereToBackup.Enabled := True;
    lblWhereToBackup.Visible := True;
    lblWhereToBackup.Top := panelHowToPackup.Top + panelHowToPackup.Height + ScaleY(2);
    lblWhereToBackup.Width := panelHowToPackup.Width;
    lblWhereToBackup.Font.Color := $000000;
    lblWhereToBackup.Color := $F0F0F0;
    lblWhereToBackup.Caption := 'Where to backup:';
    lblWhereToBackup.Anchors := [akLeft, akRight, akBottom];

    { textBackupFolder (TNewEdit) }
    textBackupFolder := TNewEdit.Create(pageAutoBackup);
    textBackupFolder.Parent := pageAutoBackup.Surface;
    textBackupFolder.Enabled := True;
    textBackupFolder.Visible := True;
    textBackupFolder.Top := lblWhereToBackup.Top + lblWhereToBackup.Height + ScaleY(2);
    textBackupFolder.Width := ScaleX(335);
    textBackupFolder.Font.Color := $000000;
    textBackupFolder.Color := $F0F0F0;
    textBackupFolder.Anchors := [akLeft, akRight, akBottom];

    { btnSelectBackupFolder (TNewButton) }
    btnSelectBackupFolder := TNewButton.Create(pageAutoBackup);
    btnSelectBackupFolder.Parent := pageAutoBackup.Surface;
    btnSelectBackupFolder.Enabled := True;
    btnSelectBackupFolder.Visible := True;
    btnSelectBackupFolder.Left := ScaleX(340);
    btnSelectBackupFolder.Top := textBackupFolder.Top;
    btnSelectBackupFolder.Width := ScaleX(75);
    btnSelectBackupFolder.Caption := 'Browse ...';
    btnSelectBackupFolder.Anchors := [akRight, akBottom];
    btnSelectBackupFolder.OnClick := @btnSelectBackupFolder_Click;

    Result := pageAutoBackup.ID;

end;

这是最小尺寸的样子:

Smallest Size

由于空间有限,我决定删除其中一个静态标签,因为它并不是真正需要的。

这是调整大小后的样子:

Bigger Size

看起来不错。我的查询与控件的某些特定大小有关:

由于我将本地化页面,因此无法假定“浏览...”按钮的指定宽度。我们如何设置它,使该按钮位于右侧,采用最终定制消息所需的宽度,并在其左侧相应调整文本控件的大小?

1 个答案:

答案 0 :(得分:1)

我认为在Windows中根据标题文本调整控件的大小并不常见。只需使按钮足够大,以适合所有翻译即可。 Imo,通常的规则是,对于带有长标题的控件,在原始英文文本的基础上添加50%,对于带有短标题的控件(如您的控件),添加100%。

或者,因为您的按钮与其他标准的Inno Setup按钮是一个字,所以您可以使用相同的宽度来保持一致性。

btnSelectBackupFolder.Width := WizardForm.CancelButton.Width;

如果您真的想自动调整大小,则没有简单的方法来计算字幕宽度,因为Inno Setup不会公开控件的画布。

您可以通过以下任何一种方式对其进行破解:

  • 使用AutoSize := True创建临时TLabel,设置标题并查询标签宽度。
  • 创建一个临时TBitmapImage,并使用其TBitmapImage.Bitmap.Canvas.TextWidth计算文本宽度。

在两种情况下,请确保控件的Font和父级与按钮的字体和父级匹配。

相关问题