Jump to content
Korean Random
EvilAlex

Создание инсталляторов для модпаков на базе Inno Setup

Recommended Posts

, понял, в чём проблема. Не все секции инициализируются сразу. [Tasks] срабатывает позже. Поэтому, решение такое:

Procedure CurPageChanged(CurPageID: Integer);
begin
 if CurPageID = wpSelectTasks then
  WizardForm.TasksList.ItemFontStyle[0] := [fsBold];
end;
Edited by Kotyarko_O

Share this post


Link to post

Short link
Share on other sites

@Kotyarko_O спс

еще вот это как сделать для таска

function AddCompIndex1(Name: String): Integer;
var
  i: Integer;
begin
  Result:= -1;
  for i:= 0 to WizardForm.ComponentsList.ItemCount-1 do begin
    if (WizardForm.ComponentsList.ItemCaption[i] = Name) then begin
      Result:= i + 1;
      Break;
    end;
  end;
end;

писал так но не фига
 

function AddCompIndex1(Name: String): Integer;
var
  i: Integer;
begin
  Result:= -1;
  for i:= 0 to WizardForm.TasksList.ItemCount-1 do begin
    if (WizardForm.TasksList.ItemCaption[i] = Name) then begin
      Result:= i + 1;
      Break;
    end;
  end;
end;

писать также как и верху?

Share this post


Link to post

Short link
Share on other sites

 

 

еще вот это как сделать для таска
А в чём тут проблема?

Share this post


Link to post

Short link
Share on other sites

А в чём тут проблема?

я это использую вместо номера для описания, на стр компонентов пашет, а на стр таска нет

вот к примеру 

function AddTaskIndex1(Name: String): Integer;
var
  i: Integer;
begin
  Result:= -1;
  for i:= 0 to WizardForm.TasksList.ItemCount-1 do begin
    if (WizardForm.TasksList.ItemCaption[i] = Name) then begin
      Result:= i + 0;
      Break;
    end;
  end;
end;
if CurPageID = wpSelectTasks then
WizardForm.TasksList.ItemFontStyle[AddTaskIndex1(CustomMessage('TaskName'))] := [fsBold, fsItalic];
WizardForm.TasksList.ItemFontStyle[AddTaskIndex1(CustomMessage('TaskName1'))] := [fsBold, fsItalic];
............................................

ошибка

6FdO-UI36pI.jpg

Share this post


Link to post

Short link
Share on other sites

, а не легче сделать как-то так (не проверял):

Function AddCompIndex1(Name: String): Integer;
var
 I: Integer;
begin
 I := WizardForm.ComponentsList.Items.IndexOf(Name);
 if I <= WizardForm.ComponentsList.ItemCount then
  Result := I
 else
  Result := -1;
end;

Share this post


Link to post

Short link
Share on other sites

 

 

с компонентами пашет, а с таском не хочет
Тогда показывай всё, с чем там играешься.

Share this post


Link to post

Short link
Share on other sites

можно ли в лекции Files (Source) использовать CustomMessage

Edited by Dark_Knight_MiX

Share this post


Link to post

Short link
Share on other sites

можно ли в лекции Files (Source) использовать CustomMessage

Попробуй.

Share this post


Link to post

Short link
Share on other sites

Попробуй.

Files]
Source: озвучка модов\{cm:CompName1}\*.wav;  flags: dontcopy;
Source: озвучка модов\{cm:CompName2}\*.wav;  flags: dontcopy;
Source: озвучка модов\{cm:CompName3}\*.wav;  flags: dontcopy;
Source: озвучка модов\{cm:CompName4}\*.wav;  flags: dontcopy;
Source: озвучка модов\{cm:CompName5}\*.wav;  flags: dontcopy;
Source: озвучка модов\{cm:CompName6}\*.wav;  flags: dontcopy;
Source: озвучка модов\{cm:CompName7}\*.wav;  flags: dontcopy;
Source: озвучка модов\{cm:CompName8}\*.wav;  flags: dontcopy;
Source: озвучка модов\{cm:CompName9}\*.wav;  flags: dontcopy;
Edited by Dark_Knight_MiX

