Вопрос Ехе файл для выбора языков

Kotuy

Новичок
Доброе время суток!
Возможно создал вопрос не в той теме.

Может кто знает как создать файл ехе для запуска изменения языков игры на основе файла ini.

Заранее благодарю за помощь.
 

vint56

Ветеран
Проверенный
Kotuy,
[Setup]
AppName=My Application
AppVersion=1.5
CreateAppDir=no

[Code ]
var
Language: TNewComboBox;
s1,s2: String;
LanguageLabel: TLabel;
Res: Integer;

procedure InitializeWizard();
begin
with WizardForm do begin
// BorderStyle:=bsNone;
Bevel.Hide;
InnerNotebook.Hide;
OuterNotebook.Hide;
Width:=ScaleX(300);
Height:=ScaleY(150);
Position:=poScreenCenter;
Caption:='Lancher';
end;

with WizardForm.NextButton do
begin
Left := ScaleX(180);
Top := ScaleY(90);
end;

Language := TNewComboBox.Create(WizardForm);
with Language do
begin
SetBounds(ScaleX(40),ScaleY(327), ScaleX(145), ScaleY(21))
Parent := WizardForm;
Style := csDropDownList;
Left := ScaleX(130);
Top := ScaleY(48);
Width := ScaleX(145);
Height := ScaleY(21);
Items.Add('japanese');
Items.Add('polish');
Items.Add('hungarian');
Items.Add('czech');
Items.Add('brazilian');
Items.Add('german');
Items.Add('spanish');
Items.Add('italian');
Items.Add('french');
Items.Add('english');
Items.Add('russian');
ItemIndex := 0;
end;
LanguageLabel := TLabel.Create(WizardForm);
with LanguageLabel do
begin
Parent := WizardForm;
Caption := 'Selet game language:';
Left := ScaleX(20);
Top := ScaleY(50);
Width := ScaleX(112);
Height := ScaleY(13);
end;
end;

procedure CurStepChanged(CurStep: TSetupStep);
begin
s1:= + '[SystemSettings]' + #13#10;
s2:= ExpandConstant(Language.Text);
CreateDir(ExpandConstant('{app}'));
case CurStep of
ssPostInstall: SaveStringToFile(ExpandConstant('{src}\SKIDROW.ini'), s1+s2, False);
end;
end;

function ShouldSkipPage(PageID: Integer): Boolean;
begin
if (PageID = 1)or(PageID = 2)or(PageID = 3)or(PageID = 4)or(PageID = 5)or(PageID = 6)or(PageID = 7)or(PageID = 8)or(PageID = 9)or(PageID = 10)or(PageID = 11)or(PageID = 13)or(PageID = 14) then
Result:= True;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
if CurPageID = wpReady then
begin
WizardForm.NextButton.Caption:='Сохранить';
end;
end;

[Setup]
AppName=My Application
AppVersion=1.5
CreateAppDir=no

[Code ]
var
Language: TNewComboBox;
s1,s2: String;
LanguageLabel: TLabel;
ResultCode: Integer;

procedure InitializeWizard();
begin
with WizardForm do begin
// BorderStyle:=bsNone;
Bevel.Hide;
InnerNotebook.Hide;
OuterNotebook.Hide;
Width:=ScaleX(300);
Height:=ScaleY(150);
Position:=poScreenCenter;
Caption:='Lancher';
end;

with WizardForm.NextButton do
begin
Left := ScaleX(180);
Top := ScaleY(90);
end;

Language := TNewComboBox.Create(WizardForm);
with Language do
begin
SetBounds(ScaleX(40),ScaleY(327), ScaleX(145), ScaleY(21))
Parent := WizardForm;
Style := csDropDownList;
Left := ScaleX(130);
Top := ScaleY(48);
Width := ScaleX(145);
Height := ScaleY(21);
Items.Add('japanese');
Items.Add('polish');
Items.Add('hungarian');
Items.Add('czech');
Items.Add('brazilian');
Items.Add('german');
Items.Add('spanish');
Items.Add('italian');
Items.Add('french');
Items.Add('english');
Items.Add('russian');
ItemIndex := 0;
end;
LanguageLabel := TLabel.Create(WizardForm);
with LanguageLabel do
begin
Parent := WizardForm;
Caption := 'Selet game language:';
Left := ScaleX(20);
Top := ScaleY(50);
Width := ScaleX(112);
Height := ScaleY(13);
end;
end;

