Jump to content
Korean Random
EvilAlex

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

Recommended Posts

я как будто со стеной говорю мой мод пак работает 3 месяца спасибо этому форуму мне не нужна помощь онлайн спеЦов в его создании мне нужна ваша помощь в его улучшении 

Как бы никто вам в создании и не рвётся помогать.

  • Upvote 1
  • Downvote 1

Share this post


Link to post

Short link
Share on other sites

Не пробовали загуглить то, что вам подсказали?

Я, почему-то, уверен, что вы 100% найдёте правильный вариант.

 

Попробуй вот так:










Function NextButtonClick(CurPageID: Integer): Boolean;
begin
 Result := True;
 case CurPageID of
 wpSelectDir:
  if not FileExists(ExpandConstant('{app}\WorldOfTanks.exe')) then
  begin
   MsgBox('Не верно указана папка World of Tanks!', mbError, MB_OK);
   Result := False;
  end
  else
   #ifdef DateToEnd
  begin
   Result := CompareStr(GetDateTimeString('yyyy.mm.dd', '.', #0), '{#DateToEnd}') <= 0;
   If not Result then
   begin
    MsgBox('Install time limit, it is not possible to install this program.', mbError, MB_OK);
   end
   else
   begin
    Result := True;
   end;
   #endif
  end;
 end;
end;

 

Так дату не проверяет.

Вот мой код. при прошедшей дате не пропускает дальше, но при правильной указывает на отсутствие экзешника, но всеровно переходит потом на следующую страницу.



function NextButtonClick(CurPageID: Integer): Boolean;
begin
Result := True;
case CurPageID of
wpSelectDir:
if not FileExists(ExpandConstant('{app}\WorldOfTanks.exe')) then
begin
MsgBox('Не верно указана папка World of Tanks!', mbError, MB_OK);
Result := False;
end;
end;
#ifdef DateToEnd
begin
Result := CompareStr(GetDateTimeString('yyyy.mm.dd hh:nn:ss', '.', ':'), '{#DateToEnd}') <= 0;
If not Result then
begin
MsgBox('Install time limit, it is not possible to install this program.', mbError, MB_OK);
end
else
begin
Result := True;
end;
end;
#endif
end;
Edited by XXX_MUTANT

Share this post


Link to post

Short link
Share on other sites

 

@XXX_MUTANT, это не забыл?





#define DateToEnd "2015.08.08"

Нет, не забыл, я только эту часть ковыряю, меняя дату в #define DateToEnd    "2014.10.06 16:09:59"  Видать конфликтуют между собой они...

Edited by XXX_MUTANT

Share this post


Link to post

Short link
Share on other sites
Видать конфликтуют между собой они...

Изначально логичнее было бы сделать так:

#define DateToEnd "05.12.2013 15:55"

[Code]
 #ifdef DateToEnd
Function InitializeSetup(): Boolean;
begin
 Result := CompareStr(GetDateTimeString('dd.mm.yyyy hh:nn', '.', ':'), '{#DateToEnd}') <= 0;
 If not Result then
 begin
  MsgBox('Install time limit, it is not possible to install this program.', mbError, MB_OK);
 end;
end;
#endif

Function NextButtonClick(CurPageID: Integer): Boolean;
begin
 Result := True;
 case CurPageID of
  wpSelectDir:
  if not FileExists(ExpandConstant('{app}\WorldOfTanks.exe')) then
  begin
   MsgBox('Не верно указана папка World of Tanks!', mbError, MB_OK);
   Result := False;
  end
  else
  begin
   Result := True;
  end;
 end;
end;
Edited by Kotyarko_O
  • Upvote 2

Share this post


Link to post

Short link
Share on other sites

 

Изначально логичнее было бы сделать так:



#define DateToEnd "05.12.2013 15:55"

[Code]
 #ifdef DateToEnd
Function InitializeSetup(): Boolean;
begin
 Result := CompareStr(GetDateTimeString('dd.mm.yyyy hh:nn', '.', ':'), '{#DateToEnd}') <= 0;
 If not Result then
 begin
  MsgBox('Install time limit, it is not possible to install this program.', mbError, MB_OK);
 end;
end;
#endif

Function NextButtonClick(CurPageID: Integer): Boolean;
begin
 Result := True;
 case CurPageID of
  wpSelectDir:
  if not FileExists(ExpandConstant('{app}\WorldOfTanks.exe')) then
  begin
   MsgBox('Не верно указана папка World of Tanks!', mbError, MB_OK);
   Result := False;
  end
  else
  begin
   Result := True;
  end;
 end;
end;

Спасибо!+  Этот вариант помог!

Share this post


Link to post

Short link
Share on other sites

я как будто со стеной говорю мой мод пак работает 3 месяца спасибо этому форуму мне не нужна помощь онлайн спеЦов в его создании мне нужна ваша помощь в его улучшении 

Ахах, а день удался... Спасибо ещё один екземпляр, уважаемый, по-моему Вам совсем не нужна помощь, Вы сами справитесь, ахахахах.

Кстати, Атотик, как там с ползанием интерфейса на широкоформатниках, по прежнему  частично глухо?

Edited by Darksoul

Share this post


Link to post

Short link
Share on other sites
Помогите не могу

А пытались?

В данной теме есть подходящие для вас примеры, просто поищите и хоть попробуйте сделать что-то. В шапке есть архив с примерами, посмотрите их.

И попытайтесь сделать сами. А уже по ходу ваших попыток - задавайте вопросы (если будут возникать трудности). Так вы хоть немного обучитесь самостоятельной работе с Inno.

Edited by Kotyarko_O

Share this post


Link to post

Short link
Share on other sites

Ребят, привет :)

 

Понимаю, что скорее всего, этот вопрос поднимался и скорее всего решался, но я не нашел решения(

 

Пытаюсь добавить этот скрипт: http://www.koreanrandom.com/forum/topic/9050-инсталлятор-для-модпаков/page-4#entry150208

но не получается.

 

Сделал все точно по инструкции, не работает :(

 

/*тут был код*/

Edited by woole

Share this post


Link to post

Short link
Share on other sites

Сделал все точно по инструкции, не работает :(

Да ладно? Точно, что всё точно?

 

Итак, по порядку:

 1) Код у тебя так и находится в секции [Components]?

 2) Код не полный.

 

Вот так будет выглядеть нормальная конструкция: script.rar.

з.ы. заменишь компоненты на свои, и вывод картинки по имени компонента тоже. Картинки ложи в папку img_mod.

Share this post


Link to post

Short link
Share on other sites

1) Код у тебя так и находится в секции [Components]?

Там несколько картинок, если что. Я опустил ненужное.

 

2) Код не полный.

Если надо, вот полный :

 

/*тут был код*/

Edited by woole

Share this post


Link to post

Short link
Share on other sites

 

 

Если надо, вот полный
Если и надо - то полный. Абсолютно полный. Весь скрипт.

Share this post


Link to post

Short link
Share on other sites

Hey all, could someone help me fix two three issues with my code?  I'm not a coder.  I understand what needs to be done, but not how.

 

1. I need my code to be edited so that it allows the "Next" button to be highlighted when on the License Page, and the "Accept Agreement" checkmark is checked.

As it currently is, clicking "Next" does not work, unless you click "Back" and then "Next", and then you can continue.

 

2. For the "Progress Bar" to not show when on the Credit Page, thus messing up the page formating.

 

BTW, the code also needs to be able to work still without problems IF I choose NOT to have some or any of those pages show:

//(InfoBeforeFile=faq.rtf

//LicenseFile=license.rtf

//InfoAfterFile=credit.rtf), i.e. commented out.

However, if this makes fixing the code harder, don't worry about it.  I'm fine to show all these pages in my installer.

 

Thank you much, appreciated.

 

 

Code:

///////////////////////////////////////////////////////////////////////////////////
// Script for World of Tanks from San4oPack 2014                                 //
// A simple form of music, backup files (recovery after uninstalling)            //
// with pictures, etc.                                                           //
///////////////////////////////////////////////////////////////////////////////////