Share this post


Link to post

Short link
Share on other sites

, облегчи себе жизнь. Замени это:

[Files]
Source: озвучка модов\{cm:CompName1}\*.wav;  flags: dontcopy;
Source: озвучка модов\{cm:CompName2}\*.wav;  flags: dontcopy;
и т.д.

На это:

[Files]
Source: озвучка модов\*.wav; Flags: dontcopy recursesubdirs;

Share this post


Link to post

Short link
Share on other sites

 

, облегчи себе жизнь. Замени это:

[Files]
Source: озвучка модов\{cm:CompName1}\*.wav;  flags: dontcopy;
Source: озвучка модов\{cm:CompName2}\*.wav;  flags: dontcopy;
и т.д.

На это:

[Files]
Source: озвучка модов\*.wav; Flags: dontcopy recursesubdirs;

эх, ладно

Share this post


Link to post

Short link
Share on other sites

По-хорошему нужно все фразы в коде прописать в [CustomMessages], тогда такой проблемы не будет.

Тогда такой вопрос знатокам. Как наиболее правильно прописать?

так:

AddRadioButtonEx(ExpandConstant('{cm:Pricel}'), '', 1, False, True, nil, False);

или так:

AddRadioButtonEx(CustomMessage('Pricel'), '', 1, False, True, nil, False);

Чтоб никогда и нигде никаких проблем не было с кодировкой.

Share this post


Link to post

Short link
Share on other sites

 

 

Как наиболее правильно прописать?
Вообще, тут проверять надо.

Если верить теории, что с подстановкой значений из секции CustomMessages всё будет ок, то лучше использовать этот вариант:

CustomMessage('Pricel')

Share this post


Link to post

Short link
Share on other sites

Тогда такой вопрос знатокам. Как наиболее правильно прописать?

Как по мне первый вариант лучше, все фразы в одном месте, плюс только такой вариант подойдет для нескольких языков.

Share this post


Link to post

Short link
Share on other sites

 

 

только такой вариант подойдет для нескольких языков.

Почему?  Сделал для 2х языков, оба варианта работают.

 

 

 

Как по мне первый вариант лучше, все фразы в одном месте,

Тык в обоих вариантах фразы в одном месте  [CustomMessages].  Или я чот недопонял?

Share this post


Link to post

Short link
Share on other sites

Как по мне первый вариант лучше, все фразы в одном месте, плюс только такой вариант подойдет для нескольких языков.

Так это одно и то же, просто обращение к секции сообщений идёт по-разному.

Share this post


Link to post

Short link
Share on other sites

скажите что за код мне нужен чтоб добавить картинки к модам 