procedure CurStepChanged(CurStep: TSetupStep);
begin
s1:= + '[SystemSettings]' + #13#10;
s2:= ExpandConstant(Language.Text);
CreateDir(ExpandConstant('{app}'));
case CurStep of
ssPostInstall: SaveStringToFile(ExpandConstant('{src}\SKIDROW.ini'), s1+s2, False);
end;
end;

function ShouldSkipPage(PageID: Integer): Boolean;
begin
if (PageID = 1)or(PageID = 2)or(PageID = 3)or(PageID = 4)or(PageID = 5)or(PageID = 6)or(PageID = 7)or(PageID = 8)or(PageID = 9)or(PageID = 10)or(PageID = 11)or(PageID = 13)or(PageID = 14) then
Result:= True;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
if CurPageID = wpReady then
begin
WizardForm.NextButton.Caption:='Сохранить';
end;
end;

procedure DeinitializeSetup();
begin
Exec(ExpandConstant('{sys}\calc.exe'), '', '', SW_SHOW, ewNoWait, ResultCode);
end;
 
Последнее редактирование:

Kotuy

Новичок
vint56, Благодарю. А возможно ещё добавить запуск игры сразу?
 

Kotuy

Новичок
vint56, А как добавить свой exe файл. И не понятно чутка как добавить файл ini оригинальный

vint56, Вот типо такого мне надо http://sendfile.su/1307164 может есть пример?
 
Последнее редактирование:

ExPlayer

Старожил
Вот типо такого мне надо http://sendfile.su/1307164 может есть пример?
Это самописный (т.е. сделанный не средствами inno). Вам для какой игры надо (или под какой кряк)? Есть еще вариант встроить в инстяллятор выбор языка (без всякого Language Selector/Changer).
 

Kotuy

Новичок
ExPlayer, Для любой игры, где используется смена языка непосредственно через файл ini.

ExPlayer, на пример, такой вариант не нужен:
Source: Locale\rus.ini; DestDir: {app}\; DestName: steam_emu.ini; Components: lang\rus; Flags: ignoreversion
Source: Locale\eng.ini; DestDir: {app}\; DestName: steam_emu.ini; Components: lang\eng; Flags: ignoreversion
 

Kotuy

Новичок
vint56, Благодарю, но как сделать что бы файл ini был оригинальный? Текст в файле ini.
Пример ini файла. Что бы такое получалось http://sendfile.su/1307207 или т.п

А то он заменяет оригинальный текст из файла ini на свой
[Game]
Language=russian

И игра не запускается из-за этого
 

zavul0n

Новичок
Kotuy, что для вас "оригинальный INI"?
Если я правильно понял - вам нужно внести изменения только в строку language любого из возможный инишек кряка, да?
 

Kotuy

Новичок
zavul0n, да нужно внести только строчку языка.

ExPlayer, с Delphi не дружу

Пример последний от vint56, мне подходит. Мне только надо настроить что бы в оригинальном ini файле менялся только текст языка
 

Kotuy

Новичок
ExPlayer, Всё может быть, но с Delphi не когда не связывался, а inno только изучаю
 

ExPlayer

Старожил
ExPlayer, Всё может быть, но с Delphi не когда не связывался, а inno только изучаю
Держи: http://sendfile.su/1307259

В архиве Languge Selector + SmartSteamEmu, при желании программу можно переделать под codex.ini/3DM.ini и так далее, программа не меняет ничего, кроме строчки language.

P.S. если программа кому-то еще нужна, вот вам исходники: http://krinkels.org/threads/language-selector.3363/
 
Последнее редактирование:

vint56