; At each update patch game, change only the numbers ( eg: #define Patch "0.9.2" #define Patch "0.9.3" etc.)
#define Patch "0.9.3"
; Skins are located in the Styles folder. If you want to change the skin, change only the name (for example: #define SkinName "skin.cjstyles" or #define SkinName "VistaAero.cjstyles" )
#define SkinName "CharcoalDarkSlate.vsf"
; Backup module, do not touch! To backup individual files must be the flag BeforeInstall: CreateBackup (example in this script, see: Source: "Mods\Grafika\Norm\preferences.xml"; DestDir: "{userappdata}/Wargaming.net/WorldOfTanks"; Flags: ignoreversion; BeforeInstall: CreateBackup; Tasks: grafika; )
#include "Modules\SHFileOperation.iss"

[Setup]
; Dont put a "'" in any of these.
AppName=[LAMP] Lees ALL MOD Pack
AppVersion=0.9.3.v4
AppCopyright=Copyright (C)2014 LAMP
VersionInfoVersion=0.9.3
DefaultDirName={code:GetAppDir}
DirExistsWarning=no
;ShowComponentSizes=no
WizardSmallImageFile=MyFiles\WizardSmallImage.bmp
DefaultGroupName=LAMP
DisableProgramGroupPage=yes
InfoBeforeFile=faq.rtf
LicenseFile=license.rtf
InfoAfterFile=credit.rtf

;AllowNoIcons=True
SetupIconFile=MyFiles\Wot.ico
OutputBaseFilename=LAMP_0.9.3.v4
Compression=lzma2/ultra64
InternalCompressLevel=ultra
SolidCompression=yes

; Comment the following line to disable the "Select Setup Language"
; dialog and have it rely solely on auto-detection.
ShowLanguageDialog=Yes
; If you want all languages to be listed in the "Select Setup Language"
; dialog, even those that can't be displayed in the active code page,
; uncomment the following line. Note: Unicode Inno Setup always displays
; all languages.
ShowUndisplayableLanguages=yes

[Languages]
Name: en; MessagesFile: "compiler:Default.isl"
Name: nl; MessagesFile: "compiler:Languages\Dutch.isl"
Name: de; MessagesFile: "compiler:Languages\German.isl"
Name: ru; MessagesFile: "compiler:Languages\Russian.isl"

[Types]
Name: "full"; Description: "Full"
Name: "custom"; Description: "Custom"; Flags: iscustom

[Components]
Name: XVM; Description: XVM; Types: full custom; Flags: disablenouninstallwarning checkablealone dontinheritcheck
Name: xvm\pref; Description: Prime_eff; Flags: exclusive disablenouninstallwarning
Name: pricel; Description: Sights; Types: full custom; Flags: disablenouninstallwarning checkablealone dontinheritcheck
Name: pricel\jmb; Description: J1mbo; Types: full; Flags: exclusive disablenouninstallwarning
Name: pricel\zyz; Description: Zayaz; Flags: exclusive disablenouninstallwarning
Name: pricel\20; Description: Spectr20; Flags: exclusive disablenouninstallwarning
Name: chat; Description: Text Chat; Types: full custom; Flags: disablenouninstallwarning checkablealone dontinheritcheck
Name: chat\pod; Description: Advanced Tips; Types: full; Flags: disablenouninstallwarning
Name: chat\mcm; Description: Maud colored posts; Types: full; Flags: disablenouninstallwarning
Name: angar; Description: Hangar Mods; Types: full custom; Flags: disablenouninstallwarning checkablealone dontinheritcheck
Name: angar\mn; Description: Hangar Minimalistic; Types: full; Flags: disablenouninstallwarning exclusive
Name: zvonok; Description: Sound Mods; Types: full custom; Flags: disablenouninstallwarning checkablealone dontinheritcheck
Name: zvonok\zk; Description: 6 voice feelings fire; Types: full; Flags: disablenouninstallwarning

[Icons]
Name: "{group}\{cm:UninstallProgram,{#SetupSetting("AppName")}}"; Filename: "{uninstallexe}"; IconFilename: "{app}\uninstall.ico"; Comment: "Remove {#SetupSetting("AppName")} from your computer";

[Tasks]
Name: "grafika"; Description: "Graphics settings (average PC)"; GroupDescription: "Settings:"; Flags: checkedonce
Name: "fps"; Description: Disable the smoke and flames when fired; GroupDescription: "Performance:"; Flags: checkedonce
Name: "fps2"; Description: Disable the smoke from the exhaust pipe; GroupDescription: "Performance:"; Flags: checkedonce
Name: "fps3"; Description: Disable the smoke from the tanks destroyed; GroupDescription: "Performance:"; Flags: checkedonce
Name: "fps4"; Description: Disable the effect of explosions and shells; GroupDescription: "Performance:"; Flags: unchecked
Name: "fps5"; Description: Disable the effect of motion of the trees; GroupDescription: "Performance:"; Flags: checkedonce
Name: "fps6"; Description: Disable the effect of contact with objects; GroupDescription: "Performance:"; Flags: unchecked
Name: "fps7"; Description: Disable the effect of falling into the tank; GroupDescription: "Performance:"; Flags: unchecked
Name: "fps8"; Description: Disable the effect of destruction of the tank; GroupDescription: "Performance:"; Flags: checkedonce
Name: "fps9"; Description: Disable effects of destruction of objects; GroupDescription: "Performance:"; Flags: checkedonce

[Files]
Source: "dll\*"; DestDir: "{app}"; Flags: ignoreversion solidbreak; BeforeInstall: ChangeCaption('Copying files...wait..'); Attribs: hidden system;
Source: "MyFiles\*"; DestDir: "{app}"; Flags: ignoreversion dontcopy; Attribs: hidden system;
Source: "Styles\{#SkinName}"; DestDir: "{app}"; Flags: ignoreversion; Attribs: hidden system;
Source: "image\*"; Flags: dontcopy noencryption;
Source: {app}\Backup\xvm\db\tokens.xdb; DestDir: {app}\res_mods\xvm\db; Flags: skipifsourcedoesntexist external;
Source: "Mods\Grafika\Norm\preferences.xml"; DestDir: "{userappdata}/Wargaming.net/WorldOfTanks"; Flags: ignoreversion; BeforeInstall: CreateBackup; Tasks: grafika;
Source: "Mods\wot\fps\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs; Tasks: fps;
Source: "Mods\wot\fps2\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs; Tasks: fps2;
Source: "Mods\wot\fps3\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs; Tasks: fps3;
Source: "Mods\wot\fps4\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs; Tasks: fps4;
Source: "Mods\wot\fps5\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs; Tasks: fps5;
Source: "Mods\wot\fps6\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs; Tasks: fps6;
Source: "Mods\wot\fps7\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs; Tasks: fps7;
Source: "Mods\wot\fps8\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs; Tasks: fps8;
Source: "Mods\wot\fps9\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs; Tasks: fps9;

//============== MODS =======================================\\
Source: "Mods\xvm\Prime_eff\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs; Components: xvm\pref;
Source: "Mods\pricel\JIMBO\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs; Components: pricel\jmb;
Source: "Mods\pricel\zayaz\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs; Components: pricel\zyz;
Source: "Mods\pricel\Spectr20\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs; Components: pricel\20;
//=== the beginning of text mode =======================================================================================================================\\
Source: "{app}\res\text\*"; DestDir: "{app}\res_mods\{#Patch}\text\"; Flags: external recursesubdirs skipifsourcedoesntexist; Components: chat;
Source: "Mods\chat\podskaz\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs; Components: chat\pod;
Source: "Mods\chat\mcm\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs; Components: chat\mcm;
//=== end of text mode ===//
Source: "Mods\angar\garage\mini\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs; Components: angar\mn;
//=== the beginning of the audio files ===============================================================================================================================\\
Source: "{app}\res\audio\*"; DestDir: "{app}\res_mods\{#Patch}\audio\"; Flags: external recursesubdirs skipifsourcedoesntexist; Components: zvonok;
Source: "Mods\zvonok\zvuki\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs; Components: zvonok\zk;
//=== end of the audio files ===//

[Code]
const
  BColor = clBlue;
  EColor = clblack;
  BM_CLICK=$00F5;
  
type
  TBtnEventProc = procedure (h:HWND);
  TImgPB = record
    Left,
    Top,
    Width,
    Height,
    MaxWidth  : integer;
    img1,img2 : Longint;
  end;

var
  InfoPanel: TPanel;
  LogoLabel: TLabel;
  PBCount, ResultCode, LastIndex, CurrentImage, ProgressStep,LastIndex,ErrorCode,X,Y,i,n: Integer;
  Rus: boolean;
  GIFHWND2, MusicButton, hCancelBtn, hNextBtn, hBackBtn, hDirBrowseBtn, hGroupBrowseBtn,  hCancelUninstBtn: HWND;

  WFButtonFont, UPFButtonFont: TFont;
  UndefPic, GifFileName, OldDisk, TimeLeft, TempPath: string;
  Workspace, DirFolder, GroupFolder, WizardImg, MyLogo: Longint;
  InfoCaption, Info, Lbl: TNewStaticText;
  InfoPic: TBitmapImage;

const
   HALIGN_CENTER = 0;
   HALIGN_LEFT = 1;
   HALIGN_RIGHT = 2;

   VALIGN_CENTER = 0;
   VALIGN_TOP = 1;
   VALIGN_BOTTOM = 2;

   FIT_NONE = 0;
   FIT_WIDTH = 1;
   FIT_HEIGHT = 2;    
   FIT_BOTH = 3;      

   CLR_INVALID = $FFFFFFFF; 
   UNDEF_INDEX = -777;
   BtnClickEventID      = 1;
   BtnMouseEnterEventID = 2;

#include "Modules\MDL.iss"
#include "Modules\Button.iss"
#include "Modules\bass.iss"
#include "Modules\TextureProgressBar.iss"

procedure ShowPicHint(const PicFilePath: String);
  var
    pt: TPoint;
  begin
    if not GetCursorPos(pt) then Exit;
    InfoPic.Bitmap.LoadFromFile(PicFilePath);
    InfoPic.SetBounds(ScaleX(300), ScaleY(10), 310, 280);
    InfoPic.Show;
  end;

procedure CompOnItemMouseMove(Sender: TObject; X, Y: Integer; Index: Integer; Area: TItemArea);
  begin
    if Index = -1 then Exit;
    if Index = LastIndex then Exit;
    try
        case TNewCheckListBox(Sender).ItemCaption[Index] of
            'XVM': UndefPic := '2.bmp';
            'Prime_eff': UndefPic := '4.bmp';
            'J1mbo': UndefPic := '12.bmp';
            'Zayaz': UndefPic := '13.bmp';
            'Advanced tips': UndefPic := '30.bmp';
            'Maud colored posts': UndefPic := '31.bmp';
            'hangar Minimalistic': UndefPic := '34.bmp';
            '6 Ozvuchka feelings fire': UndefPic := '53.bmp';
            'Spectr20': UndefPic := '62.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.OnItemMouseMove := @CompOnItemMouseMove;
    WizardForm.ComponentsList.OnMouseLeave := @CompOnMouseLeave;
    TempPath := AddBackslash(ExpandConstant('{tmp}'));
    LastIndex := UNDEF_INDEX;

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

function GetAppDir(Path: String): String;
begin
  if RegKeyExists(HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{1EAC1D02-C6AC-4FA6-9A44-96258C37C812RU}_is1') then begin
    RegQueryStringValue(HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{1EAC1D02-C6AC-4FA6-9A44-96258C37C812RU}_is1', 'InstallLocation', Path);
    Result := Path end else
  Result := ExpandConstant('C:\Games\World_of_Tanks')
end;
// hint -------------
procedure HintStr(Sender: TObject; X: Integer; Y: Integer; Index: Integer; Area: TItemArea);
begin
  if Index<>LastIndex then begin
    LastIndex:= Index;
    WizardForm.TasksList.ShowHint:= False;
    WizardForm.TasksList.Hint:= '';
    Exit;
  end;
  with WizardForm.TasksList do
  case Index of
    0 : Hint := '';
    1 : Hint := 'Optimal graphics settings for the average PC';
    2 : Hint := '';
    3 : Hint := 'Increasing FPS by disabling certain Perm. effects have a negative impact on system performance';
    4 : Hint := '';
    5 : Hint := '';
    6 : Hint := '';
  else
    Hint := '';
  end;
  WizardForm.TasksList.ShowHint:= True;
end;
// hint -------------

procedure ChangeCaption(str: string);
begin
WizardForm.StatusLabel.Caption:= str;
end;

procedure CreateBackup;
var
srcFile, destFile: string;
begin
srcFile:= ExpandConstant(CurrentFileName);
destFile:= srcFile + '.bak';
DeleteFile(destFile);
RenameFile(srcFile, destFile);
end;

procedure RestoreBackup(backupDir: string);
var
srcFile, destFile: string;
FSR, DSR: TFindRec;
FindResult: Boolean;
APath: string;
begin
APath := AddBackslash(backupDir);
FindResult := FindFirst(APath + '*.bak', FSR);
try
while FindResult do
begin
if FSR.Attributes and FILE_ATTRIBUTE_DIRECTORY = 0 then
begin
srcFile:= APath + FSR.Name;
destFile:= Copy(srcFile, 0, Length(srcFile)-4);
DeleteFile(destFile);
RenameFile(srcFile, destFile);
end;
FindResult := FindNext(FSR);
end;
FindResult := FindFirst(APath + '*.*', DSR);
while FindResult do
begin
if ((DSR.Attributes and FILE_ATTRIBUTE_DIRECTORY) = FILE_ATTRIBUTE_DIRECTORY) and
not ((DSR.Name = '.') or (DSR.Name = '..')) then
{Recursion} RestoreBackup(APath + DSR.Name);
FindResult := FindNext(DSR);
end;
finally
FindClose(FSR);
FindClose(DSR);
end;
end;

// Import the LoadVCLStyle function from VclStylesInno.DLL
procedure LoadVCLStyle(VClStyleFile: String); external 'LoadVCLStyleA@files:VclStylesInno.dll stdcall';
// Import the UnLoadVCLStyles function from VclStylesInno.DLL
procedure UnLoadVCLStyles; external 'UnLoadVCLStyles@files:VclStylesInno.dll stdcall';

function InitializeSetup(): Boolean;
begin
  //SetThemeAppProperties(0);
 // ExtractTemporaryFile('isskin.dll');
//  ExtractTemporaryFile('{#SkinName}');
//  LoadSkin(ExpandConstant('{tmp}\{#SkinName}'), '');
  ExtractTemporaryFile('{#SkinName}');
  LoadVCLStyle(ExpandConstant('{tmp}\{#SkinName}'));
  GIFHWND2 := 0;

  ExtractTemporaryFile('MusicButton.bmp');
  ExtractTemporaryFile('music.mp3');
  ExtractTemporaryFile('innocallback.dll');
  ExtractTemporaryFile('Click.wav');
  ExtractTemporaryFile('WFEnter.wav');
  if not FileExists(ExpandConstant('{tmp}\botva2.dll')) then ExtractTemporaryFile('botva2.dll');
  Result:=True;
end;

procedure LogoLabelOnClick(Sender: TObject);
begin
  ShellExec('open', 'http://www.leeuniverse.com', '', '', SW_SHOWNORMAL, ewNoWait, ErrorCode)
end;

procedure LblOnClick(Sender: TObject);
begin
  ShellExec('open', 'http://www.leeuniverse.com', '', '', SW_SHOWNORMAL, ewNoWait, ErrorCode);
end;

procedure CreateForm;
  begin
  with WizardForm do
  begin
    X:=ScaleX(200);
    Y:=ScaleX(150);
    Position := poScreenCenter;
    Width:= WizardForm.Width + X;
    Height:= WizardForm.Height + Y;
    Bevel.top:= WizardForm.Bevel.top + Y;
    Bevel.Width:= WizardForm.Width;
    Bevel1.Width:= WizardForm.Width;
    OuterNotebook.Width := WizardForm.OuterNotebook.Width + X
    OuterNotebook.Height := WizardForm.OuterNotebook.Height + Y
    InnerNotebook.Width := WizardForm.InnerNotebook.Width + X
    InnerNotebook.Height := WizardForm.InnerNotebook.Height + Y
    Caption := ExpandConstant('{#SetupSetting("AppName")}');
    // BorderStyle := bsDialog;
    WelcomeLabel1.Hide;
    WelcomeLabel2.Hide;
    PageNameLabel.Hide;
    PageDescriptionLabel.Hide;
    SelectComponentsLabel.Hide;
    ComponentsDiskSpaceLabel.Hide;
    DiskSpaceLabel.Hide;
    FinishedLabel.Hide;
    FinishedHeadingLabel.Hide;
    WizardBitmapImage.Hide;
    WizardBitmapImage2.Hide;
    SelectDirBitmapImage.Hide;
    SelectGroupBitmapImage.Hide;
    InfoAfterClickLabel.Hide;
    
  with WizardForm do
  begin
    Font.Name:='Georgia';
    Font.Style :=  [];
  end;

  with NextButton do
  begin
    Left := WizardForm.NextButton.left + 255;
    Top := WizardForm.Bevel.top + 8;
  end;

  with BackButton do
  begin
    Left := WizardForm.BackButton.left + 250;
    Top := WizardForm.Bevel.top + 8;
  end;

if not FileExists(ExpandConstant('{tmp}\fon.jpg')) then ExtractTemporaryFile('fon.jpg');
  ImgLoad(WizardForm.WelcomePage.Handle, ExpandConstant('{tmp}\fon.jpg'), ScaleX(0),ScaleY(0),WizardForm.OuterNotebook.Width, WizardForm.OuterNotebook.Height,true,true);
  ImgApplyChanges(WizardForm.WelcomePage.Handle);
  
if not FileExists(ExpandConstant('{tmp}\znak.png')) then ExtractTemporaryFile('znak.png');
  ImgLoad(WizardForm.SelectDirPage.Handle, ExpandConstant('{tmp}\znak.png'), ScaleX(465), ScaleY(73), ScaleX(150), ScaleY(150), true, true);
  ImgApplyChanges(WizardForm.SelectDirPage.Handle);

if not FileExists(ExpandConstant('{tmp}\finish.jpg')) then ExtractTemporaryFile('finish.jpg');
  ImgLoad(WizardForm.FinishedPage.Handle, ExpandConstant('{tmp}\finish.jpg'), ScaleX(0),ScaleY(0),WizardForm.OuterNotebook.Width, WizardForm.OuterNotebook.Height,true,true);
  ImgApplyChanges(WizardForm.FinishedPage.Handle);

if not FileExists(ExpandConstant('{tmp}\DirFolder.png')) then ExtractTemporaryFile('DirFolder.png');
  DirFolder:=ImgLoad(WizardForm.SelectDirPage.Handle,ExpandConstant('{tmp}\DirFolder.png'),ScaleX(0), ScaleY(0),ScaleX(34),ScaleY(30),True,True);
if not FileExists(ExpandConstant('{tmp}\GroupFolder.png')) then ExtractTemporaryFile('GroupFolder.png');
  GroupFolder:=ImgLoad(WizardForm.SelectDirPage.Handle,ExpandConstant('{tmp}\GroupFolder.png'),ScaleX(0), ScaleY(120),ScaleX(34),ScaleY(30),True,True);
  ImgApplyChanges(WizardForm.SelectDirPage.Handle);

if not FileExists(ExpandConstant('{tmp}\img.png')) then ExtractTemporaryFile('img.png');
  Workspace:=ImgLoad(WizardForm.SelectComponentsPage.Handle,ExpandConstant('{tmp}\img.png'), ScaleX(300), ScaleY(10), ScaleX(310), ScaleY(280),True,True);
  ImgApplyChanges(WizardForm.SelectComponentsPage.Handle);
  
ExtractTemporaryFile('button.png');
ExtractTemporaryFile('Check.wav');

ExtractTemporaryFile('logo.png');
MyLogo:=ImgLoad(WizardForm.WelcomePage.Handle,ExpandConstant('{tmp}\logo.png'), ScaleX(520), ScaleY(6), ScaleX(160), ScaleY(140), False, False);
ImgApplyChanges(WizardForm.WelcomePage.Handle);
LogoLabel := TLabel.Create(WizardForm);

  with LogoLabel do
  begin
  Parent := WizardForm.WelcomePage;
  SetBounds(ScaleX(520), ScaleY(6), 160, 140);
  Transparent:=True;
  Cursor := crHand;
  OnClick:=@LogoLabelOnClick;
  end;
// =================== [Form] ==============================
  with MainPanel do
    Width:= WizardForm.MainPanel.Width + X;
  with WizardSmallBitmapImage do
  begin
    SetBounds(ScaleX(0), ScaleY(0), 700, 60);
  end;
  
  with WizardForm.DirEdit do begin
   AutoSelect := False;
   ReadOnly := True;
  end;
  
  with ComponentsList do
  begin
    SetBounds(ScaleX(5), ScaleY(10), 280, 280);
    Color := clBtnFace;
    Font.Name := 'Tahoma';
    Font.Size := 9;
    Font.Style := [];
    Parent:= WizardForm.SelectComponentsPage;
  end;

  with WizardForm.GroupBrowseButton do
  begin
    Top := ScaleY(191);
    Parent := WizardForm.SelectDirPage;
  end;

  with WizardForm.GroupEdit do
  begin
    Top := ScaleY(192);
    Parent := WizardForm.SelectDirPage;
  end;

  with WizardForm.SelectStartMenuFolderBrowseLabel do
  begin
    Parent := WizardForm.SelectDirPage;
    Top := ScaleY(155);
  end;

  with WizardForm.SelectStartMenuFolderLabel do
  begin
    Parent := WizardForm.SelectDirPage;
    Top := ScaleY(128);
  end;

  with NoIconsCheck do
  begin
    Parent := WizardForm.SelectDirPage;
    Top := ScaleY(250);
    Visible := true
  end;
    WizardForm.ReadyMemo.SetBounds(ScaleX(0), ScaleY(60), 610, 300);
  end;
  
  with WizardForm.SelectTasksPage do
  begin
    WizardForm.TasksList.SetBounds(ScaleX(0), WizardForm.TasksList.Top, 610, 340);
  end;
  
  with WizardForm do
  begin
  with TasksList do
  begin
    ShowHint := True;
    Hint := '';
    OnItemMouseMove := @HintStr;
  end;

  with WizardForm.InfoAfterMemo do  begin
    WizardForm.InfoAfterMemo.SetBounds(ScaleX(0), ScaleY(30), 610, 300);
  end;
    
  with WizardForm.PreparingLabel do
  begin 
    Width := ScaleX(610);
    end;
    WizardForm.PreparingMemo.SetBounds(ScaleX(0), WizardForm.PreparingMemo.Top, 610, WizardForm.PreparingMemo.Height);
  end;
  
  with WizardForm.FilenameLabel do
  begin
    Left := ScaleX(0)
    Top := ScaleY(50);
    Width := ScaleX(580);
  end;
    WizardForm.StatusLabel.Left := ScaleX(0)

  with WizardForm.ProgressGauge do
  begin
    Parent:=WizardForm;
    SetBounds(ScaleX(40), ScaleY(100), 580, 30);
    Hide;
  end;
    TextureProgressBar(WizardForm.ProgressGauge, $898987, cllime, false);
  end;

// =================== [Form] ==============================
procedure InitializeWizard();
 begin
    InitInfo();
    CreateForm;
    ButtonsTextures;
    Music;

  mp3Name := ExpandConstant('{tmp}\music.mp3');
  BASS_Init(-1, 44100, 0, 0, 0);
  mp3Handle := BASS_StreamCreateFile(FALSE, PAnsiChar(mp3Name), 0, 0, 0, 0, BASS_SAMPLE_LOOP);
  BASS_Start();
  BASS_ChannelPlay(mp3Handle, False);

  ExtractTemporaryFile('logo.gif');

  GIFHWND2 := NewGifbWnd(WizardForm.Handle, ScaleX(80), WizardForm.Bevel.Top + ScaleY(8), 160, 33);
  GifWndLoadFromFile(GIFHWND2, HALIGN_CENTER, VALIGN_CENTER, CLR_INVALID, FIT_NONE, ExpandConstant('{tmp}\logo.gif'));
  Lbl := TNewStaticText.Create(WizardForm);
  Lbl.Parent := WizardForm;
  Lbl.AutoSize := False;
  Lbl.SetBounds(ScaleX(80), WizardForm.Bevel.Top + ScaleY(8), 160, 33);
  Lbl.OnClick := @LblOnClick;
  Lbl.Cursor := crHand;

  InfoPanel := TPanel.Create(WizardForm);
  InfoPanel.SetBounds(ScaleX(5), ScaleY(300), 605, 80);
  Info := TNewStaticText.Create(WizardForm);
  Info.Parent := WizardForm.SelectComponentsPage;
  Info.AutoSize := False;
  Info.SetBounds(ScaleX(15), ScaleY(310), 588, 68);
  Info.Caption := '';
  Info.Font.Name := '';
  Info.Font.Size := 9;
  Info.WordWrap := true;
  enabledesc(WizardForm.ComponentsList.Handle,Info.Handle,
       'XVM: eXtended Visualization Mod — modification of the combat interface for the popular MMO World of Tanks. To display statistics, you need to enable it on the site XVM (www.modxvm.com);'+
       'XVM Ded_Shalfey configs "Prime_eff". Rating statistics Total victory of and techniques chance;'+ //
       ' ;'+
       'The sight of Jimbo. This sight can be classified as futuristic. Though he is equipped with additional graphic details - they do not have an overabundance, established a rather compact and organically.;'+
       'Sights from Zayaz help you not only comfortable and shoot accurately, but still give you a chance to not get under the opponents shots.;'+
       'The sight of Spectr20. Simple minimalist sight calculator enemy armor. The first value of your penetration of the projectile, the second tank armor at this point. Art sight can be adjusted from the config file CPSSetting.xml;'+ //
       ' ;'+ //
       'Modification of fashion "Advanced tips for skills and abilities" of phantasm, add an extension to the description of the skills, abilities, medals, consumables and snaryadam.Ves font normal size, the positive effects are highlighted in green;'+ //
       'Maud colored messages (MCM) from Vslav666. Detailed statistics on the battle, the number of wins and losses, the entire wage experience wage display free experience for the fight;'+ //
       ' ;'+ //
       'The easiest and fastest hangar of Hellinger. This hangar is notable for the fact that its author has made every effort to improve system performance while in the hangar. Ideal for owners of low-end PCs.;'+ //
       ' ;'+
       '6 Ozvuchka feelings sound fire perezaryad and t.p;'
       );
end;

procedure ShowComponents(CurPageID: Integer);
begin
  case CurPageID of
  wpSelectDir: begin
  ImgSetVisibility(DirFolder,True);
  ImgSetVisibility(GroupFolder,True);
end;
end;
end;

procedure CurPageChanged(CurPageID: Integer);
 begin
  if CurPageID = wpSelectDir then
     WizardForm.NoIconsCheck.Checked := True;
  SetStateNewButtons;
  ImgSetVisibility(DirFolder,False);
  ImgSetVisibility(GroupFolder,False);
  ShowComponents(CurPageID);
  ImgApplyChanges(WizardForm.InnerPage.Handle)
  ImgApplyChanges(WizardForm.Handle);

  if CurPageID=wpFinished then begin
  WizardForm.ProgressGauge.Hide;
  SendMessage(WizardForm.NextButton.Handle,BM_CLICK,0,0);
  end;
end;

procedure CurStepChanged(CurStep: TSetupStep);
begin
ProgressTimer(CurStep);
  if CurStep = ssInstall then
    begin
      MoveDir(ExpandConstant('{app}\res_mods\'),ExpandConstant('{app}\Backup'));
      WizardForm.ProgressGauge.Show;
    end;
//begin
//if CurStep = ssDone then
//if MsgBox('modification ' + 'successfully' + ' performed!' + #10#10#13 + 'Start ' + 'game' + '?' , mbInformation, MB_OKCANCEL) = IDOK then
//Exec(ExpandConstant('{app}\WorldOfTanks.exe'), '', '', SW_SHOW, ewNoWait, ResultCode);
//end;
end;

procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
if CurUninstallStep = usPostUninstall then
begin
MoveDir(ExpandConstant('{app}\Backup\'),ExpandConstant('{app}\res_mods'));
RemoveDir(ExpandConstant('{app}\Backup'));
RestoreBackup(ExpandConstant('{app}'))
end;
end;

procedure DeinitializeSetup();
begin
    ShowWindow(StrToInt(ExpandConstant('{wizardhwnd}')), 0);
//    UnloadSkin;
    gdipShutdown;
    FreeAllGifWnd();
    WFButtonFont.Free;
    disabledesc();
    BASS_Stop();
    BASS_Free();
 end;

//function InitializeUninstall: Boolean;
// begin
//    FileCopy(ExpandConstant('{app}\VclStylesinno.dll'), ExpandConstant('{tmp}\VclStylesinno.dll'), False);
//    FileCopy(ExpandConstant('{app}\{#SkinName}'), ExpandConstant('{tmp}\{#SkinName}'), False);
//    LoadSkin(ExpandConstant('{tmp}\{#SkinName}'), '');
//    Result:=True;
// end;
 

 

 

License Accept Page:  (LicenseFile=license.rtf)

 

FgyhqOr.png

 

 

End of Install Credits Page:  (InfoAfterFile=credit.rtf)

 

4OGMKcT.png

 

 

----------

 

Forgot one other thing.....

 

3. Could you help me fix this alignment issue?  I think the code took the alignment from the next page, which is the "Select Directory" section which has an "Image" in the empty Right Space area.

 

I see the issue also occurs with the above "Licensing Page" section.  Need it fixed there also.

 

 

Introduction Page:  (InfoBeforeFile=faq.rtf)

3JbZbxG.png

 

Enjoy.    (Thanks to san4o for help in making this possible.)

 

P.S.  These three issues do not occur when not including the three pages into the script.  The installer works perfect.

//InfoBeforeFile=faq.rtf
//LicenseFile=license.rtf
//InfoAfterFile=credit.rtf


Also....  I think starting at line 600 or so is where one has to edit the code so the "Progress Bar" doesn't show in the Credit Page.  Seems anyway.

But again, not being a coder, not sure how.

Edited by leeuniverse

Share this post


Link to post

Short link
Share on other sites

1. I need my code to be edited so that it allows the "Next" button to be highlighted when on the License Page, and the "Accept Agreement" checkmark is checked. As it currently is, clicking "Next" does not work, unless you click "Back" and then "Next", and then you can continue.

I don`t know, what happend with this button)

90%, what guilty is: Button.iss, MDL.iss, botva.dll.

 

2. For the "Progress Bar" to not show when on the Credit Page, thus messing up the page formating.

fixed.

 

BTW, the code also needs to be able to work still without problems IF I choose NOT to have some or any of those pages show:

//(InfoBeforeFile=faq.rtf

//LicenseFile=license.rtf

//InfoAfterFile=credit.rtf), i.e. commented out.

Should be ok.

 

3. Could you help me fix this alignment issue? I think the code took the alignment from the next page, which is the "Select Directory" section which has an "Image" in the empty Right Space area.

fixed.

 

Link to download: https://www.dropbox.com/s/1uc136j3236a5jj/World%20of%20Tanks_Mods.rar?dl=0

Edited by Kotyarko_O

Share this post


Link to post

Short link
Share on other sites

leeuniverse,

нужно просто выровнять страницы.

прогрессбар закрепить на нужной странице и всё.

В лиц. станице баг из-за текстуированных кнопок. Закомментил, но звуки клика оставил.

 

Вобщем вот твой код.

///////////////////////////////////////////////////////////////////////////////////
// Script for World of Tanks from San4oPack 2014 //
// A simple form of music, backup files (recovery after uninstalling) //
// with pictures, etc. //
///////////////////////////////////////////////////////////////////////////////////

; At each update patch game, change only the numbers ( eg: #define Patch "0.9.2" #define Patch "0.9.3" etc.)
#define Patch "0.9.3"
; Skins are located in the Styles folder. If you want to change the skin, change only the name (for example: #define SkinName "skin.cjstyles" or #define SkinName "VistaAero.cjstyles" )
#define SkinName "CharcoalDarkSlate.vsf"
; Backup module, do not touch! To backup individual files must be the flag BeforeInstall: CreateBackup (example in this script, see: Source: "Mods\Grafika\Norm\preferences.xml"; DestDir: "{userappdata}/Wargaming.net/WorldOfTanks"; Flags: ignoreversion; BeforeInstall: CreateBackup; Tasks: grafika; )
#include "Modules\SHFileOperation.iss"

[Setup]
; Dont put a "'" in any of these.
AppName=[LAMP] Lees ALL MOD Pack
AppVersion=0.9.3.v4
AppCopyright=Copyright (C)2014 LAMP
VersionInfoVersion=0.9.3
DefaultDirName={code:GetAppDir}
DirExistsWarning=no
;ShowComponentSizes=no
WizardSmallImageFile=MyFiles\WizardSmallImage.bmp
DefaultGroupName=LAMP
DisableProgramGroupPage=yes
InfoBeforeFile=faq.rtf
LicenseFile=license.rtf
InfoAfterFile=credit.rtf

;AllowNoIcons=True
SetupIconFile=MyFiles\Wot.ico
OutputBaseFilename=LAMP_0.9.3.v4
Compression=lzma2/ultra64
InternalCompressLevel=ultra
SolidCompression=yes

; Comment the following line to disable the "Select Setup Language"
; dialog and have it rely solely on auto-detection.
ShowLanguageDialog=Yes
; If you want all languages to be listed in the "Select Setup Language"
; dialog, even those that can't be displayed in the active code page,
; uncomment the following line. Note: Unicode Inno Setup always displays
; all languages.
ShowUndisplayableLanguages=yes

[Languages]
Name: en; MessagesFile: "compiler:Default.isl"
Name: nl; MessagesFile: "compiler:Languages\Dutch.isl"
Name: de; MessagesFile: "compiler:Languages\German.isl"
Name: ru; MessagesFile: "compiler:Languages\Russian.isl"

[Types]
Name: "full"; Description: "Full"
Name: "custom"; Description: "Custom"; Flags: iscustom

[Components]
Name: XVM; Description: XVM; Types: full custom; Flags: disablenouninstallwarning checkablealone dontinheritcheck
Name: xvm\pref; Description: Prime_eff; Flags: exclusive disablenouninstallwarning
Name: pricel; Description: Sights; Types: full custom; Flags: disablenouninstallwarning checkablealone dontinheritcheck
Name: pricel\jmb; Description: J1mbo; Types: full; Flags: exclusive disablenouninstallwarning
Name: pricel\zyz; Description: Zayaz; Flags: exclusive disablenouninstallwarning
Name: pricel\20; Description: Spectr20; Flags: exclusive disablenouninstallwarning
Name: chat; Description: Text Chat; Types: full custom; Flags: disablenouninstallwarning checkablealone dontinheritcheck
Name: chat\pod; Description: Advanced Tips; Types: full; Flags: disablenouninstallwarning
Name: chat\mcm; Description: Maud colored posts; Types: full; Flags: disablenouninstallwarning
Name: angar; Description: Hangar Mods; Types: full custom; Flags: disablenouninstallwarning checkablealone dontinheritcheck
Name: angar\mn; Description: Hangar Minimalistic; Types: full; Flags: disablenouninstallwarning exclusive
Name: zvonok; Description: Sound Mods; Types: full custom; Flags: disablenouninstallwarning checkablealone dontinheritcheck
Name: zvonok\zk; Description: 6 voice feelings fire; Types: full; Flags: disablenouninstallwarning

[Icons]
Name: "{group}\{cm:UninstallProgram,{#SetupSetting("AppName")}}"; Filename: "{uninstallexe}"; IconFilename: "{app}\uninstall.ico"; Comment: "Remove {#SetupSetting("AppName")} from your computer";

[Tasks]
Name: "grafika"; Description: "Graphics settings (average PC)"; GroupDescription: "Settings:"; Flags: checkedonce
Name: "fps"; Description: Disable the smoke and flames when fired; GroupDescription: "Performance:"; Flags: checkedonce
Name: "fps2"; Description: Disable the smoke from the exhaust pipe; GroupDescription: "Performance:"; Flags: checkedonce
Name: "fps3"; Description: Disable the smoke from the tanks destroyed; GroupDescription: "Performance:"; Flags: checkedonce
Name: "fps4"; Description: Disable the effect of explosions and shells; GroupDescription: "Performance:"; Flags: unchecked
Name: "fps5"; Description: Disable the effect of motion of the trees; GroupDescription: "Performance:"; Flags: checkedonce
Name: "fps6"; Description: Disable the effect of contact with objects; GroupDescription: "Performance:"; Flags: unchecked
Name: "fps7"; Description: Disable the effect of falling into the tank; GroupDescription: "Performance:"; Flags: unchecked
Name: "fps8"; Description: Disable the effect of destruction of the tank; GroupDescription: "Performance:"; Flags: checkedonce
Name: "fps9"; Description: Disable effects of destruction of objects; GroupDescription: "Performance:"; Flags: checkedonce

[Files]
Source: "dll\*"; DestDir: "{app}"; Flags: ignoreversion solidbreak; BeforeInstall: ChangeCaption('Copying files...wait..'); Attribs: hidden system;
Source: "MyFiles\*"; DestDir: "{app}"; Flags: ignoreversion dontcopy; Attribs: hidden system;
Source: "Styles\{#SkinName}"; DestDir: "{app}"; Flags: ignoreversion; Attribs: hidden system;
Source: "image\*"; Flags: dontcopy noencryption;
;Source: {app}\Backup\xvm\db\tokens.xdb; DestDir: {app}\res_mods\xvm\db; Flags: skipifsourcedoesntexist external;
;Source: "Mods\Grafika\Norm\preferences.xml"; DestDir: "{userappdata}/Wargaming.net/WorldOfTanks"; Flags: ignoreversion; BeforeInstall: CreateBackup; Tasks: grafika;
;Source: "Mods\wot\fps\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs; Tasks: fps;
;Source: "Mods\wot\fps2\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs; Tasks: fps2;
;Source: "Mods\wot\fps3\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs; Tasks: fps3;
;Source: "Mods\wot\fps4\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs; Tasks: fps4;
;Source: "Mods\wot\fps5\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs; Tasks: fps5;
;Source: "Mods\wot\fps6\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs; Tasks: fps6;
;Source: "Mods\wot\fps7\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs; Tasks: fps7;
;Source: "Mods\wot\fps8\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs; Tasks: fps8;
;Source: "Mods\wot\fps9\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs; Tasks: fps9;
;
;//============== MODS =======================================\\
;Source: "Mods\xvm\Prime_eff\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs; Components: xvm\pref;
;Source: "Mods\pricel\JIMBO\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs; Components: pricel\jmb;
;Source: "Mods\pricel\zayaz\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs; Components: pricel\zyz;
;Source: "Mods\pricel\Spectr20\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs; Components: pricel\20;
;//=== the beginning of text mode =======================================================================================================================\\
;Source: "{app}\res\text\*"; DestDir: "{app}\res_mods\{#Patch}\text\"; Flags: external recursesubdirs skipifsourcedoesntexist; Components: chat;
;Source: "Mods\chat\podskaz\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs; Components: chat\pod;
;Source: "Mods\chat\mcm\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs; Components: chat\mcm;
;//=== end of text mode ===//
;Source: "Mods\angar\garage\mini\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs; Components: angar\mn;
;//=== the beginning of the audio files ===============================================================================================================================\\
;Source: "{app}\res\audio\*"; DestDir: "{app}\res_mods\{#Patch}\audio\"; Flags: external recursesubdirs skipifsourcedoesntexist; Components: zvonok;
;Source: "Mods\zvonok\zvuki\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs; Components: zvonok\zk;
;//=== end of the audio files ===//

[code]
const
BColor = clBlue;
EColor = clblack;
BM_CLICK=$00F5;

type
TBtnEventProc = procedure (h:HWND);
TImgPB = record
Left,
Top,
Width,
Height,
MaxWidth : integer;
img1,img2 : Longint;
end;

var
InfoPanel: TPanel;
LogoLabel: TLabel;
PBCount, ResultCode, LastIndex, CurrentImage, ProgressStep,LastIndex,ErrorCode,X,Y,i,n: Integer;
Rus: boolean;
GIFHWND2, MusicButton, hCancelBtn, hNextBtn, hBackBtn, hDirBrowseBtn, hGroupBrowseBtn, hCancelUninstBtn: HWND;

WFButtonFont, UPFButtonFont: TFont;
UndefPic, GifFileName, OldDisk, TimeLeft, TempPath: string;
Workspace, DirFolder, GroupFolder, WizardImg, MyLogo: Longint;
InfoCaption, Info, Lbl: TNewStaticText;
InfoPic: TBitmapImage;
CheckLicense: TCheckBox;

const
HALIGN_CENTER = 0;
HALIGN_LEFT = 1;
HALIGN_RIGHT = 2;

VALIGN_CENTER = 0;
VALIGN_TOP = 1;
VALIGN_BOTTOM = 2;

FIT_NONE = 0;
FIT_WIDTH = 1;
FIT_HEIGHT = 2;
FIT_BOTH = 3;

CLR_INVALID = $FFFFFFFF;
UNDEF_INDEX = -777;
BtnClickEventID = 1;
BtnMouseEnterEventID = 2;

#include "Modules\MDL.iss"
//#include "Modules\Button.iss"
#include "Modules\bass.iss"
#include "Modules\TextureProgressBar.iss"

procedure LicenseOnClick(Sender: TObject);
begin
if (CheckLicense.Checked) = True then
begin
WizardForm.LicenseAcceptedRadio.Checked := True;
end else
begin
WizardForm.LicenseNotAcceptedRadio.Checked := True;
end;
end;

procedure ShowPicHint(const PicFilePath: String);
var
pt: TPoint;
begin
if not GetCursorPos(pt) then Exit;
InfoPic.Bitmap.LoadFromFile(PicFilePath);
InfoPic.SetBounds(ScaleX(300), ScaleY(10), 310, 280);
InfoPic.Show;
end;

procedure CompOnItemMouseMove(Sender: TObject; X, Y: Integer; Index: Integer; Area: TItemArea);
begin
if Index = -1 then Exit;
if Index = LastIndex then Exit;
try
case TNewCheckListBox(Sender).ItemCaption[Index] of
'XVM': UndefPic := '2.bmp';
'Prime_eff': UndefPic := '4.bmp';
'J1mbo': UndefPic := '12.bmp';
'Zayaz': UndefPic := '13.bmp';
'Advanced tips': UndefPic := '30.bmp';
'Maud colored posts': UndefPic := '31.bmp';
'hangar Minimalistic': UndefPic := '34.bmp';
'6 Ozvuchka feelings fire': UndefPic := '53.bmp';
'Spectr20': UndefPic := '62.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.OnItemMouseMove := @CompOnItemMouseMove;
WizardForm.ComponentsList.OnMouseLeave := @CompOnMouseLeave;
TempPath := AddBackslash(ExpandConstant('{tmp}'));
LastIndex := UNDEF_INDEX;

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

function GetAppDir(Path: String): String;
begin
if RegKeyExists(HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{1EAC1D02-C6AC-4FA6-9A44-96258C37C812RU}_is1') then begin
RegQueryStringValue(HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{1EAC1D02-C6AC-4FA6-9A44-96258C37C812RU}_is1', 'InstallLocation', Path);
Result := Path end else
Result := ExpandConstant('C:\Games\World_of_Tanks')
end;
// hint -------------
procedure HintStr(Sender: TObject; X: Integer; Y: Integer; Index: Integer; Area: TItemArea);
begin
if Index<>LastIndex then begin
LastIndex:= Index;
WizardForm.TasksList.ShowHint:= False;
WizardForm.TasksList.Hint:= '';
Exit;
end;
with WizardForm.TasksList do
case Index of
0 : Hint := '';
1 : Hint := 'Optimal graphics settings for the average PC';
2 : Hint := '';
3 : Hint := 'Increasing FPS by disabling certain Perm. effects have a negative impact on system performance';
4 : Hint := '';
5 : Hint := '';
6 : Hint := '';
else
Hint := '';
end;
WizardForm.TasksList.ShowHint:= True;
end;
// hint -------------

procedure PlaySoundOnEnter(Sender: TObject);
begin
sndPlaySound(ExpandConstant('{tmp}\Check.WAV'),$0001);
end;

procedure PlaySoundOnMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
sndPlaySound(ExpandConstant('{tmp}\Click.WAV'),$0001);
end;

procedure PlaySoundOnMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
sndPlaySound(ExpandConstant('{tmp}\WFEnter.WAV'),$0001);
end;

procedure ChangeCaption(str: string);
begin
WizardForm.StatusLabel.Caption:= str;
end;

procedure CreateBackup;
var
srcFile, destFile: string;
begin
srcFile:= ExpandConstant(CurrentFileName);
destFile:= srcFile + '.bak';
DeleteFile(destFile);
RenameFile(srcFile, destFile);
end;

procedure RestoreBackup(backupDir: string);
var
srcFile, destFile: string;
FSR, DSR: TFindRec;
FindResult: Boolean;
APath: string;
begin
APath := AddBackslash(backupDir);
FindResult := FindFirst(APath + '*.bak', FSR);
try
while FindResult do
begin
if FSR.Attributes and FILE_ATTRIBUTE_DIRECTORY = 0 then
begin
srcFile:= APath + FSR.Name;
destFile:= Copy(srcFile, 0, Length(srcFile)-4);
DeleteFile(destFile);
RenameFile(srcFile, destFile);
end;
FindResult := FindNext(FSR);
end;
FindResult := FindFirst(APath + '*.*', DSR);
while FindResult do
begin
if ((DSR.Attributes and FILE_ATTRIBUTE_DIRECTORY) = FILE_ATTRIBUTE_DIRECTORY) and
not ((DSR.Name = '.') or (DSR.Name = '..')) then
{Recursion} RestoreBackup(APath + DSR.Name);
FindResult := FindNext(DSR);
end;
finally
FindClose(FSR);
FindClose(DSR);
end;
end;

// Import the LoadVCLStyle function from VclStylesInno.DLL
procedure LoadVCLStyle(VClStyleFile: String); external 'LoadVCLStyleA@files:VclStylesInno.dll stdcall';
// Import the UnLoadVCLStyles function from VclStylesInno.DLL
procedure UnLoadVCLStyles; external 'UnLoadVCLStyles@files:VclStylesInno.dll stdcall';

function InitializeSetup(): Boolean;
begin
//SetThemeAppProperties(0);
// ExtractTemporaryFile('isskin.dll');
// ExtractTemporaryFile('{#SkinName}');
// LoadSkin(ExpandConstant('{tmp}\{#SkinName}'), '');
ExtractTemporaryFile('{#SkinName}');
LoadVCLStyle(ExpandConstant('{tmp}\{#SkinName}'));
GIFHWND2 := 0;

ExtractTemporaryFile('MusicButton.bmp');
ExtractTemporaryFile('music.mp3');
ExtractTemporaryFile('innocallback.dll');

if not FileExists(ExpandConstant('{tmp}\botva2.dll')) then ExtractTemporaryFile('botva2.dll');
Result:=True;
end;

procedure LogoLabelOnClick(Sender: TObject);
begin
ShellExec('open', 'http://www.leeuniverse.com', '', '', SW_SHOWNORMAL, ewNoWait, ErrorCode)
end;

procedure LblOnClick(Sender: TObject);
begin
ShellExec('open', 'http://www.leeuniverse.com', '', '', SW_SHOWNORMAL, ewNoWait, ErrorCode);
end;

procedure CreateForm;
begin
with WizardForm do
begin
X:=ScaleX(200);
Y:=ScaleX(150);
Position := poScreenCenter;
Width:= WizardForm.Width + X;
Height:= WizardForm.Height + Y;
Bevel.top:= WizardForm.Bevel.top + Y;
Bevel.Width:= WizardForm.Width;
Bevel1.Width:= WizardForm.Width;
OuterNotebook.Width := WizardForm.OuterNotebook.Width + X
OuterNotebook.Height := WizardForm.OuterNotebook.Height + Y
InnerNotebook.Width := WizardForm.InnerNotebook.Width + X
InnerNotebook.Height := WizardForm.InnerNotebook.Height + Y
Caption := ExpandConstant('{#SetupSetting("AppName")}');
// BorderStyle := bsDialog;
WelcomeLabel1.Hide;
WelcomeLabel2.Hide;
PageNameLabel.Hide;
PageDescriptionLabel.Hide;
SelectComponentsLabel.Hide;
ComponentsDiskSpaceLabel.Hide;
DiskSpaceLabel.Hide;
FinishedLabel.Hide;
FinishedHeadingLabel.Hide;
WizardBitmapImage.Hide;
WizardBitmapImage2.Hide;
SelectDirBitmapImage.Hide;
SelectGroupBitmapImage.Hide;
InfoAfterClickLabel.Hide;

with WizardForm do
begin
Font.Name:='Georgia';
Font.Style := [];
end;

with NextButton do
begin
Left := WizardForm.NextButton.left + 255;
Top := WizardForm.Bevel.top + 8;
end;

with BackButton do
begin
Left := WizardForm.BackButton.left + 250;
Top := WizardForm.Bevel.top + 8;
end;

if not FileExists(ExpandConstant('{tmp}\fon.jpg')) then ExtractTemporaryFile('fon.jpg');
ImgLoad(WizardForm.WelcomePage.Handle, ExpandConstant('{tmp}\fon.jpg'), ScaleX(0),ScaleY(0),WizardForm.OuterNotebook.Width, WizardForm.OuterNotebook.Height,true,true);
ImgApplyChanges(WizardForm.WelcomePage.Handle);

if not FileExists(ExpandConstant('{tmp}\znak.png')) then ExtractTemporaryFile('znak.png');
ImgLoad(WizardForm.SelectDirPage.Handle, ExpandConstant('{tmp}\znak.png'), ScaleX(465), ScaleY(73), ScaleX(150), ScaleY(150), true, true);
ImgApplyChanges(WizardForm.SelectDirPage.Handle);

if not FileExists(ExpandConstant('{tmp}\finish.jpg')) then ExtractTemporaryFile('finish.jpg');
ImgLoad(WizardForm.FinishedPage.Handle, ExpandConstant('{tmp}\finish.jpg'), ScaleX(0),ScaleY(0),WizardForm.OuterNotebook.Width, WizardForm.OuterNotebook.Height,true,true);
ImgApplyChanges(WizardForm.FinishedPage.Handle);

if not FileExists(ExpandConstant('{tmp}\DirFolder.png')) then ExtractTemporaryFile('DirFolder.png');
DirFolder:=ImgLoad(WizardForm.SelectDirPage.Handle,ExpandConstant('{tmp}\DirFolder.png'),ScaleX(0), ScaleY(0),ScaleX(34),ScaleY(30),True,True);
if not FileExists(ExpandConstant('{tmp}\GroupFolder.png')) then ExtractTemporaryFile('GroupFolder.png');
GroupFolder:=ImgLoad(WizardForm.SelectDirPage.Handle,ExpandConstant('{tmp}\GroupFolder.png'),ScaleX(0), ScaleY(120),ScaleX(34),ScaleY(30),True,True);
ImgApplyChanges(WizardForm.SelectDirPage.Handle);

if not FileExists(ExpandConstant('{tmp}\img.png')) then ExtractTemporaryFile('img.png');
Workspace:=ImgLoad(WizardForm.SelectComponentsPage.Handle,ExpandConstant('{tmp}\img.png'), ScaleX(300), ScaleY(10), ScaleX(310), ScaleY(280),True,True);
ImgApplyChanges(WizardForm.SelectComponentsPage.Handle);

ExtractTemporaryFile('Click.WAV');
ExtractTemporaryFile('WFEnter.WAV');
ExtractTemporaryFile('Check.WAV');

ExtractTemporaryFile('logo.png');
MyLogo:=ImgLoad(WizardForm.WelcomePage.Handle,ExpandConstant('{tmp}\logo.png'), ScaleX(520), ScaleY(6), ScaleX(160), ScaleY(140), False, False);
ImgApplyChanges(WizardForm.WelcomePage.Handle);
LogoLabel := TLabel.Create(WizardForm);

with LogoLabel do
begin
Parent := WizardForm.WelcomePage;
SetBounds(ScaleX(520), ScaleY(6), 160, 140);
Transparent:=True;
Cursor := crHand;
OnClick:=@LogoLabelOnClick;
end;
// =================== [Form] ==============================
with WizardForm do
begin
with NextButton do
begin
OnMouseEnter := @PlaySoundOnEnter;
OnMouseDown := @PlaySoundOnMouseDown;
OnMouseUp := @PlaySoundOnMouseUp;
end;

with BackButton do
begin
OnMouseEnter := NextButton.OnMouseEnter;
OnMouseDown := NextButton.OnMouseDown;
OnMouseUp := NextButton.OnMouseUp;
end;

with CancelButton do
begin
OnMouseEnter := NextButton.OnMouseEnter;
OnMouseDown := NextButton.OnMouseDown;
OnMouseUp := NextButton.OnMouseUp;
end;

with DirBrowseButton do
begin
OnMouseEnter := NextButton.OnMouseEnter;
OnMouseDown := NextButton.OnMouseDown;
OnMouseUp := NextButton.OnMouseUp;
end;

with GroupBrowseButton do
begin
OnMouseEnter := NextButton.OnMouseEnter;
OnMouseDown := NextButton.OnMouseDown;
OnMouseUp := NextButton.OnMouseUp;
end;

with MainPanel do
Width:= WizardForm.MainPanel.Width + X;
with WizardSmallBitmapImage do
begin
SetBounds(ScaleX(0), ScaleY(0), 700, 60);
end;

with WizardForm.DirEdit do begin
AutoSelect := False;
ReadOnly := True;
end;

with ComponentsList do
begin
SetBounds(ScaleX(5), ScaleY(10), 280, 280);
Color := clBtnFace;
Font.Name := 'Tahoma';
Font.Size := 9;
Font.Style := [];
Parent:= WizardForm.SelectComponentsPage;
end;

with WizardForm.GroupBrowseButton do
begin
Top := ScaleY(191);
Parent := WizardForm.SelectDirPage;
end;

with WizardForm.GroupEdit do
begin
Top := ScaleY(192);
Parent := WizardForm.SelectDirPage;
end;

with WizardForm.SelectStartMenuFolderBrowseLabel do
begin
Parent := WizardForm.SelectDirPage;
Top := ScaleY(155);
end;

with WizardForm.SelectStartMenuFolderLabel do
begin
Parent := WizardForm.SelectDirPage;
Top := ScaleY(128);
end;

// with NoIconsCheck do
// begin
// Parent := WizardForm.SelectDirPage;
// Top := ScaleY(250);
// Visible := true
end;
WizardForm.ReadyMemo.SetBounds(ScaleX(0), ScaleY(60), 610, 300);
end;

with WizardForm.SelectTasksPage do
begin
WizardForm.TasksList.SetBounds(ScaleX(0), WizardForm.TasksList.Top, 610, 340);
end;

with WizardForm do
begin
with TasksList do
begin
ShowHint := True;
Hint := '';
OnItemMouseMove := @HintStr;
end;

with WizardForm.InfoAfterMemo do
begin
WizardForm.InfoAfterMemo.SetBounds(ScaleX(0), ScaleY(30), 610, 300);
end;

with WizardForm.InfoBeforeMemo do
begin
WizardForm.InfoBeforeMemo.SetBounds(ScaleX(0), ScaleY(60), 610, 300);
end

WizardForm.LicenseNotAcceptedRadio.Hide;
WizardForm.LicenseAcceptedRadio.Hide;
WizardForm.LicenseMemo.Left := ScaleX(0);
WizardForm.LicenseMemo.Top := ScaleY(60);
WizardForm.LicenseMemo.Width := ScaleX(610);
WizardForm.LicenseMemo.Height := ScaleY(300);

CheckLicense:= TCheckBox.Create(WizardForm);
CheckLicense.Left:= ScaleX(0);
CheckLicense.Top:= ScaleY(360);
CheckLicense.Caption:= WizardForm.LicenseAcceptedRadio.Caption;
CheckLicense.Width:= ScaleX(410);
CheckLicense.OnClick:= @LicenseOnClick;
CheckLicense.Parent:= WizardForm.LicensePage;

with WizardForm.PreparingLabel do
begin
Width := ScaleX(610);
end;
WizardForm.PreparingMemo.SetBounds(ScaleX(0), WizardForm.PreparingMemo.Top, 610, WizardForm.PreparingMemo.Height);
end;

with WizardForm.FilenameLabel do
begin
Left := ScaleX(0)
Top := ScaleY(50);
Width := ScaleX(580);
end;
WizardForm.StatusLabel.Left := ScaleX(0)

with WizardForm.ProgressGauge do
begin
Parent:=WizardForm.InstallingPage;
SetBounds(ScaleX(0), ScaleY(100), 580, 30);
Hide;
end;
TextureProgressBar(WizardForm.ProgressGauge, $898987, cllime, false);
end;
// =================== [Form] ==============================
procedure InitializeWizard();
begin
InitInfo();
CreateForm;
// ButtonsTextures;
Music;

mp3Name := ExpandConstant('{tmp}\music.mp3');
BASS_Init(-1, 44100, 0, 0, 0);
mp3Handle := BASS_StreamCreateFile(FALSE, PAnsiChar(mp3Name), 0, 0, 0, 0, BASS_SAMPLE_LOOP);
BASS_Start();
BASS_ChannelPlay(mp3Handle, False);

ExtractTemporaryFile('logo.gif');

GIFHWND2 := NewGifbWnd(WizardForm.Handle, ScaleX(80), WizardForm.Bevel.Top + ScaleY(8), 160, 33);
GifWndLoadFromFile(GIFHWND2, HALIGN_CENTER, VALIGN_CENTER, CLR_INVALID, FIT_NONE, ExpandConstant('{tmp}\logo.gif'));
Lbl := TNewStaticText.Create(WizardForm);
Lbl.Parent := WizardForm;
Lbl.AutoSize := False;
Lbl.SetBounds(ScaleX(80), WizardForm.Bevel.Top + ScaleY(8), 160, 33);
Lbl.OnClick := @LblOnClick;
Lbl.Cursor := crHand;

InfoPanel := TPanel.Create(WizardForm);
InfoPanel.SetBounds(ScaleX(5), ScaleY(300), 605, 80);
Info := TNewStaticText.Create(WizardForm);
Info.Parent := WizardForm.SelectComponentsPage;
Info.AutoSize := False;
Info.SetBounds(ScaleX(15), ScaleY(310), 588, 68);
Info.Caption := '';
Info.Font.Name := '';
Info.Font.Size := 9;
Info.WordWrap := true;
enabledesc(WizardForm.ComponentsList.Handle,Info.Handle,
'XVM: eXtended Visualization Mod — modification of the combat interface for the popular MMO World of Tanks. To display statistics, you need to enable it on the site XVM (www.modxvm.com);'+
'XVM Ded_Shalfey configs "Prime_eff". Rating statistics Total victory of and techniques chance;'+ //
' ;'+
'The sight of Jimbo. This sight can be classified as futuristic. Though he is equipped with additional graphic details - they do not have an overabundance, established a rather compact and organically.;'+
'Sights from Zayaz help you not only comfortable and shoot accurately, but still give you a chance to not get under the opponents shots.;'+
'The sight of Spectr20. Simple minimalist sight calculator enemy armor. The first value of your penetration of the projectile, the second tank armor at this point. Art sight can be adjusted from the config file CPSSetting.xml;'+ //
' ;'+ //
'Modification of fashion "Advanced tips for skills and abilities" of phantasm, add an extension to the description of the skills, abilities, medals, consumables and snaryadam.Ves font normal size, the positive effects are highlighted in green;'+ //
'Maud colored messages (MCM) from Vslav666. Detailed statistics on the battle, the number of wins and losses, the entire wage experience wage display free experience for the fight;'+ //
' ;'+ //
'The easiest and fastest hangar of Hellinger. This hangar is notable for the fact that its author has made every effort to improve system performance while in the hangar. Ideal for owners of low-end PCs.;'+ //
' ;'+
'6 Ozvuchka feelings sound fire perezaryad and t.p;'
);
end;

procedure ShowComponents(CurPageID: Integer);
begin
case CurPageID of
wpSelectDir: begin
ImgSetVisibility(DirFolder,True);
ImgSetVisibility(GroupFolder,True);
end;
end;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
// if CurPageID = wpSelectDir then
// WizardForm.NoIconsCheck.Checked := true;
// SetStateNewButtons;
ImgSetVisibility(DirFolder,False);
ImgSetVisibility(GroupFolder,False);
ShowComponents(CurPageID);
ImgApplyChanges(WizardForm.InnerPage.Handle)
ImgApplyChanges(WizardForm.Handle);

if CurPageID=wpFinished then begin
WizardForm.ProgressGauge.Hide;
//SendMessage(WizardForm.NextButton.Handle,BM_CLICK,0,0);
end;
end;

procedure CurStepChanged(CurStep: TSetupStep);
begin
ProgressTimer(CurStep);
if CurStep = ssInstall then
begin
MoveDir(ExpandConstant('{app}\res_mods\'),ExpandConstant('{app}\Backup'));
WizardForm.ProgressGauge.Show;
end;
//begin
//if CurStep = ssDone then
//if MsgBox('modification ' + 'successfully' + ' performed!' + #10#10#13 + 'Start ' + 'game' + '?' , mbInformation, MB_OKCANCEL) = IDOK then
//Exec(ExpandConstant('{app}\WorldOfTanks.exe'), '', '', SW_SHOW, ewNoWait, ResultCode);
//end;
end;

procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
if CurUninstallStep = usPostUninstall then
begin
MoveDir(ExpandConstant('{app}\Backup\'),ExpandConstant('{app}\res_mods'));
RemoveDir(ExpandConstant('{app}\Backup'));
RestoreBackup(ExpandConstant('{app}'))
end;
end;

procedure DeinitializeSetup();
begin
ShowWindow(StrToInt(ExpandConstant('{wizardhwnd}')), 0);
// UnloadSkin;
gdipShutdown;
FreeAllGifWnd();
// WFButtonFont.Free;
disabledesc();
BASS_Stop();
BASS_Free();
end;

//function InitializeUninstall: Boolean;
// begin
// FileCopy(ExpandConstant('{app}\VclStylesinno.dll'), ExpandConstant('{tmp}\VclStylesinno.dll'), False);
// FileCopy(ExpandConstant('{app}\{#SkinName}'), ExpandConstant('{tmp}\{#SkinName}'), False);
// LoadSkin(ExpandConstant('{tmp}\{#SkinName}'), '');
// Result:=True;
// end;

Edited by san4o

Share this post


Link to post

Short link
Share on other sites
I guess we don't need the License Page anyway.

Yes, but you can create new page, with content from *.rtf:

[Files]
Source: NAME.rtf; DestDir: "{tmp}"; Flags: dontcopy;

[Code]
Procedure InitializeWizard();
var
 Page: TOutputMsgMemoWizardPage;
 Text: AnsiString;
begin
 Page := CreateOutputMsgMemoPage(wpLicense, '', 'Description', 'Caption', '');
 Page.RichEditViewer.Left := ScaleX(Page.RichEditViewer.Left);
 Page.RichEditViewer.Top := ScaleY(Page.RichEditViewer.Top);
 Page.RichEditViewer.Width := ScaleX(Page.RichEditViewer.Width);
 Page.RichEditViewer.Height := ScaleY(Page.RichEditViewer.Height);
 ExtractTemporaryFile('NAME.rtf');
 LoadStringFromFile(ExpandConstant('{tmp}/NAME.rtf'), Text);
 Page.RichEditViewer.RTFText := Text;
end;
Edited by Kotyarko_O

Share this post


Link to post

Short link
Share on other sites

Если и надо - то полный. Абсолютно полный. Весь скрипт.

"Абсолютно полный код"

/*тут был код*/

Edited by woole

Share this post


Link to post

Short link
Share on other sites

Тупой вопрос конечно, но есть ли faq-и по коду inno, или учиться только по примерам скриптов?

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...