Имя пользователя:
Пароль:
 

Показать сообщение отдельно

Аватара для Dodakaedr

Ветеран


Сообщения: 863
Благодарности: 262

Профиль | Отправить PM | Цитировать


Цитата OldGamer:
1) Как сделать, чтобы инсталлятор запускался правильно на выбранном языке? »
правильно передать переменную Locale

Цитата OldGamer:
2) Как сделать, что бы по умолчанию был выбран русский язык (это необязательно, но вдруг кто-то знает)? »
в параметре ItemIndex указать индекс нужного языка

Цитата OldGamer:
есть кастомное окно с выбором языков установщика (всего 7 языков). »
у вас там очень много лишних перемен и некоторые участки кода я вообще не понял их смысла.
вот чистый код кастомного окна выбора языка
скрипт

Код: Выделить весь код
#include "Execandwait.iss"

[Setup]
SourceDir=.
OutputDir=Setup
AppName=Bugs Bunny & Taz: Time Busters
AppVerName=Bugs Bunny & Taz: Time Busters
DefaultDirName={pf}\Bugs Bunny™ & Taz™ - Time Busters
ShowLanguageDialog=no

[Languages]
Name: eng; MessagesFile: compiler:Languages\English.isl
Name: french; MessagesFile: compiler:Languages\French.isl
Name: german; MessagesFile: compiler:Languages\German.isl
Name: spanish; MessagesFile: compiler:Languages\Spanish.isl
Name: italian; MessagesFile: compiler:Languages\Italian.isl
Name: dutch; MessagesFile: compiler:Languages\Dutch.isl
Name: rus; MessagesFile: compiler:Languages\Russian.isl

[Messages]
SelectLanguageTitle=Bugs Bunny & Taz: Time Busters
SelectLanguageLabel=Please select installation language. Выберите язык установки.

[code]
var
  LSelectLanguageForm: TSetupForm;
  LBevel: TBevel;
  LOkButton, LCancelButton: TButton;
  LangCombo: TNewComboBox;
  LSelectLabel: TLabel;
  Locale: string;

procedure LangChange(Sender : TObject);
begin
  case LangCombo.ItemIndex of
    0: Locale := 'rus';
    1: Locale := 'eng';
    2: Locale := 'french';
    3: Locale := 'german';
    4: Locale := 'spanish';
    5: Locale := 'italian';
    6: Locale := 'dutch';
  end;
end;

procedure OkClick(Sender: TObject);
begin
  ExecAndWait(ExpandConstant('{srcexe}'), '/LANG=' + Locale, SW_SHOW, false, 0);
  LSelectLanguageForm.Close;
end;

procedure CancelClick(Sender: TObject);
begin
  LSelectLanguageForm.Close;
end;


procedure Lang;
begin
  LSelectLanguageForm := CreateCustomForm;
  with LSelectLanguageForm do
    begin
      ClientWidth:= ScaleX(325);
      ClientHeight:= ScaleY(125);
      BorderIcons:= [biSystemMenu];
      BorderStyle:= bsDialog;
      Position:= poScreenCenter;
      Caption:= SetupMessage(msgSelectLanguageTitle);
    end;

  LBevel := TBevel.Create(LSelectLanguageForm);
  with LBevel do
    begin
      Parent:= LSelectLanguageForm;
      SetBounds(ScaleX(0), ScaleY(82), LSelectLanguageForm.ClientWidth, ScaleY(2));
      Shape:= bsTopLine;
    end;

  LSelectLabel:= TLabel.Create(LSelectLanguageForm);
  with LSelectLabel do
    begin
      SetBounds(ScaleX(79), ScaleY(10), ScaleX(230), ScaleY(42));
      Transparent:= True;
      AutoSize:= False;
      WordWrap:= True;
      Parent:= LSelectLanguageForm;
      Caption:= SetupMessage(msgSelectLanguageLabel);
    end;

  LangCombo:= TNewComboBox.Create(LSelectLanguageForm)
  with LangCombo do
    begin
      SetBounds(ScaleX(79), ScaleY(45), ScaleX(230), ScaleY(21));
      Parent:= LSelectLanguageForm;
      Style:= csDropDownList;
      OnChange:= @LangChange;
      Items.add('Русский / Russian')     //0
      Items.add('Английский / English')  //1
      Items.add('Французский / French')  //2
      Items.add('Немецкий / German')     //3
      Items.add('Испанский / Spanish')   //4
      Items.add('Итальянский / Italian') //5
      Items.add('Голландский / Dutch')   //6
      ItemIndex := 0
    end;

  LOkButton:= TButton.Create(LSelectLanguageForm);
  with LOkButton do
    begin
      Parent:= LSelectLanguageForm;
      SetBounds(ScaleX(152), ScaleY(92), ScaleX(75), ScaleY(23));
      OnClick:= @OkClick;
      Caption:= SetupMessage(msgButtonOK);
    end;

  LCancelButton:= TButton.Create(LSelectLanguageForm);
  with LCancelButton do
    begin
      Parent:= LSelectLanguageForm;
      SetBounds(ScaleX(235), ScaleY(92), ScaleX(75), ScaleY(23));
      OnClick:= @CancelClick;
      Caption:= Setupmessage(msgButtonCancel);
    end;

  LSelectLanguageForm.ShowModal;
  LSelectLanguageForm.Free;
end;

function InitializeSetup:boolean;
begin
  Result := False;
  if Pos(AnsiLowercase('/LANG='), AnsiLowercase(GetCmdTail)) > 0 then Result := true else Lang;
end;


P.S. советую оформлять код в легко читабельном виде, а то у вас какой-то "водопад" получился.

-------
Inno Setup 5 Ultra Unicode


Последний раз редактировалось Dodakaedr, 11-01-2025 в 17:04.

Это сообщение посчитали полезным следующие участники:

Отправлено: 16:46, 11-01-2025 | #1120