#define GameID            "{5F05CE9B-7768-490E-9A71-C6R92B4EX123}"  ;Ид инстолятора
#define MyAppName         "RED EAGLE Mod Pack 0.9.10"                     ;Название инстоллятора
#define MyInfoVer         "0.13"                                 ;Версия инсталлятора
#define MyAppVer          "1.0"                                     ;Версия игры
#define MyAppPublisher    "MrTools100"                                ;Имя компании или человека кто делал
#define MyAppURL          "http://www.koreanrandom.com"             ;Ссылка для лого
#include "Components.iss"                                           ;Компаненты, они же моды
#include "Messages.iss"                                            ;Сообщение, надписи на кнопках и т.д.
#include "SHFileOperation.iss"
[Setup]
AppId={{#GameID}
AppName={#MyAppName}
AppVersion={#MyAppVer}
;AppVerName={#MyAppName} {#MyAppVersion}
AppPublisher={#MyAppPublisher}
//====={ Ссылки }=====\\
AppPublisherURL={#MyAppURL}
AppSupportURL={#MyAppURL}
AppUpdatesURL={#MyAppURL}
//====={ Папка устанвки }=====\\
;DefaultDirName={pf}\{#MyAppName}
DefaultDirName={code:MyDirName}
DefaultGroupName={#MyAppName}
//====={ Картинки }=====\\
SetupIconFile=Files\wot_ico.ico
WizardSmallImageFile=Files\img2.bmp
WizardImageFile=Files\img1.bmp
//====={ Отключение строниц }=====\\
DisableProgramGroupPage=yes
//====={ Лицензия и Фак }=====\\
LicenseFile=licensia.txt
InfoBeforeFile=faq.rtf
//====={ Папка создания и название сетапа }=====\\
OutputDir=.\Output
OutputBaseFilename=Setup
//====={ Сжатие сетапа }=====\\
InternalCompressLevel=ultra64
Compression=lzma2/ultra64
SolidCompression=true
//====={ Основные файлы сетапа }=====\\
[Files]
Source: Files\logo.bmp; Flags: dontcopy noencryption noencryption
//====={ Выбор языка }=====\\
[Languages]
Name: "eng"; MessagesFile: "compiler:Default.isl"
Name: "rus"; MessagesFile: "compiler:Languages\Russian.isl"
[Code]
var
  BackupPage: TWizardPage;
  DeleteRadioButton, MoveRadioButton, NoneRadioButton: TNewRadioButton;
const
  BackupDescText =
    'Во избежание проблем совместимости и конфликтов между модификациями рекомендуется удалить уже установленные на данный момент в игровом клиенте.' #13#13 'Выберите необходимый пункт из представленных. При этом будет очищено содержимое папки "res_mods\0.9.10", удалена папка "res_mods\xvm" или созданы резервные копии Ваших файлов.';
  DeleteDescText =
    'Установщик удалит все файлы в папках.';
  MoveDescText =
    'Установщик сделает резервную копию всех файлов в папках.';
  NoneDescText =
    'Установщик оставит всё как есть.';
function BackupCheck_1(): Boolean;
var
  BackupDescLabel, DeleteDescLabel, MoveDescLabel, NoneDescLabel: TLabel;
begin
  BackupPage:=CreateCustomPage(wpWelcome, 'Создание резервных копий файлов перед установкой', 'Пожалуйста, прочтите следующую важную информацию перед тем, как продолжить.');
  BackupDescLabel:=TLabel.Create(WizardForm);
  BackupDescLabel.Parent:=BackupPage.Surface;
  BackupDescLabel.Left:=0;
  BackupDescLabel.Top:=0;
  BackupDescLabel.Width:=BackupPage.SurfaceWidth;
  BackupDescLabel.Height:=90;
  BackupDescLabel.AutoSize:=False;
  BackupDescLabel.Wordwrap:=True;
  BackupDescLabel.Caption:=BackupDescText;
  DeleteRadioButton:=TNewRadioButton.Create(WizardForm);
  DeleteRadioButton.Parent:=BackupPage.Surface;
  DeleteRadioButton.Checked:=False;
  DeleteRadioButton.Top:=95;
  DeleteRadioButton.Width:=BackupPage.SurfaceWidth;
  DeleteRadioButton.Font.Style:=[fsBold];
  DeleteRadioButton.Font.Size:=9;
  DeleteRadioButton.Caption:='Удалить файлы'
  DeleteDescLabel:=TLabel.Create(WizardForm);
  DeleteDescLabel.Parent:=BackupPage.Surface;
  DeleteDescLabel.Left:=18;
  DeleteDescLabel.Top:=DeleteRadioButton.Top + DeleteRadioButton.Height + 4;
  DeleteDescLabel.Width:=BackupPage.SurfaceWidth;
  DeleteDescLabel.Height:=40;
  DeleteDescLabel.AutoSize:=False;
  DeleteDescLabel.Wordwrap:=True;
  DeleteDescLabel.Caption:=DeleteDescText;
  MoveRadioButton:=TNewRadioButton.Create(WizardForm);
  MoveRadioButton.Parent:=BackupPage.Surface;
  MoveRadioButton.Checked:=True;
  MoveRadioButton.Top:=140;
  MoveRadioButton.Width:=BackupPage.SurfaceWidth;
  MoveRadioButton.Font.Style:=[fsBold];
  MoveRadioButton.Font.Size:=9;
  MoveRadioButton.Caption:='Сделать резервную копию файлов'
  MoveDescLabel:=TLabel.Create(WizardForm);
  MoveDescLabel.Parent:=BackupPage.Surface;
  MoveDescLabel.Left:=18;
  MoveDescLabel.Top:=MoveRadioButton.Top + MoveRadioButton.Height + 4;
  MoveDescLabel.Width:=BackupPage.SurfaceWidth;
  MoveDescLabel.Height:=40;
  MoveDescLabel.AutoSize:=False;
  MoveDescLabel.Wordwrap:=True;
  MoveDescLabel.Caption:=MoveDescText;
  NoneRadioButton:=TNewRadioButton.Create(WizardForm);
  NoneRadioButton.Parent:=BackupPage.Surface;
  NoneRadioButton.Checked:=False;
  NoneRadioButton.Top:=185;
  NoneRadioButton.Width:=BackupPage.SurfaceWidth;
  NoneRadioButton.Font.Style:=[fsBold];
  NoneRadioButton.Font.Size:=9;
  NoneRadioButton.Caption:='Ничего не трогать'
  NoneDescLabel:=TLabel.Create(WizardForm);
  NoneDescLabel.Parent:=BackupPage.Surface;
  NoneDescLabel.Left:=18;
  NoneDescLabel.Top:=NoneRadioButton.Top + NoneRadioButton.Height + 4;
  NoneDescLabel.Width:=BackupPage.SurfaceWidth;
  NoneDescLabel.Height:=40;
  NoneDescLabel.AutoSize:=False;
  NoneDescLabel.Wordwrap:=True;
  NoneDescLabel.Caption:=NoneDescText;
end;
function BackupCheck_2(): Boolean;
begin
  If DeleteRadioButton.Checked then
begin
  DelTree(ExpandConstant('{app}\res_mods\0.9.10'), True, True, True);
  DelTree(ExpandConstant('{app}\res_mods\xvm'), True, True, True);
  CreateDir(ExpandConstant('{app}\res_mods\0.9.10'));
end;
end;
function BackupCheck_3(): Boolean;
begin
  If MoveRadioButton.Checked then
begin
  MoveDir(ExpandConstant('{app}\res_mods\0.9.10\'),ExpandConstant('{app}\res_mods\backup\0.9.10'));
  MoveDir(ExpandConstant('{app}\res_mods\xvm\'),ExpandConstant('{app}\res_mods\backup\xvm'));
  CreateDir(ExpandConstant('{app}\res_mods\0.9.10'));
  DelTree(ExpandConstant('{app}\res_mods\xvm'), True, True, True);
end;
end;
procedure CurStepChanged(CurStep: TSetupStep);
begin
  If CurStep=ssInstall then
begin
  BackupCheck_2();
  BackupCheck_3();
end;
end;
procedure InitializeWizard();
begin
  BackupCheck_1();
end;
function MyDirName(S:String): String;
var
  InsPath: String;
  er: boolean;
  myFile:String;
begin
  Result:=ExpandConstant('C:\Games\World_of_Tanks\'); //если ключа нет то будем ставить сюда
  er := RegQueryStringValue(HKLM, 'SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{1EAC1D02-C6AC-4FA6-9A44-96258C37C812RU}_is1', 'InstallLocation', InsPath);
  if er and (InsPath<>'') then //если ключ существует и там что-то записано
  begin
    Result := InsPath;
  end;
end;
procedure LogoOnClick(Sender: TObject);
var ResCode: Integer;
begin
  ShellExec('', '{#MyAppURL}', '' , '', SW_SHOW, ewNoWait, ResCode)
end;
procedure RedesignWizardForm;
var
i: integer;
  BtnPanel: TPanel;
  BtnImage: TBitmapImage;
begin
  ExtractTemporaryFile('logo.bmp')
  BtnPanel:=TPanel.Create(WizardForm)
  with BtnPanel do begin
    Left:=0
    Top:=315
    Width:=179
    Height:=46
    Cursor:=crHand
    OnClick:=@logoOnClick
    Parent:=WizardForm
  end;
  BtnImage:=TBitmapImage.Create(WizardForm)
  with BtnImage do begin
    AutoSize:=True;
    Enabled:=False;
    Bitmap.LoadFromFile(ExpandConstant('{tmp}')+'\logo.bmp')
    Parent:=BtnPanel
  end;
  with WizardForm do
  begin
    Caption := ExpandConstant('{cm:Main}');
  end;
  with WizardForm.WizardBitmapImage do
  begin
    Width := ScaleX(502);
  end;
  with WizardForm.WelcomeLabel2 do
  begin
    Visible := False;
  end;
  with WizardForm.WelcomeLabel1 do
  begin
    Visible := False;
  end;
  with WizardForm.WizardSmallBitmapImage do
  begin
    Left := ScaleX(0);
    Width := ScaleX(502);
    Height := ScaleY(70);
  end;
  with WizardForm.PageDescriptionLabel do
  begin
    Visible := False;
  end;
  with WizardForm.PageNameLabel do
  begin
    Visible := False;
  end;
  with WizardForm.WizardBitmapImage2 do
  begin
    Width := ScaleX(502);
  end;
  with WizardForm.FinishedLabel do
  begin
    Visible := False;
  end;
  with WizardForm.FinishedHeadingLabel do
  begin
    Visible := False;
  end;
end;

добавил вот этот не не пашет выдаёт ошибку Unknown LastIndex

procedure CompOnItemMouseMove(Sender: TObject; X, Y: Integer; Index: Integer; Area: TItemArea);
var
    UndefPic: String;
begin
    if Index = -1 then Exit;
    if Index = LastIndex then Exit;
    try
        case TNewCheckListBox(Sender).ItemCaption[Index] of
          '1.Цветная обводка выбранного танка в карусели.': UndefPic := '5.bmp'; // пишем точно так же, как прописано в компонентах
          'Cиний.': UndefPic := '5.bmp';
          'Зеленый.': UndefPic := '5.bmp';
          'Лайм.': UndefPic := '5.bmp';
          'Красный.': UndefPic := '5.bmp';
          'Желтый.': UndefPic := '5.bmp';
          '2.Отключить ручник для ПТ-САУ в снайперском режиме.': UndefPic := '5.bmp';
          '3.Таймер сведения орудия.': UndefPic := '5.bmp';
          '4.Умная миникарта.': UndefPic := '5.bmp';
          '5.Панель повреждений.': UndefPic := '5.bmp';
          'GambitER.': UndefPic := '5.bmp';
          'GambitER Конфиг от demon2597.': UndefPic := '5.bmp';
          'GambitER Конфиг от maks5189.': UndefPic := '5.bmp';
          'GambitER Конфиг от Kornet_WA.': UndefPic := '5.bmp';
          'Творение троих авторов.': UndefPic := '5.bmp';
          '6.Индикатор направления ближайшего противника.': UndefPic := '5.bmp';
          '7.Список запланированных высадок на ГК в ангаре.': UndefPic := '5.bmp';
          '8.ISAZ.': UndefPic := '5.bmp';
          '9.Маркеры над техникой.': UndefPic := '5.bmp';
          'Информативные с % побед[1].': UndefPic := '5.bmp';
          'Стандартные[2].': UndefPic := '5.bmp';
          '10.Мод ХП на миникарте.': UndefPic := '5.bmp';
          '11.Нанесенный урон.': UndefPic := '5.bmp';
          'Поднять вверх[1].': UndefPic := '5.bmp';
          'Подробный[2].': UndefPic := '5.bmp';
          'Сумарный[3].': UndefPic := '5.bmp';
          '12.Карусель танков.': UndefPic := '5.bmp';
          'Танки в 2 ряда.': UndefPic := '5.bmp';
          'Танки в 3 ряда.': UndefPic := '5.bmp';
          'Добавить эффективность.': UndefPic := '5.bmp';
          'Добавить уровень боев танка.': UndefPic := '5.bmp';
          'Добавить средний урон на танке.': UndefPic := '5.bmp';
          'Добавить процент побед на танке.': UndefPic := '5.bmp';
          'Добавить процент до отметки на стволе.': UndefPic := '5.bmp';
          '13.Оленемер | XVM.': UndefPic := '5.bmp';
          'Оленемер Full.': UndefPic := '5.bmp';
          'Оленемер Light.': UndefPic := '5.bmp';
          
        else
            begin
                LastIndex := UNDEF_INDEX;
                InfoPic.Hide;
                Exit;
            end;
        end;
        if not FileExists(TempPath + UndefPic) then ExtractTemporaryFile(UndefPic);
        ShowPicHint(TempPath + UndefPic);
    finally
        LastIndex := Index;
    end;
end;


procedure CompOnMouseLeave(Sender: TObject);
begin
    InfoPic.Hide;
    LastIndex := -1;
end;


procedure InitInfo();
begin
    WizardForm.TypesCombo.Hide;
    WizardForm.ComponentsList.SetBounds(ScaleX(0), ScaleY(40), ScaleX(310), ScaleY(278));
    WizardForm.ComponentsList.OnItemMouseMove := @CompOnItemMouseMove;
    WizardForm.ComponentsList.OnMouseLeave := @CompOnMouseLeave;
    TempPath := AddBackslash(ExpandConstant('{tmp}'));
    LastIndex := UNDEF_INDEX;

    with TBevel.Create(WizardForm) do
    begin
      Parent := WizardForm.SelectComponentsPage;
      SetBounds(ScaleX(360), ScaleY(40), ScaleX(290), ScaleY(278));
      Shape := bsFrame;
    end;

    InfoPic := TBitmapImage.Create(WizardForm)
    with InfoPic do
    begin
        Parent := WizardForm.SelectComponentsPage;
        AutoSize := True;
    end;
end;


procedure InitializeWizard();
begin
  RedesignWizardForm;
    InitInfo();
end;

[ISFormDesigner]
WizardForm=FF0A005457495A415244464F524D0030101812000054504630F10B5457697A617264466F726D0A57697A617264466F726D0C436C69656E7448656967687403EA010B436C69656E74576964746803E402134F6E436F6E73747261696E6564526573697A65071057697A617264466F726D437265617465084F6E437265617465071057697A617264466F726D4372656174650C4578706C696369744C65667402000B4578706C69636974546F7002000D4578706C69636974576964746803F4020E4578706C696369744865696768740310020D506978656C73506572496E636802600A54657874486569676874020D00F10654426576656C05426576656C03546F7003F30005576964746803C9010648656967687402460B4578706C69636974546F7003F3000D4578706C69636974576964746803C9010E4578706C6963697448656967687402460000F302010C544E65774E6F7465626F6F6B0D4F757465724E6F7465626F6F6B05576964746803E9020648656967687403C9010D4578706C69636974576964746803E9020E4578706C6963697448656967687403C90100F110544E65774E6F7465626F6F6B506167650B57656C636F6D65506167650D4578706C69636974576964746803F1010E4578706C6963697448656967687403390100F10C544269746D6170496D6167651157697A6172644269746D617

        

  • Downvote 1

Share this post


Link to post

Short link
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...