Цитата 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. советую оформлять код в легко читабельном виде, а то у вас какой-то "водопад" получился.