Inno Setup - 当组合框中的选定值发生变化时,如何更改标签标题 [或其他一般控件]

Inno Setup - How to change a label caption [or other controls in general], when selected value in combox box changes

在组合框中更改语言时(未单击确定),我想更改对话框的文本(标签、表单标题、按钮标题)

procedure SelectLanguage();
var
  LanguageForm: TSetupForm;
  CancelButton: TNewButton;
  OKButton: TNewButton;
  LangCombo: TNewComboBox;
  SelectLabel: TNewStaticText;
  Languages: TStrings;
  Params: string;
  Instance: THandle;
  P, I: Integer;
  S, L: string;
begin
  Languages := TStringList.Create();

  Languages.Add('en=English');
  Languages.Add('cs='+#0C+'e'+#61+'tina');

  LanguageForm := CreateCustomForm;

  LanguageForm.Caption := SetupMessage(msgSelectLanguageTitle);
  LanguageForm.ClientWidth := ScaleX(297);
  LanguageForm.ClientHeight := ScaleY(125);
  LanguageForm.BorderStyle := bsDialog;
  LanguageForm.Center;

  CancelButton := TNewButton.Create(LanguageForm);
  CancelButton.Parent := LanguageForm;
  CancelButton.Left := ScaleX(214);
  CancelButton.Top := ScaleY(93);
  CancelButton.Width := ScaleY(75);
  CancelButton.Height := ScaleY(23);
  CancelButton.TabOrder := 3;
  CancelButton.ModalResult := mrCancel;
  CancelButton.Caption := SetupMessage(msgButtonCancel);

  OKButton := TNewButton.Create(LanguageForm);
  OKButton.Parent := LanguageForm;
  OKButton.Left := ScaleX(133);
  OKButton.Top := ScaleY(93);
  OKButton.Width := ScaleX(75);
  OKButton.Height := ScaleY(23);
  OKButton.Caption := SetupMessage(msgButtonOK);
  OKButton.Default := True
  OKButton.ModalResult := mrOK;
  OKButton.TabOrder := 2;

  LangCombo := TNewComboBox.Create(LanguageForm);
  LangCombo.Parent := LanguageForm;
  LangCombo.Left := ScaleX(16);
  LangCombo.Top := ScaleY(56);
  LangCombo.Width := ScaleX(273);
  LangCombo.Height := ScaleY(21);
  LangCombo.Style := csDropDownList;
  LangCombo.DropDownCount := 16;
  LangCombo.TabOrder := 1;

  SelectLabel := TNewStaticText.Create(LanguageForm);
  SelectLabel.Parent := LanguageForm;
  SelectLabel.Left := ScaleX(16);
  SelectLabel.Top := ScaleY(8);
  SelectLabel.Width := ScaleX(273);
  SelectLabel.Height := ScaleY(39);
  SelectLabel.AutoSize := False
  SelectLabel.Caption := SetupMessage(msgSelectLanguageLabel);
  SelectLabel.TabOrder := 0;
  SelectLabel.WordWrap := True;

  for I := 0 to Languages.Count - 1 do
  begin
    P := Pos('=', Languages.Strings[I]);
    L := Copy(Languages.Strings[I], 0, P - 1);
    S := Copy(Languages.Strings[I], P + 1, Length(Languages.Strings[I]) - P);
    LangCombo.Items.Add(S);
    if L = ActiveLanguage then
      LangCombo.ItemIndex := I;
  end;

  if LanguageForm.ShowModal = mrOK then
  begin
    { ... }
  end;
end;

function InitializeSetup(): Boolean;
begin
  SelectLanguage();
  { ... }
end;

西班牙语:第一语言。

我select英文和没有改语言select或.

您已经有了代码。你只需要在 SelectLanguage 函数中使一些局部变量成为全局变量,这样它们就可以在 LangChange 函数中使用:

var
  LanguageForm: TSetupForm;
  SelectLabel: TNewStaticText;
  CancelButton: TNewButton;

procedure LangChange(Sender : TObject);
begin
  case TNewComboBox(Sender).ItemIndex of
    0: { English }
      begin
        SelectLabel.Caption := 'Select the language to use during the installation:';
        CancelButton.Caption := 'Cancel';
        LanguageForm.Caption := 'Select setup language';
      end;
    1: { Czech }
      begin
        SelectLabel.Caption := 'Zvolte jazyk, kter'+#$FD+' se m'+#$E1+' pou'+#E+#$ED+'t b'+#B+'hem instalace:';
        CancelButton.Caption := 'Storno';
        LanguageForm.Caption := 'V'+#$FD+'b'+#B+'r jazyka pr'+#F+'vodce instalac'+#$ED+'';
      end;
  end;
end;

SelectLanguage中,删除这些局部变量的声明:

  LanguageForm: TSetupForm;
  SelectLabel: TNewStaticText;
  CancelButton: TNewButton;

并分配 LangChange 事件处理程序:

  LangCombo.OnChange := @LangChange;