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

时间:2016-12-07 20:19:11

标签: inno-setup

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

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='+#$010C+'e'+#$0161+'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;

Spanish first language

西班牙语:第一语言。

I select english and no change the language of the language selector

我选择英语而不更改语言选择器的语言。

1 个答案:

答案 0 :(得分:1)

你已经有了代码。您只需要在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'+#$17E+#$ED+'t b'+#$11B+'hem instalace:';
        CancelButton.Caption := 'Storno';
        LanguageForm.Caption := 'V'+#$FD+'b'+#$11B+'r jazyka pr'+#$16F+'vodce instalac'+#$ED+'';
      end;
  end;
end;

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

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

并分配LangChange事件处理程序:

  LangCombo.OnChange := @LangChange;

English

Czech