Вопрос Language selector with VCL Styles

  • Автор темы Автор темы nizcoz
  • Дата начала Дата начала
The only way is create my own "language" dialog, and display that from the InitializeSetup. This way the custom dialog will be skinned. Once a user selects a language, you restart the installer with the /LANG switch to load the selected language. How can I do this?
 
nizcoz, Примеры InitializeLanguageDialog

#include 'botva2.iss'
[Setup]
AppName=Example
AppVerName=Example
DefaultDirName={pf}\Example
DefaultGroupName=Example
OutputDir=.

[Languages]
Name: "english"; MessagesFile: "compiler:Languages\English.isl"
Name: "russian"; MessagesFile: "compiler:Languages\Russian.isl"

[Files]
Source: Files\*; Flags: dontcopy;

[Code ]
function InitializeSetup:boolean;
begin
if not FileExists(ExpandConstant('{tmp}\botva2.dll')) then ExtractTemporaryFile('botva2.dll');
Result:=True;
end;

function InitializeLanguageDialog(): Boolean;
var
Panel: TPanel;
begin
if not FileExists(ExpandConstant('{tmp}\botva2.dll')) then ExtractTemporaryFile('botva2.dll');
if not FileExists(ExpandConstant('{tmp}\Icon.png')) then ExtractTemporaryFile('Icon.png');
with SelectLanguageForm do begin
Panel:= TPanel.Create(SelectLanguageForm)
with Panel do begin
SetBounds(IconBitmapImage.Left,IconBitmapImage.Top,IconBitmapImage.Width+ScaleX(50),IconBitmapImage.Height+ScaleY(50));
BevelInner:= bsNone;
BevelOuter:= bsNone;
Parent:= SelectLanguageForm;
end;
Width:= Width+ScaleX(50);
SelectLabel.Left:= SelectLabel.Left+ScaleX(50);
LangCombo.Left:= LangCombo.Left+ScaleX(50);
OKButton.Left:= OKButton.Left+ScaleX(50);
CancelButton.Left:= CancelButton.Left+ScaleX(50);
ImgLoad(Panel.Handle,'Icon.png',0,0,IconBitmapImage.Width+ScaleX(50),IconBitmapImage.Height+ScaleY(50),True,True);
ImgApplyChanges(Panel.Handle);
IconBitmapImage.Hide;
end;
Result := True;
end;

procedure DeinitializeSetup;
begin
gdipShutDown;
end;



[Setup]
AppName=app
AppVersion=1.5
DefaultDirName={sd}\app

[Files]
Source: compiler:WizModernSmallImage-IS.bmp; DestName: "1.bmp"; Flags: dontcopy

[Languages]
Name: "english"; MessagesFile: "compiler:Languages\English.isl"
Name: "russian"; MessagesFile: "compiler:Languages\Russian.isl"

[LangOptions]
english.LanguageName=English / Английский
russian.LanguageName=Russian / Русский

[Messages]
SelectLanguageLabel=Please select a language.%nВыберите язык установщика.
SelectLanguageTitle=Ashampoo® Burning Studio 15

[Code ]
function InitializeLanguageDialog(): Boolean;
begin
with SelectLanguageForm do
begin
ExtractTemporaryFile('1.bmp');
IconBitmapImage.SetBounds(ScaleX(IconBitmapImage.Left), ScaleY(IconBitmapImage.Top), ScaleX(55), ScaleY(55));
IconBitmapImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\1.bmp'));
SelectLabel.Left := ScaleX(SelectLanguageForm.SelectLabel.Left + 25);
LangCombo.SetBounds(ScaleX(LangCombo.Left + 25), ScaleY(LangCombo.Top), ScaleX(LangCombo.Width - 60), ScaleY(LangCombo.Height));
end;
result := true;
end;