Ветеран
Проверенный
Kotuy, так я и добавил чтобы менялся только язык
[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application
OutputDir=.

Код:
var
LanguageLabel: TLabel;
PanelForm: TPanel;
Language: TNewComboBox;
Close,Save: TPanel;
s1,s2: String;
Run: TNewCheckBox;
ResultCode: Integer;

function ReleaseCapture(): Longint; external 'ReleaseCapture@user32.dll stdcall';

procedure LabelOnMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  ReleaseCapture;
  SendMessage(WizardForm.Handle,$0112,$F012,0)
end;

procedure RePlaceTextinFile(FilePath:string; find:string; replace:string);
var
  S: TArrayOfString;
  i : Integer;
begin
  if not FileExists(FilePath) then begin MsgBox('Файл не найден ' + FilePath, mbError, mb_Ok); Exit;end; // если файла нет, выходим
  LoadStringsFromFile(FilePath, S); // загружаем файл
  for i:= 0 to GetArrayLength(S)-1 do begin
    if (Pos(AnsiUpperCase(find), AnsiUpperCase(S[i])) > 0) then begin
      StringChangeEx(S[i], find, replace, True);
    end;
  end;
  SaveStringsToFile(FilePath, S, False); // сохраняем файл
end;

procedure SaveClick(Sender: TObject);
begin
  WizardForm.NextButton.OnClick(WizardForm.NextButton);
end;


procedure CloseClick(Sender: TObject);
begin
  WizardForm.Close;
end;

procedure CancelButtonClick(CurPageID: Integer; var Cancel, Confirm: Boolean);
begin
  Confirm:=False
  Cancel:=True
end;

procedure InitializeWizard();
begin
  with WizardForm do begin
  BorderStyle:=bsNone;
  Bevel.Hide;
  InnerNotebook.Hide;
  OuterNotebook.Hide;
  Width:=ScaleX(308);
  Height:=ScaleY(153);
  Position:=poScreenCenter;
end;
PanelForm := TPanel.Create(WizardForm);
  with PanelForm do
  begin
    Parent := WizardForm;
    Left := ScaleX(0);
    Top := ScaleY(0);
    Width := ScaleX(308);
    Height := ScaleY(153);
    BevelInner := bvLowered;
  end;
//Создаем лейбл на всю форму, чтоб ее можно было двигать
with TLabel.Create(WizardForm) do begin
    Parent:=PanelForm;
    AutoSize:=False;
    Top:=0;
    Left:=0;
    Width:=WizardForm.Width;
    Height:= WizardForm.Height
    Transparent:=True;
    OnMouseDown:=@LabelOnMouseDown;
end;
//Теперь тут можно делать чекбоксы
LanguageLabel := TLabel.Create(WizardForm);
  with LanguageLabel do
  begin
    Parent := PanelForm;
    Caption := 'Selet game language:';
    Left := ScaleX(30);
    Top := ScaleY(24);
    Width := ScaleX(110);
    Height := ScaleY(15);
  end;
Language := TNewComboBox.Create(WizardForm);
  with Language do
  begin
    Parent := PanelForm;
    Left := ScaleX(153);
    Top := ScaleY(20);
    Width := ScaleX(123);
    Height := ScaleY(21);
    Items.Add('english');
    Items.Add('russian');
  //  ItemIndex := 0;
end;

Save := TPanel.Create(WizardForm);
  with Save do
  begin
    Parent := PanelForm;
    Left := ScaleX(30);
    Top := ScaleY(107);
    Width := ScaleX(165);
    Height := ScaleY(24);
    BevelInner := bvLowered;
    Caption := 'Save';
    OnClick := @SaveClick;
end;
Close := TPanel.Create(WizardForm);
  with Close do
  begin
    Parent := PanelForm;
    Left := ScaleX(204);
    Top := ScaleY(107);
    Width := ScaleX(72);
    Height := ScaleY(24);
    BevelInner := bvLowered;
    Caption := 'Close';
    OnClick := @CloseClick;
  end;

  Run := TNewCheckBox.Create(WizardForm);
  with Run do
  begin
    Parent := PanelForm;
    Left := ScaleX(30);
    Top := ScaleY(73);
    Width := ScaleX(86);
    Height := ScaleY(20);
    Caption := 'Launch game';
  //  Checked:=true;
  end;
end;

function ShouldSkipPage(PageID: Integer): Boolean;
begin
  if (PageID = 1)or(PageID = 2)or(PageID = 3)or(PageID = 4)or(PageID = 5)or(PageID = 6)or(PageID = 7)or(PageID = 8)or(PageID = 9)or(PageID = 10)or(PageID = 11)or(PageID = 13)or(PageID = 14) then
  Result:= True;
end;

procedure CurStepChanged(CurStep: TSetupStep);
begin
  case Language.ItemIndex of
  0:
  begin
  RePlaceTextinFile(ExpandConstant('{src}\steam_emu.ini'), 'russian', 'english');  //заменяем слово english на russian
  end;
  1:
  begin
  RePlaceTextinFile(ExpandConstant('{src}\steam_emu.ini'), 'english', 'russian');  //заменяем слово russian на english
  end;
 end;
end;

procedure DeinitializeSetup();
begin
 if Run.Checked then
 begin
 Exec(ExpandConstant('{src}\farcry3.exe'), '', '', SW_SHOW, ewNoWait, ResultCode);
end;
end;

[/SPOILER]
 
Последнее редактирование:

Kotuy

Новичок
vint56, Привет, что то не получается добавить ещё языки в скрипт. Подскажи как это сделать. В саму панель прописал TNewComboBox, а вот что бы менялось ещё и файле ini не меняется. В CurStepChanged(CurStep: TSetupStep); добавлял инфу о новом языке.

И ещё одно. Подскажите как скрыть (убрать) в скрипте (в setup'e)
AppName=My Application
AppVersion=1.5
VersionInfoVersion=1.3.4

Что бы это не отображалось в свойствах Setup'a
 

vint56

Ветеран
Проверенный
Kotuy,
[Setup]
AppName=LancherGame
AppVersion=1.0
VersionInfoVersion=1.0
CreateAppDir=no
SetupIconFile=SetupIconFile.ico
OutputBaseFilename=Luncher
OutputDir=.
CreateUninstallRegKey=no
Uninstallable=no
AppCopyright=Copyright Vint56
VersionInfoDescription=LancherGame

[code ]
var
LanguageLabel: TLabel;
PanelForm: TPanel;
Language: TNewComboBox;
Close,Save: TPanel;
s1,s2: String;
Run: TNewCheckBox;
ResultCode: Integer;

function ReleaseCapture(): Longint; external 'ReleaseCapture@user32.dll stdcall';

procedure LabelOnMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
ReleaseCapture;
SendMessage(WizardForm.Handle,$0112,$F012,0)
end;

procedure RePlaceTextinFile(FilePath:string; find:string; replace:string);
var
S: TArrayOfString;
i : Integer;
begin
if not FileExists(FilePath) then begin MsgBox('Файл не найден ' + FilePath, mbError, mb_Ok); Exit;end; // если файла нет, выходим
LoadStringsFromFile(FilePath, S); // загружаем файл
for i:= 0 to GetArrayLength(S)-1 do begin
if (Pos(AnsiUpperCase(find), AnsiUpperCase(S)) > 0) then begin
StringChangeEx(S, find, replace, True);
end;
end;
SaveStringsToFile(FilePath, S, False); // сохраняем файл
end;

procedure SaveClick(Sender: TObject);
begin
WizardForm.NextButton.OnClick(WizardForm.NextButton);
end;


procedure CloseClick(Sender: TObject);
begin
WizardForm.Close;
end;

procedure CancelButtonClick(CurPageID: Integer; var Cancel, Confirm: Boolean);
begin
Confirm:=False
Cancel:=True
end;

procedure InitializeWizard();
begin
with WizardForm do begin
BorderStyle:=bsNone;
Bevel.Hide;
InnerNotebook.Hide;
OuterNotebook.Hide;
Width:=ScaleX(308);
Height:=ScaleY(153);
Position:=poScreenCenter;
end;
PanelForm := TPanel.Create(WizardForm);
with PanelForm do
begin
Parent := WizardForm;
Left := ScaleX(0);
Top := ScaleY(0);
Width := ScaleX(308);
Height := ScaleY(153);
BevelInner := bvLowered;
end;
//Создаем лейбл на всю форму, чтоб ее можно было двигать
with TLabel.Create(WizardForm) do begin
Parent:=PanelForm;
AutoSize:=False;
Top:=0;
Left:=0;
Width:=WizardForm.Width;
Height:= WizardForm.Height
Transparent:=True;
OnMouseDown:=@LabelOnMouseDown;
end;
//Теперь тут можно делать чекбоксы
LanguageLabel := TLabel.Create(WizardForm);
with LanguageLabel do
begin
Parent := PanelForm;
Caption := 'Selet game language:';
Left := ScaleX(30);
Top := ScaleY(24);
Width := ScaleX(110);
Height := ScaleY(15);
end;
Language := TNewComboBox.Create(WizardForm);
with Language do
begin
Parent := PanelForm;
Left := ScaleX(153);
Top := ScaleY(20);
Width := ScaleX(123);
Height := ScaleY(21);
Items.Add('japanese');
Items.Add('polish');
Items.Add('hungarian');
Items.Add('czech');
Items.Add('brazilian');
Items.Add('german');
Items.Add('spanish');
Items.Add('italian');
Items.Add('french');
Items.Add('english');
Items.Add('russian');
ItemIndex := 0;
end;

Save := TPanel.Create(WizardForm);
with Save do
begin
Parent := PanelForm;
Left := ScaleX(30);
Top := ScaleY(107);
Width := ScaleX(165);
Height := ScaleY(24);
BevelInner := bvLowered;
Caption := 'Save';
OnClick := @SaveClick;
end;
Close := TPanel.Create(WizardForm);
with Close do
begin
Parent := PanelForm;
Left := ScaleX(204);
Top := ScaleY(107);
Width := ScaleX(72);
Height := ScaleY(24);
BevelInner := bvLowered;
Caption := 'Close';
OnClick := @CloseClick;
end;

Run := TNewCheckBox.Create(WizardForm);
with Run do
begin
Parent := PanelForm;
Left := ScaleX(30);
Top := ScaleY(73);
Width := ScaleX(86);
Height := ScaleY(20);
Caption := 'Launch game';
// Checked:=true;
end;
end;

function ShouldSkipPage(PageID: Integer): Boolean;
begin
if (PageID = 1)or(PageID = 2)or(PageID = 3)or(PageID = 4)or(PageID = 5)or(PageID = 6)or(PageID = 7)or(PageID = 8)or(PageID = 9)or(PageID = 10)or(PageID = 11)or(PageID = 13)or(PageID = 14) then
Result:= True;
end;

function InitializeSetup(): Boolean;
begin
RePlaceTextinFile(ExpandConstant('{src}\steam_emu.ini'), 'japanese', 'english');
RePlaceTextinFile(ExpandConstant('{src}\steam_emu.ini'), 'polish', 'english');
RePlaceTextinFile(ExpandConstant('{src}\steam_emu.ini'), 'hungarian', 'english');
RePlaceTextinFile(ExpandConstant('{src}\steam_emu.ini'), 'czech', 'english');
RePlaceTextinFile(ExpandConstant('{src}\steam_emu.ini'), 'brazilian', 'english');
RePlaceTextinFile(ExpandConstant('{src}\steam_emu.ini'), 'german', 'english');
RePlaceTextinFile(ExpandConstant('{src}\steam_emu.ini'), 'spanish', 'english');
RePlaceTextinFile(ExpandConstant('{src}\steam_emu.ini'), 'italian', 'english');
RePlaceTextinFile(ExpandConstant('{src}\steam_emu.ini'), 'french', 'english');
RePlaceTextinFile(ExpandConstant('{src}\steam_emu.ini'), 'russian', 'english');
RePlaceTextinFile(ExpandConstant('{src}\steam_emu.ini'), 'english', 'english');
result:=True;
end;

procedure CurStepChanged(CurStep: TSetupStep);
begin
case Language.ItemIndex of
0:
begin
RePlaceTextinFile(ExpandConstant('{src}\steam_emu.ini'), 'english', 'japanese'); //заменяем слово english на russian
end;
1:
begin
RePlaceTextinFile(ExpandConstant('{src}\steam_emu.ini'), 'english', 'polish'); //заменяем слово russian на english
end;
2:
begin
RePlaceTextinFile(ExpandConstant('{src}\steam_emu.ini'), 'english', 'hungarian'); //заменяем слово russian на english
end;
3:
begin
RePlaceTextinFile(ExpandConstant('{src}\steam_emu.ini'), 'english', 'czech'); //заменяем слово english на russian
end;
4:
begin
RePlaceTextinFile(ExpandConstant('{src}\steam_emu.ini'), 'english', 'brazilian'); //заменяем слово russian на english
end;
5:
begin
RePlaceTextinFile(ExpandConstant('{src}\steam_emu.ini'), 'english', 'german'); //заменяем слово russian на english
end;
6:
begin
RePlaceTextinFile(ExpandConstant('{src}\steam_emu.ini'), 'english', 'spanish'); //заменяем слово english на russian
end;
7:
begin
RePlaceTextinFile(ExpandConstant('{src}\steam_emu.ini'), 'english', 'italian'); //заменяем слово russian на english
end;
8:
begin
RePlaceTextinFile(ExpandConstant('{src}\steam_emu.ini'), 'english', 'french'); //заменяем слово russian на english
end;
9:
begin
RePlaceTextinFile(ExpandConstant('{src}\steam_emu.ini'), 'english', 'english'); //заменяем слово english на russian
end;
9:
begin
RePlaceTextinFile(ExpandConstant('{src}\steam_emu.ini'), 'english', 'russian'); //заменяем слово english на russian
end;
end;
end;

procedure DeinitializeSetup();
begin
if Run.Checked then
begin
Exec(ExpandConstant('{src}\farcry3.exe'), '', '', SW_SHOW, ewNoWait, ResultCode);
end;
end;
 

Kotuy

Новичок
vint56, На оборот, мне не надо что бы была инфа об этом

AppName=LancherGame
AppVersion=1.0
VersionInfoVersion=1.0
CreateAppDir=no
SetupIconFile=SetupIconFile.ico
OutputBaseFilename=Luncher
OutputDir=.
CreateUninstallRegKey=no
Uninstallable=no
AppCopyright=Copyright Vint56
 
Сверху