如何确定容器控件(TPanel)的正确高度?

问题描述 投票:0回答:1

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

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

它看起来不错。我的疑问涉及到一些特定尺寸的控件。

我不得不手动计算出这些控件的高度。TPanels 还是我把这个逻辑弄错了?我现在意识到 "在哪里备份" 控件只是第二个面板的一部分。要不要再加第三个?我只是不知道如何计算出一个面板所需要的高度来覆盖上面的控件。

inno-setup pascalscript
1个回答
1
投票

你已经正确地将控件相对于前面的控件放置了。

所以用同样的逻辑来调整面板的大小。一旦你放置了最后一个控件,查询它的位置(底部边缘),添加一些边距,然后用它来计算面板高度。

panelWhatToPackup.ClientHeight :=
  radioBackupHowEssential.Top + radioBackupHowEssential.Height + ScaleY(8);

有一个注意事项:在Inno Setup中创建的复选框和单选按钮在运行时不会自动缩放。您必须通过编程来修正它们的高度。根据字体大小来调整单选按钮列表的高度

© www.soinside.com 2019 - 2024. All rights reserved.