[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application

[Languages]
Name: "english"; MessagesFile: "compiler:Languages\English.isl"
Name: "russian"; MessagesFile: "compiler:Languages\Russian.isl"

[Code ]
procedure LangChange(Sender : TObject);
var
i : integer;
begin
i := SelectLanguageForm.LangCombo.ItemIndex;
case TNewComboBox(Sender).ItemIndex of
0: begin
with SelectLanguageForm do begin
SelectLabel.Caption := 'Select language, which will use at installing process:';
CancelButton.Caption := 'Cancel';
Caption := 'Select setup language';
end;
end;
1: begin
with SelectLanguageForm do begin
SelectLabel.Caption := 'Выберите язык, который будет использован в процессе установки:';
CancelButton.Caption := 'Отмена';
Caption := 'Выберите язык установки';
end;
end;
end;
end;

function InitializeLanguageDialog(): Boolean;
begin
with SelectLanguageForm do begin
ClientHeight := ScaleY(100);
ClientWidth := SelectLabel.Width + ScaleX(20);
SelectLabel.Left := ScaleX(10);
LangCombo.SetBounds(SelectLabel.Left, SelectLabel.Top + SelectLabel.Height, SelectLabel.Width, LangCombo.Height);
LangCombo_OnChange := @LangChange;
OKButton.SetBounds(SelectLabel.Left, LangCombo.Top + LangCombo.Height + ScaleY(5), ScaleX(110), OKButton.Height);
CancelButton.SetBounds(LangCombo.Width - OKButton.Width + ScaleX(10), OKButton.Top, ScaleX(110), CancelButton.Height);
IconBitmapImage.Hide;
end;
Result := True;
end;
 
Последнее редактирование:
День добрый мужики! Заразился идеей перенести LangCombo из SelectLanguageForm на WelcomePage. Перепробовал множество вариантов, которые в последствии не привели к успеху. Единственный способ который удался - это изменение размера самой формы SelectLanguageForm (подогнал размер под остальные страницы). Но не то... Не так... Хочется именно перенести его(LangCombo) на страницу приветствия...

Код:
[Setup]
AppName=app
AppVersion=1.5
DefaultDirName={sd}\Example
DisableWelcomePage=yes
DefaultGroupName=Example

[Files]
Source: compiler:WizModernImage.bmp; DestName: "1.bmp"; Flags: dontcopy
Source: compiler:Examples\MyProg.exe; DestDir: "{app}"; Flags: ignoreversion

[Icons]
Name: "{group}\Example"; Filename: "{app}\MyProg.exe";

[Languages]
Name: "english"; MessagesFile: "compiler:Languages\English.isl"
Name: "russian"; MessagesFile: "compiler:Languages\Russian.isl"


[Code]

var
Label1,Label2: TLabel;
CheckLB: TNewListBox;

function InitializeLanguageDialog(): Boolean;
begin
with SelectLanguageForm do
begin

//***Сама форма***//
SelectLanguageForm.Width := ScaleX(503);
SelectLanguageForm.Height := ScaleY(389);
SelectLanguageForm.Color := $FFFFFF;
SelectLanguageForm.Position:= poScreenCenter;
BorderStyle:= bsDialog;
SelectLanguageForm.Caption := 'Установка';

//***Текст выбора языка***//
SelectLabel.Left:= ScaleX(176);
SelectLabel.Top:= ScaleX(185);

//***Сомво-список языков***//
LangCombo.Left := ScaleX(176);
LangCombo.Height := ScaleX(170);
LangCombo.Top := ScaleX(230);
LangCombo.Width := ScaleX(300);

//***Замена значка на изображение***//
ExtractTemporaryFile('1.bmp');
IconBitmapImage.SetBounds(ScaleX(0), ScaleY(0), ScaleX(164), ScaleY(314));
IconBitmapImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\1.bmp'));

begin
begin
  { NewCheckListBox1 }
  CheckLB := TNewListBox.Create(SelectLanguageForm);
  with CheckLB do
  begin
  Parent := SelectLanguageForm;
  Left := ScaleX(0);
  Top := ScaleY(314);
  Width := ScaleX(500);
  Height := ScaleY(50);
  Color := $f0f0f0;
  end;
  { Label1 }
  Label1 := TLabel.Create(SelectLanguageForm);
  with Label1 do
  begin
  Parent := SelectLanguageForm;
  Caption := 'Вас приветствует мастер'+#10+#13+'установки Имя программы...';
  Left := ScaleX(176);
  Top := ScaleY(16);
  Width := ScaleX(300);
  Height := ScaleY(16);
  Font.Height := -13;
  Font.Size:=12;
  Font.Name := 'Verdana';
  Font.Style := [fsBold];
  end;
  { Label1 }
  Label1 := TLabel.Create(SelectLanguageForm);
  with Label1 do
  begin
  Parent := SelectLanguageForm;
  Caption := 'Программа установит [name/ver] на ваш компьютер.'+#10+#13+#10+#13+'Рекомендуется закрыть все прочие приложения перед'+#10+#13+'тем, как продолжить.'+#10+#13+#10+#13+'Нажмите «Далее», чтобы продолжить, или «Отмена»,'+#10+#13+'чтобы выйти из программы установки.';
  Left := ScaleX(176);
  Top := ScaleY(80);
  Width := ScaleX(300);
  Height := ScaleY(100);
  end;

  ///***Кнопка отмены***///
  CancelButton.Width := ScaleX(80); 
  CancelButton.Left := ScaleX(407);
  CancelButton.Top := ScaleX(10); 
  CancelButton.Parent := CheckLB;

  ///***Кнопка ОК***///
  OKButton.Width := ScaleX(80);     
  OKButton.Left := ScaleX(317);     
  OKButton.Top := ScaleX(10);
  OKButton.Caption := 'Далее';       
  OKButton.Parent := CheckLB;
end;
result := true;
end;
end;
end;
 

Вложения

  • Хотелось бы так.png
    Хотелось бы так.png
    45.7 KB · Просмотры: 64
AlexS, выбор языка после создания WizardForm, ну да ладно, кто я такой чтобы вообще спрашивать. Не знаю как заставить Inno загрузить без "дебрей" Caption для стандартных элементов из .isl файлов, но знаю как сделать все самому (и много кто знает):

Код:
#define AppName "Application"

[Setup]
AppName={#AppName}
AppVersion=1.5
DefaultDirName={sd}\{#AppName}

[CustomMessages]
ru_WizardForm=Установка - {#AppName}
ru_WelcomeLabel1=Вас приветствует Мастер установки {#AppName}
ru_WelcomeLabel2=Программа установит {#AppName} на ваш компьютер.%n%nРекомендуется закрыть все прочие приложения перед тем, как продолжить.
ru_NextButton=Далее >
ru_CancelButton=Отмена

en_WizardForm=Setup - {#AppName}
en_WelcomeLabel1=Welcome to the  {#AppName} Setup Wizard
en_WelcomeLabel2=This will install {#AppName} on your computer.%n%nIt is recommended that you close all other applications before continuing.
en_NextButton=Next >
en_CancelButton=Cancel

[Code]
var
  LanguagesBox: TNewComboBox;
  Languages: String;

function NextButtonClick(CurPageID: Integer): Boolean; begin end;

procedure LanguagesUpdate;
begin
  WizardForm.WelcomeLabel1.Caption:=CustomMessage(Languages+'WelcomeLabel1');
  WizardForm.WelcomeLabel2.Caption:=CustomMessage(Languages+'WelcomeLabel2');
  WizardForm.NextButton.Caption:=CustomMessage(Languages+'NextButton');
  WizardForm.CancelButton.Caption:=CustomMessage(Languages+'CancelButton');
  WizardForm.Caption:=CustomMessage(Languages+'WizardForm');
end;

procedure LanguagesBoxChange(Sender: TObject);
begin
case LanguagesBox.ItemIndex of
  0: Languages:='ru_';
  1: Languages:='en_';
end;
  LanguagesUpdate;
end;

procedure InitializeWizard();
begin
LanguagesBox:=TNewComboBox.Create(WizardForm);
with LanguagesBox do
begin
  Parent:=WizardForm;
  SetBounds(ScaleX(24), ScaleY(327), ScaleX(145), ScaleY(21));
  Items.Add('Русский');
  Items.Add('English');
  ItemIndex:=0;
  OnChange:=@LanguagesBoxChange;
end;
  LanguagesBoxChange(LanguagesBox.ItemIndex);
end;
 
Последнее редактирование:
Назад
Сверху