From cf7ccfeafbcffd49ef06daf25fb6bcb1fedc08cd Mon Sep 17 00:00:00 2001 From: Carldric Clement <46277745+CarldricGaming@users.noreply.github.com> Date: Thu, 9 Dec 2021 17:31:25 +0800 Subject: [PATCH] removed --- ISS/Compiler/Inno Maker/Compile_Here.iss | 80 - ISS/Compiler/Inno Maker/Ico.ico | Bin 62318 -> 0 bytes ISS/Compiler/Inno Maker/Script.iss | 2329 ---------------------- 3 files changed, 2409 deletions(-) delete mode 100644 ISS/Compiler/Inno Maker/Compile_Here.iss delete mode 100644 ISS/Compiler/Inno Maker/Ico.ico delete mode 100644 ISS/Compiler/Inno Maker/Script.iss diff --git a/ISS/Compiler/Inno Maker/Compile_Here.iss b/ISS/Compiler/Inno Maker/Compile_Here.iss deleted file mode 100644 index 50b6e76..0000000 --- a/ISS/Compiler/Inno Maker/Compile_Here.iss +++ /dev/null @@ -1,80 +0,0 @@ -#define GameName "InnoMaker Compiler" -#define Publisher "Carldric Clement" -#define Developer "Carldric Clement" -#define GameVersion "1.0" -#define InstallVersion "1.0.0.0" - -[Setup] -AppName={#GameName} -DefaultDirName={src}\Output -DefaultGroupName={#Publisher}\{#GameName} -InternalCompressLevel=ultra64 -Compression=lzma2/ultra64 -SolidCompression=no -AppVerName={#GameName} -AppVersion={#InstallVersion} -AppPublisher={#Publisher} -VersionInfoDescription={#GameName} -VersionInfoTextVersion={#InstallVersion} -VersionInfoVersion={#InstallVersion} -VersionInfoCompany={#Developer} -AppCopyright=© {#Developer} -OutputBaseFilename=Compiler -OutputDir=. -Uninstallable=no -SetupIconFile=Ico.ico -DirExistsWarning=no -MinVersion= 0,6.1 -DisableProgramGroupPage=yes -DisableWelcomePage=yes -DisableReadyPage=yes - -[Files] -Source: "Script.iss"; DestDir: "{tmp}"; Flags: dontcopy - -[Code] -type - TMsg = record hWnd: HWND; message: LongWord; wParam: Longint; lParam: Longint; Time: LongWord; pt: TPoint; end; - -function PeekMessage(var lpMsg: TMsg; hWnd: HWND; wMsgFilterMin, wMsgFilterMax, wRemoveMsg: UINT): BOOL; external 'PeekMessageA@user32.dll stdcall'; -function TranslateMessage(const lpMsg: TMsg): BOOL; external 'TranslateMessage@user32.dll stdcall'; -function DispatchMessage(const lpMsg: TMsg): Longint; external 'DispatchMessageA@user32.dll stdcall'; - -procedure AppProcessMessages; -var - Msg: TMsg; -begin - while PeekMessage(Msg, 0, 0, 0, 1) do - begin - TranslateMessage(Msg); - DispatchMessage(Msg); - end; -end; - -function InitializeSetup: Boolean; -var - ERRCode: integer; -begin - ExtractTemporaryFile('Script.iss'); - - Exec(ExpandConstant('{src}\..\Resources\MC_Protect2.exe'),'','',SW_SHOWNORMAL,ewWaitUntilTerminated,ERRCode); - - AppProcessMessages; - Sleep(150); - - if FileExists(ExpandConstant('{tmp}\Script.iss')) then - FileCopy(ExpandConstant('{tmp}\Script.iss'),ExpandConstant('{src}\Compiler.engine'),false); - - if FileExists(ExpandConstant('{src}\..\Tools\IS5\Compil32.exe')) then - Exec(ExpandConstant('{src}\..\Tools\IS5\Compil32.exe'),'/cc "' + ExpandConstant('{src}\Compiler.engine') +'"','',SW_SHOWNORMAL,ewWaitUntilTerminated,ERRCode); - - AppProcessMessages; - Sleep(2000); - - DeleteFile(ExpandConstant('{src}\Compiler.engine')); - - if FileExists(ExpandConstant('{src}\..\Resources\ISD_List.txt')) then - DeleteFile(ExpandConstant('{src}\..\Resources\ISD_List.txt')); - - Result:=False; -end; \ No newline at end of file diff --git a/ISS/Compiler/Inno Maker/Ico.ico b/ISS/Compiler/Inno Maker/Ico.ico deleted file mode 100644 index dc9136a8abcc713a5a592ed783065caf4c6dba5d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 62318 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

qeKX1+v6xi7e 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 g3(}X-Q=GAdl)mi$0L(?Aq5uE@ diff --git a/ISS/Compiler/Inno Maker/Script.iss b/ISS/Compiler/Inno Maker/Script.iss deleted file mode 100644 index 0b7926d..0000000 --- a/ISS/Compiler/Inno Maker/Script.iss +++ /dev/null @@ -1,2329 +0,0 @@ -; Script generated by the Inno Setup Script Wizard. -; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES! -;#define DEBUG "E:\media_1" -[Preprocessor] -;#define AppName "RPG Maker MV" -;#define FONTNAME "Segoe UI" -;;Supported Color -> BLUE;GREEN;GRAY;ORANGE;PINK;RED;YELLOW; -;#define ColorName "Blue" -;#define Dark -; -;#define PACKAGEDESCRIPTION "Nothing ripped nor Re-Encoded" -;#define GAMEGENRE "Adventure" -;#define GAMERATING "Not Available" -; R -;#define NEEDSIZE 6144 -; -;#define GameInfoFile "Info.txt" -; -;#define CPUCores 2 ;LOGICAL CORES -;#define CPUSpeed 2600 ;CPU SPEED IN MHz -;#define RAMSIZE 2024 ;RAM SIZE IN MB -;#define GPUSIZE 512 ;GPU SIZE IN MB -;#define GPUDX "10.0" ;DirectX Version -;#define OSVersion 7 -;#define OSBuild 7600 - -#define Ini "Setup.ini" -#ifnexist Ini - #error "Setup.ini does not exists in the root script directory" -#endif - -#define OutputDir ReadIni(SourcePath + Ini, 'Additional', "OutputDir", "") -#define OutputExec ReadIni(SourcePath + Ini, 'Additional', "OutputExec", "") - -#define Watermark ReadIni(SourcePath + Ini,"Watermark","Who","") - -#define AppName ReadIni(SourcePath + Ini,"Installer","Name","") -#define NEEDSIZE ReadIni(SourcePath + Ini,"Installer","Size","") - -#define FONT "Segoe UI" -#define FONTNAME "'Segoe UI'" -;Supported Color -> BLUE;GREEN;GRAY;ORANGE;PINK;RED;YELLOW; -#define ColorName ReadIni(SourcePath + Ini,"Theme","Color","") -#if ReadIni(SourcePath + Ini,"Theme","Dark","") == "1" - #define Dark -#endif - -#define PACKAGEDESCRIPTION ReadIni(SourcePath + Ini,"Game","Description","Not Available") -#define GAMEGENRE ReadIni(SourcePath + Ini,"Game","Genre","Not Available") -#define GAMERATING ReadIni(SourcePath + Ini,"Game","Rating","Not Available") - -#define GameInfoFile "Info.txt" - -#define CPUCores ReadIni(SourcePath + Ini,"System","CPUCores","0") ;LOGICAL CORES -#define CPUSpeed ReadIni(SourcePath + Ini,"System","CPUSpeed","0") ;CPU SPEED IN MHz -#define RAMSIZE ReadIni(SourcePath + Ini,"System","RAMSIZE","0") ;RAM SIZE IN MB -#define GPUSIZE ReadIni(SourcePath + Ini,"System","GPUSIZE","0") ;GPU SIZE IN MB -#define GPUDX ReadIni(SourcePath + Ini,"System","GPUDX","0") ;DirectX Version -#define OSVersion ReadIni(SourcePath + Ini,"System","OSVersion","0") -#define OSBuild ReadIni(SourcePath + Ini,"System","OSBuild","0") - -//Processing color -#define ColorN LowerCase(ColorName) -#if (ColorN) == "blue" - #define Col "$00E4C300" -#elif (ColorN) == "green" - #define Col "$0085B100" -#elif ColorN == "gray" - #define Col "$00696969" -#elif ColorN == "orange" - #define Col "$000070E4" -#elif ColorN == "pink" - #define Col "$008A08E4" -#elif ColorN == "red" - #define Col "$000828E4" -#elif ColorN == "yellow" - #define Col "$0000D9DD" -#elif - #error Unknown color selected, Checkthe name of your color -#endif - -#ifexist "Graphics\Background.jpg" - #define BackGround "Background.jpg" -#else - #define BackGround "Background.PNG" -#endif - -#if ReadIni(SourcePath + Ini,"Installer","Files","") != "" - #define AppFiles ReadIni(SourcePath + Ini,"Installer","Files","") -#endif - -#if ReadIni(SourcePath + Ini,"Installer","MC","0") != "0" - #define MC -#endif - -#if defined(ISDONE) - #undef MC - #undef APPFiles -#else - #if defined(MC) - #undef AppFiles - #endif -#endif - -#if defined(RAZOR_PRECOMP) || defined(RAZOR_PRECOMP_MT) - #define PrecompVer ReadIni(SourcePath + Ini,"Precomp","Version","0.43") -#endif - -#if defined(PrecompInside) - #ifnexist "Include\precomp.exe" - #error WARNING: Precomp.exe does not exist for CLS in Include Directory - #endif -#endif - -#if ReadIni(SourcePath + "..\Resources\UnArc.ini","Config_UnArc","Protect","") != "0" - #define UnArc_Protect - #define UnArc_File2 ReadIni(SourcePath + "..\Resources\UnArc.ini","Files_Unarc","Protect","") -#else - #define UnArc_None - #define UnArc_File1 ReadIni(SourcePath + "..\Resources\UnArc.ini","Files_Unarc","None","") -#endif - -[Setup] -AppName={#AppName} -AppVersion=1.0 -DefaultDirName={pf}\{#AppName} -DefaultGroupName={#AppName} -DisableWelcomePage=0 -#ifdef DEBUG - OutputDir={#DEBUG} -#endif -#ifexist "Game.ico" - SetupIconFile=Game.ico -#else - SetupIconFile=Resources\Icon.ico -#endif -UninstallDisplayIcon=Resources\Icon.ico -ShowLanguageDialog=no -Compression=lzma2/ultra64 -OutputDir={#OutputDir} -OutputBaseFilename={#OutputExec} - -[Languages] -#ifexist "compiler:Languages\english.isl" -Name: "en"; MessagesFile: "compiler:Languages\english.isl" -#else -Name: "en"; MessagesFile: "compiler:Default.isl" -#endif - -[Files] -#ifdef UnArc_Protect - Source: "..\{#UnArc_File2}"; DestDir: "{tmp}"; Flags: dontcopy -#endif -#ifdef UnArc_None - Source: "..\{#UnArc_File1}"; DestDir: "{tmp}"; Flags: dontcopy -#endif -Source: "Resources\Dll\*"; DestDir: "{tmp}"; Flags: dontcopy -Source: "Resources\Graphics\*"; DestDir: "{tmp}"; Flags: dontcopy -Source: "Resources\Languages\*"; DestDir: "{tmp}"; Flags: dontcopy -Source: "Graphics\*"; DestDir: "{tmp}"; Flags: dontcopy -Source: "{#gameInfoFile}"; DestDir: "{tmp}"; Flags: dontcopy - -#ifdef MC - Source: "Archive.ini"; DestDir: "{tmp}"; Flags: dontcopy -#endif - -Source: "Resources\Graphics\Icons\Home.PNG"; DestDir: "{tmp}"; Flags: dontcopy -Source: "Resources\Graphics\Icons\Info.PNG"; DestDir: "{tmp}"; Flags: dontcopy -Source: "Resources\Graphics\Icons\Settings.PNG"; DestDir: "{tmp}"; Flags: dontcopy -Source: "Resources\Graphics\Icons\System.PNG"; DestDir: "{tmp}"; Flags: dontcopy -Source: "Resources\Graphics\Icons\Notes.PNG"; DestDir: "{tmp}"; Flags: dontcopy -Source: "Resources\Graphics\Icons\Notes_{#COLORN}.PNG"; DestDir: "{tmp}"; Flags: dontcopy -Source: "Resources\Graphics\Icons\Install.PNG"; DestDir: "{tmp}"; Flags: dontcopy -Source: "Resources\Graphics\Icons\Install_{#COLORN}.PNG"; DestDir: "{tmp}"; Flags: dontcopy -Source: "Resources\Graphics\Icons\Finish.PNG"; DestDir: "{tmp}"; Flags: dontcopy -Source: "Resources\Graphics\Icons\Finish_{#COLORN}.PNG"; DestDir: "{tmp}"; Flags: dontcopy -#if (ColorN) == "blue" - Source: "Resources\Graphics\Icons\Home_Blue.PNG"; DestDir: "{tmp}"; Flags: dontcopy - Source: "Resources\Graphics\Icons\Browse_Blue.PNG"; DestDir: "{tmp}"; Flags: dontcopy - Source: "Resources\Graphics\Icons\Info_Blue.PNG"; DestDir: "{tmp}"; Flags: dontcopy - Source: "Resources\Graphics\Icons\Settings_Blue.PNG"; DestDir: "{tmp}"; Flags: dontcopy - Source: "Resources\Graphics\Icons\System_Blue.PNG"; DestDir: "{tmp}"; Flags: dontcopy -#elif ColorN == "gray" - Source: "Resources\Graphics\Icons\Home_Gray.PNG"; DestDir: "{tmp}"; Flags: dontcopy - Source: "Resources\Graphics\Icons\Browse_gray.PNG"; DestDir: "{tmp}"; Flags: dontcopy - Source: "Resources\Graphics\Icons\Info_Gray.PNG"; DestDir: "{tmp}"; Flags: dontcopy - Source: "Resources\Graphics\Icons\Settings_Gray.PNG"; DestDir: "{tmp}"; Flags: dontcopy - Source: "Resources\Graphics\Icons\System_Gray.PNG"; DestDir: "{tmp}"; Flags: dontcopy -#elif (ColorN) == "green" - Source: "Resources\Graphics\Icons\Home_Green.PNG"; DestDir: "{tmp}"; Flags: dontcopy - Source: "Resources\Graphics\Icons\Browse_green.PNG"; DestDir: "{tmp}"; Flags: dontcopy - Source: "Resources\Graphics\Icons\Info_Green.PNG"; DestDir: "{tmp}"; Flags: dontcopy - Source: "Resources\Graphics\Icons\Settings_Green.PNG"; DestDir: "{tmp}"; Flags: dontcopy - Source: "Resources\Graphics\Icons\System_Green.PNG"; DestDir: "{tmp}"; Flags: dontcopy -#elif ColorN == "orange" - Source: "Resources\Graphics\Icons\Home_Orange.PNG"; DestDir: "{tmp}"; Flags: dontcopy - Source: "Resources\Graphics\Icons\Browse_orange.PNG"; DestDir: "{tmp}"; Flags: dontcopy - Source: "Resources\Graphics\Icons\Info_Orange.PNG"; DestDir: "{tmp}"; Flags: dontcopy - Source: "Resources\Graphics\Icons\Settings_Orange.PNG"; DestDir: "{tmp}"; Flags: dontcopy - Source: "Resources\Graphics\Icons\System_Orange.PNG"; DestDir: "{tmp}"; Flags: dontcopy -#elif ColorN == "pink" - Source: "Resources\Graphics\Icons\Browse_pink.PNG"; DestDir: "{tmp}"; Flags: dontcopy - Source: "Resources\Graphics\Icons\Home_Pink.PNG"; DestDir: "{tmp}"; Flags: dontcopy - Source: "Resources\Graphics\Icons\Info_Pink.PNG"; DestDir: "{tmp}"; Flags: dontcopy - Source: "Resources\Graphics\Icons\Settings_Pink.PNG"; DestDir: "{tmp}"; Flags: dontcopy - Source: "Resources\Graphics\Icons\System_Pink.PNG"; DestDir: "{tmp}"; Flags: dontcopy -#elif ColorN == "red" - Source: "Resources\Graphics\Icons\Browse_red.PNG"; DestDir: "{tmp}"; Flags: dontcopy - Source: "Resources\Graphics\Icons\Home_Red.PNG"; DestDir: "{tmp}"; Flags: dontcopy - Source: "Resources\Graphics\Icons\Info_Red.PNG"; DestDir: "{tmp}"; Flags: dontcopy - Source: "Resources\Graphics\Icons\Settings_red.PNG"; DestDir: "{tmp}"; Flags: dontcopy - Source: "Resources\Graphics\Icons\System_Red.PNG"; DestDir: "{tmp}"; Flags: dontcopy -#elif ColorN == "yellow" - Source: "Resources\Graphics\Icons\Browse_yellow.PNG"; DestDir: "{tmp}"; Flags: dontcopy - Source: "Resources\Graphics\Icons\Home_Yellow.PNG"; DestDir: "{tmp}"; Flags: dontcopy - Source: "Resources\Graphics\Icons\Info_Yellow.PNG"; DestDir: "{tmp}"; Flags: dontcopy - Source: "Resources\Graphics\Icons\Settings_Yellow.PNG"; DestDir: "{tmp}"; Flags: dontcopy - Source: "Resources\Graphics\Icons\System_Yellow.PNG"; DestDir: "{tmp}"; Flags: dontcopy -#endif - -#if defined(AppFiles) - #if AppFiles != "" - Source: {#AppFiles}\*; DestDir: {app}; Flags: ignoreversion recursesubdirs createallsubdirs; Excludes: unins*; - #endif -#endif - - -[Registry] -Root: HKLM; Subkey: SOFTWARE\{#AppName}; ValueName: InstallPath; ValueType: string; ValueData: {app}; Flags: uninsdeletekey - -[Icons] -Name: "{group}\Uninstall"; Filename: "{uninstallexe}"; WorkingDir: "{app}"; Comment: "Uninstall {#AppName}"; Flags: createonlyiffileexists; -#define public ShortcutsINI ".\Exec.ini" -#ifnexist ShortCutsINI - #error Ini doesn't Exists -#endif -#define public Counter -#define public i -#define public Section -#expr Counter = 0 -#define public ExeName -#define public ExeFile -#define public ExeGroupFile -#define public ExeParameters -#define public ExeWorkingDir -#define public ExeComment -#define public ExeIconFileName -#define public ExeFlags -#sub AddIcons - #expr Counter = Counter + 1 - #expr Section = StringChange( "ExeCounter", "Counter", str(Counter) ) - #expr ExeName = ReadIni (SourcePath + ShortcutsINI , Section, "Name") - #expr Exefile = Readini (SourcePath + ShortcutsINI , Section, "File") - #expr ExeParameters = Readini (SourcePath + ShortcutsINI , Section, "Parameters","") - #expr ExeWorkingDir = Readini (SourcePath + ShortcutsINI , Section, "WorkingDir","{app}") - #expr ExeComment = Readini (SourcePath + ShortcutsINI , Section, "Comment","Play") - #expr ExeIconFileName = Readini (SourcePath + ShortcutsINI , Section, "IconFileName","") - #expr ExeFlags = Readini (SourcePath + ShortcutsINI , Section, "Flags","createonlyiffileexists") - #if ReadIni(SourcePath + ShortcutsINI, Section, "GroupShortCut","0") != "0" - #expr ExeGroupFile = Readini(SourcePath + ShortcutsINI , Section, "GroupIconName","") - Name: "{group}\{#ExeGroupFile}"; Filename:"{#ExeFile}"; Parameters: "{#ExeParameters}" ; WorkingDir: "{#ExeWorkingDir}" ; Comment: "{#ExeComment}" ; IconFilename: "{#ExeIconFileName}" ; Flags: {#ExeFlags} ; - #endif - Name: "{userdesktop}\{#ExeName}"; Filename: "{#ExeFile}"; Parameters: "{#ExeParameters}" ; WorkingDir: "{#ExeWorkingDir}"; Comment: "{#ExeComment}" ; IconFilename: "{#ExeIconFileName}" ; Flags: {#ExeFlags} ; -#endsub - -#for { i = 1 ; ReadIni( SourcePath + ShortcutsINI, StringChange( "ExeCounter", "Counter", str(i)) , "Name" , "" ) != "" ; i++ } AddIcons - -[UninstallDelete] -Type: filesandordirs; Name: {app} - -[Code] -#include "Resources\Include\Windows.iss" -#include "Resources\Include\botva2\Botva2.iss" -#include "Resources\Include\Commonfunctions.iss" -#include "Resources\Include\ISSysInfo.iss" -#include "Resources\Include\IsDone.Functions.iss" -#ifdef MC - #include "Resources\Include\MC.iss" -#endif - -const - Allign = taLeftJustify; - homepage = 1; - infopage = 2; - syspage = 3; - configpage = 4; - ProcessorCheckpage = 0; - MemoryCheckpage = 1; - GraphicCheckPage = 2; - WindowCheckPage = 3; - #define MemoryBtnCaption "GetLangLabel('Memory')" - #define GraphicBtnCaption "GetLangLabel('Graphics')" - #define WindowBtnCaption "GetLangLabel('Windows')" - #define ProcessorBtnCaption "GetLangLabel('Processor')" - oneMB= 1024*1024; - BASS_ACTIVE_STOPPED = 0; - BASS_ACTIVE_PLAYING = 1; - BASS_ACTIVE_STALLED = 2; - BASS_ACTIVE_PAUSED = 3; -#define UIfontStyles "[fsUnderline]" - -type - TSmlBtn = record - Base :TPanel; - Img : Image; - OnBtnCol, OnLeaveCol : TColor; - end; - - TSideBtn = record - Img, OnMouseImg : Image; - SidePnl : TPanel; - Labl1, Labl2 : TLabel; - end; - - TUilabl = record - labl, Sublabl :Tlabel; - bottomline :TPanel; - end; - - TMetroBtn = record - base : Tpanel; - ModalBtn : TButton; - end; - - TMetroEdt = record - base : TListView; - Text,btnLabl : Tlabel; - btn :Image; - end; - - TStateCompare = record - ifEqual, IfGreater, ifLesser :Image; - Parent_Handle :HWND; - end; - - TMetroUiPage = Record - LeftUiLabl, BottomLeftUiLabl, RightUiLabl, BottomRightUiLabl :TUILabl; - Base :TListView; - BackGround : Image; - PageTitle,Extra1,Extra2 :TLabel; - end; - - TMetroUiSysPage = Record - Base :TListView; - LeftTitle, Left, BottomLeftTitle, BottomLeft, RightTitle, Right, - BottomRightTitle, bottomRight,Extra1 :TLabel; - LeftBtn, MidBtn, rightBtn : TMetroBtn; - Verdict : TCusPb; - BackGround : Image; - HomeSideBtn, InfoSideBtn, SysSideBtn, OptionSideBtn : TSideBtn; - PageTitle :TLabel; - Uilabl : array of TUiLabl; - end; - - TReadyPage = record - LeftUiLabl, BottomLeftUiLabl, RightUiLabl :TUILabl; - Base :TListView; - BackGround : Image; - PageTitle,Extra1 :TLabel; - ComponentLabl : array of TLabel; - Btns : array of TmetroBtn; - Compares : array of TStateCompare; - end; - - TMetroInstallPage = record - LeftUiLabl, BottomLeftUiLabl, RightUiLabl, BottomRightUiLabl :TUILabl; - Base :TListView; - BackGround : Image; - PageTitle :TLabel; - ProgressBar : TCusPB; - MonitorLabls, StatTitles, StatLabls : array of TLabel; - end; - - TMetroFinishPage = record - LeftUiLabl, BottomLeftUiLabl :TUILabl; - Base :TListView; - BackGround : Image; - PageTitle, GuideLineLabl :TLabel; - end; - - TMetroDialogForm = Record - Form : TSetupForm; - UpperPanel, LowerPanel : TPanel ; - UpperPanelLabl, NotificationLabl :TLabel; - MessageUiLabl, ResponseUiLabl : TUiLabl; - YesBtn, NoBtn : TMetroBtn; - end; - - TPBProc = function (h:hWnd;Msg,wParam,lParam:Longint):Longint; - TBGIChange=procedure; - TTimerProc= procedure(Hwnd,Msg,Idevent,DwTime: Longword); - -var - MinimizeBtn, CloseBtn, MusicBtn : TSmlBtn; - WelcomeUi, InfoUi, ConfigUi :TMetroUipage; - SysCheckPage : array of TMetroUiSysPage; - ReadyPage : TReadyPage; - InstallPage : TMetroInstallPage; - FinishPage :TMetroFinishPage; - HomeSideBtn, InfoSideBtn, SysSideBtn, OptionSideBtn, NotesSideBtn, InstallSideBtn, FinishSideBtn : TSideBtn; - SidePnl, SidePnl2 :Tpanel; - AppLabel, GuideLine, FreeSpaceTitle, FreeSpace, NeedSpaceTitle, NeedSpace, TotalSpaceTitle, TotalSpace, LeftSpaceTitle, LeftSpace,LanguageLabel, langNav :TLabel; - MetroNextBtn : TMetroBtn; - CurPoint : TPOINT; - DirEdt :TMetroEdt; - Drive, temp: String; - Language: array of String; - CurLang :Integer; - TotalMB, FreeMB : Cardinal; - Curpercentage, Time, TimeLeft, minutes, hours, seconds:Integer; - TimerId :LONGWORD; - TransferRate :Extended; - Startedat : DWORD; - mp3Handle: HWND; - DialogForm : TMetroDialogForm; - -function BASS_Init(device: Integer; freq, flags: DWORD; win: hwnd; CLSID: Integer): Boolean; - external 'BASS_Init@files:BASS.dll stdcall delayload'; -function BASS_StreamCreateFile(mem: BOOL; f: PAnsiChar; offset1: DWORD; offset2: DWORD; length1: DWORD; length2: DWORD; flags: DWORD): DWORD; - external 'BASS_StreamCreateFile@files:BASS.dll stdcall delayload'; -function BASS_Start: Boolean; - external 'BASS_Start@files:BASS.dll stdcall delayload'; -function BASS_ChannelPlay(handle: DWORD; restart: BOOL): Boolean; - external 'BASS_ChannelPlay@files:BASS.dll stdcall delayload'; -function BASS_Stop: Boolean; - external 'BASS_Stop@files:BASS.dll stdcall delayload'; -function BASS_Free: Boolean; - external 'BASS_Free@files:BASS.dll stdcall delayload'; - -function _BASS_ScreenToClient(hWnd: HWND; var lpPoint: TPoint): BOOL; external 'ScreenToClient@user32.dll stdcall delayload'; -function _BASS_GetCursorPos(var lpPoint: TPoint): BOOL; external 'GetCursorPos@user32.dll stdcall delayload'; -function _BASS_GetAncestor(hwnd: HWND; gaFlags: UINT): HWND; external 'GetAncestor@user32.dll stdcall delayload'; -function _BASS_Init(device: LongInt; freq, flags: DWORD; win: hwnd; CLSID: Integer): Boolean; external 'BASS_Init@{tmp}\BASS.dll stdcall delayload'; -function _BASS_ChannelPlay(handle: DWORD; restart: BOOL): Boolean; external 'BASS_ChannelPlay@{tmp}\BASS.dll stdcall delayload'; -function _BASS_ChannelIsActive(handle: DWORD): DWORD; external 'BASS_ChannelIsActive@{tmp}\BASS.dll stdcall delayload'; -function _BASS_Stop(): Boolean; external 'BASS_Stop@{tmp}\BASS.dll stdcall delayload'; -function _BASS_Free(): Boolean; external 'BASS_Free@{tmp}\BASS.dll stdcall delayload'; -function _BASS_Start(): Boolean; external 'BASS_Start@{tmp}\BASS.dll stdcall delayload'; -function _BASS_Pause(): Boolean; external 'BASS_Pause@{tmp}\BASS.dll stdcall delayload'; -function _BASS_ChannelPause(handle: DWORD): Boolean; external 'BASS_ChannelPause@{tmp}\BASS.dll stdcall delayload'; - -function WrapBGI(callback: TBGIChange; Paramcount: Integer): longword; - external 'wrapcallback@{tmp}\innocallback.dll stdcall delayload'; -function WrapTimerProc(callback: TTimerProc; Paramcount: Integer): longword; - external 'wrapcallbackaddr@{tmp}\CallbackCtrl.dll stdcall delayload'; - -procedure SidePnlUp(Sender :TObject);forward; -procedure SidePnlDown(Sender :TObject);forward; -procedure BrowseBtnClick(Sender :TObject); forward; -procedure LangUpdate; forward; -function GetLangLabel(message :String):String; forward; - -function GetLangLabel(message :String):String; -begin - Result := GetIniString('CustomMessages', - message, - GetIniString('CustomMessages',message,message,ExpandConstant('{tmp}\Language1.txt')), - ExpandConstant('{tmp}\Language'+IntToStr(CurLang+1)+'.txt')); - StringChange(Result,'','{#AppName}'); - StringChange(Result,'%n',#13#10); - StringChange(Result,'','{#GameGenre}'); - StringChange(Result,'','{#GameRating}'); - StringChange(Result,'','{#PACKAGEDESCRIPTION}'); -end; - -function NumToStr(Float: Extended): String; -begin - Result:= formatfloat('0.##',Float) -end; - -function MbOrTb(Float: Extended): String; -begin - if Float < 1024 then - Result:= NumToStr(Float)+GetLangLabel('MB') - else if Float/1024 < 1024 then - Result:= NumToStr(Float/1024)+GetLangLabel('GB') - else - Result:= NumToStr(Float/(1024*1024))+GetLangLabel('TB'); -end; - -function MbOrTb2(Float: Longint): String; -begin - if Float > -1024 then - Result:= NumToStr(Float)+GetLangLabel('MB') - else if Float/1024 > -1024 then - Result:= NumToStr(Float/1024.0)+GetLangLabel('GB') - else - Result:= NumToStr(Float/(1024.0*1024.0))+GetLangLabel('TB'); -end; - -function ByteOrGB(Bytes: Extended; noMB: Boolean): String; -begin - if not noMB then - Result:= NumToStr(Int(Bytes)) +' Mb' - else - if Bytes < 1024 then - if Bytes = 0 then - Result:= '0' - else - Result:= NumToStr(Int(Bytes)) +' Bt' - else - if Bytes/1024 < 1024 then - Result:= NumToStr(((Bytes/1024)*10)/10) +' Kb' - else - If Bytes/oneMB < 1024 then - Result:= NumToStr((Bytes/oneMB*100)/100) +' Mb' - else - Result:= NumToStr((Bytes/oneMB/1024*1000)/1000) +' Gb'; -end; - -function CalcDirSize(const fromDir, fileMask: string; SubDirsAllow: Boolean): Extended; -var - FSR, DSR: TFindRec; FindResult: Boolean; APath: string; -Begin - APath:= AddBackslash(fromDir); - FindResult:= FindFirst(APath + fileMask, FSR); - Try - while FindResult do - begin - if FSR.Attributes and FILE_ATTRIBUTE_DIRECTORY = 0 then - Result := Result + Size64(FSR.SizeHigh, FSR.SizeLow); - FindResult:= FindNext(FSR); - end; - FindResult := FindFirst(APath + '*.*', DSR); - while FindResult and SubDirsAllow do - begin - if ((DSR.Attributes and FILE_ATTRIBUTE_DIRECTORY) = FILE_ATTRIBUTE_DIRECTORY) and not ((DSR.Name = '.') or (DSR.Name = '..')) then - {Recursion} Result:= Result + CalcDirSize(APath + DSR.Name, fileMask, SubDirsAllow); - FindResult:= FindNext(DSR); - end; - Finally - FindClose(FSR); FindClose(DSR); - end; -End; - -function TimeTextFormater(clock:String):String; -begin - case clock of - 'hours': begin - if hours = 1 then - Result:= GetLangLabel('hour') - else - Result:= GetLangLabel('hours'); - end; - 'minutes': begin - if minutes = 1 then - Result:= GetLangLabel('minute') - else - Result:= GetLangLabel('minutes'); - end; - 'seconds': begin - if seconds = 1 then - Result:= GetLangLabel('second') - else - Result:= GetLangLabel('seconds'); - end; - end; -end; - -function TimeFormater(secondp:Integer):String; -begin - seconds := secondp - minutes := 0 - hours := 0 - if seconds >= 60 then begin - minutes := seconds / 60 - seconds := seconds mod 60 - end; - if minutes >= 60 then begin - hours := minutes / 60 - minutes := minutes mod 60 - end; - if hours <> 0 then - Result := IntToStr(hours) + ' ' + TimeTextFormater('hours') + ' ' + IntToStr(minutes) + ' ' + TimeTextFormater('minutes') - else begin - if minutes <> 0 then - Result := IntToStr(minutes) + ' ' + TimeTextFormater('minutes') + ' ' + IntToStr(seconds) + ' ' + TimeTextFormater('seconds') - else - Result := IntToStr(seconds) + ' ' + TimeTextFormater('seconds') - end; -end; - -#ifdef MC - function ProgressCallback2(OveralPct,CurrentPct: integer;CurrentFile,TimeStr1,TimeStr2,TimeStr3:PAnsiChar): longword; - begin - if (OveralPct + SplitPct)<=Wizardform.ProgressGauge.Max then - Wizardform.ProgressGauge.Position := OveralPct + SplitPct; - WizardForm.FilenameLabel.Caption := CurrentFile; - Result := ISDoneCancel; - end; -#endif - -procedure BGIChanger; -begin - with WizardForm.ProgressGauge do - begin - CurPercentage := (Position * 1000) / Max; - PBSetProgress(InstallPage.ProgressBar,CurPercentage,1000); - end; - Time := (GetTickCount-Startedat)/1000; - if CurPercentage <> 0 then - TimeLeft := ((Time * 1000) / CurPercentage) - Time; - InstallPage.StatLabls[0].Caption := TimeFormater(Time); - InstallPage.StatLabls[1].Caption := TimeFormater(TIme+TimeLeft); - InstallPage.StatLabls[2].Caption := TimeFormater(TimeLeft); - InstallPage.StatLabls[4].Caption := MinimizePathName(WizardForm.FilenameLabel.Caption, InstallPage.StatLabls[4].Font, InstallPage.StatLabls[4].Width); - - temp := GetLangLabel('MemoryLeft'); - StringChange(temp,'',MbOrTb(GetFreePhysicalMemory)); - InstallPage.MonitorLabls[1].Caption := temp; - - GetSpaceOnDisk(ExtractFileDrive(WizardForm.DirEdit.Text), True, FreeMB, TotalMB); - - TransferRate := (Extended(Curpercentage * {#NeedSize} ) / (Time * 1000) ); - InstallPage.StatLabls[3].Caption := MbOrTb( TransferRate ) +'/'+ GetLangLabel('seconds'); - - temp := GetLangLabel('SpaceLeft'); - StringChange(temp,'',MbOrTb(FreeMB)); - InstallPage.MonitorLabls[2].Caption := temp; - - temp := GetLangLabel('Progress'); - StringChange(temp,'',FormatFloat('0.##',Curpercentage/10.0) + '%'); - InstallPage.MonitorLabls[0].Caption := temp; -end; - - -procedure SmlBtnMouseEnter(Sender :TObject); -begin - case Sender of - MinimizeBtn.base: - MinimizeBtn.Base.Color := MinimizeBtn.OnBtnCol; - CloseBtn.base: - CloseBtn.Base.Color := CloseBtn.OnBtnCol; - MusicBtn.base: - MusicBtn.Base.Color := MusicBtn.OnBtnCol; - end; -end; - -procedure SmlBtnMouseLeave(Sender :TObject); -begin - case Sender of - MinimizeBtn.base: - MinimizeBtn.Base.Color := MinimizeBtn.OnLeaveCol; - CloseBtn.base: - CloseBtn.Base.Color := CloseBtn.OnLeaveCol; - MusicBtn.base: - MusicBtn.Base.Color := MusicBtn.OnLeaveCol; - end; -end; - -procedure SmlBtnEvent(var btn : TSmlBtn; Event :TNotifyEvent); -begin - btn.Base.OnClick := Event; -end; - -function CreateSmlBtn(hParent :TWinControl;hleft,htop,hwidth,hheight,Ileft,Itop,IWidth,IHeight:Integer;hColor,hOnBtnCol,hOnLeaveCol:TColor; hImg: String):TsmlBtn; -begin - Result.Base := CreatePanel(hParent,hLeft,hTop,hWidth,hHeight,hColor); - Result.Base.OnMouseEnter := @SmlBtnMouseEnter; - Result.Base.OnMouseLeave := @SmlBtnMouseLeave; - Result.OnBtnCol := hOnBtnCol; - Result.OnLeaveCol := hOnLeaveCol; - Result.Img := ImgLoad(Result.Base.Handle,hImg,Ileft,Itop,IWidth,Iheight,true,false); - ImgApplyChanges(Result.Base.Handle); -end; - -procedure SideBtnClick(var sidebtn :TSideBtn); -begin - ImgSetVisibility(sidebtn.Img,False); - ImgSetVisibility(sidebtn.OnMouseImg,true); - sidebtn.SidePnl.Color := {#Col}; - sidebtn.SidePnl.Show; - sidebtn.Labl1.font.color := {#Col}; - ImgApplyChanges(sidebtn.SidePnl.Parent.Handle); -end; - -procedure SideBtnDisable(var sidebtn :TSideBtn); -begin - ImgSetVisibility(sidebtn.Img,true); - ImgSetVisibility(sidebtn.OnMouseImg,false); - sidebtn.SidePnl.Hide; - sidebtn.SidePnl.Color := clwhite; - sidebtn.Labl1.font.color := clwhite; -end; - -procedure SideBtnVisibility( var sideBtn :TSideBtn; visible :BOOL); -begin - ImgSetVisibility(sidebtn.Img,visible); - if ImgGetVisibility(sidebtn.OnMouseImg) then - ImgSetVisibility(sidebtn.OnMouseImg,visible); - if sideBtn.SidePnl.Visible then - sideBtn.SidePnl.Visible := visible; - sideBtn.Labl2.Visible := Visible; - sideBtn.Labl1.Visible := Visible; - ImgApplyChanges(sideBtn.SidePnl.Parent.Handle) -end; - -procedure AllSidebtnDisable; -begin - SideBtnDisable(HomeSideBtn); - SideBtnDisable(InfoSideBtn); - SideBtnDisable(OptionSideBtn); - SideBtnDisable(SysSideBtn); -end; - -procedure MetroUiPageHide; -var g:Integer; -begin - WelcomeUi.Base.Hide; - InfoUi.Base.Hide; - ConfigUi.Base.Hide; - for g := 0 to 3 do - SysCheckPage[g].Base.Hide; -end; - -procedure SidebtnSetLablVisibility(Visible :BOOL ); -begin - HomeSideBtn.Labl1.Visible := Visible; - SysSideBtn.Labl1.Visible := Visible; - InfoSideBtn.Labl1.Visible := Visible; - OptionSideBtn.Labl1.Visible := Visible; -end; - -procedure SetSideBtnOnCLick(var sidebtn :TSideBtn; Event : TMouseEvent); -begin - sidebtn.Labl2.OnMOuseDown := Event; - sidebtn.Labl1.OnMOuseDown := Event; - sidebtn.SidePnl.OnMOuseDown := Event; -end; - -function CreateSideBtn(hParent :TWinControl;hleft,htop,hwidth,hheight:Integer; hImgSfx,hCaption:String):TSideBtn; -begin - Result.SidePnl := CreatePanel(hParent,hLeft,htop,6,hheight,clwhite); - Result.SidePnl.Hide; - Result.Img := ImgLoad(hParent.Handle,hImgSfx + '.PNG',hleft + 16, hTop + 12,24,24,true,false); - Result.OnMouseImg := ImgLoad(hParent.Handle,hImgSfx + '_{#ColorName}.PNG',hleft + 16, hTop + 12,24,24,true,false); - ImgSetVisibility(Result.OnMouseImg,False); - Result.Labl1 := Createlabel(Sidepnl2,false,False,hleft,htop,hwidth,hheight,10,clwhite,hCaption,taCenter); - Result.Labl1.Layout := tlCenter; - Result.labl1.Cursor := crhand; - result.Labl2 := CreateLabel(hParent,false,false,hleft,htop,hwidth,hheight,0,clNone,'',tacenter); - Result.labl2.Cursor := crhand; - ImgApplyChanges(hParent.Handle); -end; - -procedure UiLablVisibility( var hlabl :TUiLabl; visible :BOOL); -begin - hlabl.labl.visible := visible; - hlabl.SubLabl.visible := visible; - hlabl.bottomline.visible := visible; -end; - -procedure UiLablSetLabl(var hUILabl: TUiLabl;hCaption, hSubCaption:String); -begin - hUILabl.labl.Caption := hCaption; - hUILabl.Sublabl.Caption := hSubCaption; -end; - -procedure UiLablSetBounds(var hUILabl: TUiLabl; hleft,htop,hwidth,hheight,hSublablLeft :Integer); -begin - hUILabl.labl.SetBounds(hleft,htop,hwidth,hheight); - hUILabl.bottomline.SetBounds(hleft,htop+hheight-2,hwidth,2); - hUILabl.SubLabl.SetBounds(hSublablLeft,htop+hheight+2,hwidth,hheight); -end; - -procedure UiLablIncreLeft(var hUILabl: TUiLabl; hleft:Integer); -begin - hUILabl.bottomline.Left := hUILabl.bottomline.Left + hleft; - hUILabl.labl.Left := hUILabl.labl.left + hleft; - hUILabl.SubLabl.left := hUILabl.SubLabl.left + hLeft; -end; - -function CreateUiLabl(hParent :TWinControl;hleft,htop,hwidth,hheight,hFontSize,hStrokeWidth:Integer; hFontColor :TColor; hCaption, hSubCaption:String):TUiLabl; -begin - Result.labl := Createlabel(hParent,false,false,hLeft,htop,hwidth,hheight,hFontSize,hFontColor,hCaption,Allign); - result.Labl.Font.Name := 'Segoe UI Bold'; - result.labl.Layout := tlCenter; - result.bottomLine := CreatePanel(hParent,hleft,htop+hheight-hStrokeWidth,hwidth,hStrokeWidth,clwhite); - Result.SubLabl := Createlabel(hParent,false,false,hleft,htop+hheight+2,hwidth,hheight,10,clwhite,hSubCaption,taleftjustify); - ImgApplyChanges(hParent.Handle); -end; - -function CreateUiLabl2(hParent :TWinControl;hleft,htop,hwidth,hheight,hFontSize,hStrokeWidth:Integer; hFontColor :TColor; hCaption, hSubCaption:String):TUiLabl; -begin - Result.labl := Createlbl(hParent,false,false,hLeft,htop,hwidth,hheight,hFontSize,hFontColor,hCaption,Allign); - result.Labl.Font.Name := 'Segoe UI Bold'; - result.labl.Layout := tlCenter; - result.bottomLine := CreatePanel(hParent,hleft,htop+hheight-hStrokeWidth,hwidth,hStrokeWidth,clwhite); - Result.SubLabl := Createlbl(hParent,false,false,hleft,htop+hheight+2,hwidth,hheight,10,clwhite,hSubCaption,taleftjustify); - ImgApplyChanges(hParent.Handle); -end; - -function CreateEdt(hParent :TWinControl; hleft,htop,hwidth,hheight,hFontSize,hStrokeWidth,hbtnLength:Integer;hImgSfx :string; hFontCol, hbackCol,hBorderCol :TColor):TMetroEdt; -begin - Result.base := TListView.Create(hParent); - with Result.base do - begin - Parent := hParent; - SetBounds(hleft,htop,hwidth,hheight); - Color := hbackCol; - BorderStyle := bsNone; - end; - Border(result.base,hStrokeWidth,hBorderCol); - Result.Text := Createlabel(Result.base,false,false,hstrokewidth*2,hstrokewidth,hWidth-hbtnLength-(hstrokewidth*2),hheight-hstrokewidth,hFontsize,hFontCol,'Hello',taLeftJustify); - Result.Text.layout := tlCenter; - Result.Btn := ImgLoad(result.base.handle,hImgSfx+'_{#ColorName}.PNG',hwidth-(hStrokeWidth*2)-hbtnLength,hStrokeWidth*2,hbtnLength,hbtnLength,true,true); - Result.btnlabl := TLabel.create(result.base); - with Result.btnlabl do - begin - Parent:=result.base; - AutoSize:=false; - SetBounds(hwidth-(hStrokeWidth*2)-hbtnLength,hStrokeWidth*2,hbtnLength,hbtnLength); - WordWrap := True; - with Font do - begin - Name:= 'Segoe UI'; - Size:=8; - Color:=clwhite; - end; - Alignment:=taCenter; - ShowHint := True; - Hint := 'Browse'; - ParentShowHint := False; - OnClick := @BrowseBtnClick; - end; - ImgApplyChanges(Result.base.handle); -end; - -procedure MetroBtnVisibility(var btn :TMetroBtn; Visible :Boolean ); -begin - btn.base.Visible := Visible; -end; - -procedure MetroBtnEvent(var btn :TMetroBtn; Event :TNotifyEvent ); -begin - btn.base.OnClick := Event; -end; - -procedure MetroBtnCaption(var btn :TMetroBtn; hCaption :String); -begin - btn.base.caption := hCaption; -end; - -function ButtonCreate(hParent :TWinControl; hLeft, hTop, hWidth, hHeight, hBorderWidth :Integer;hBorderCol,hColor :TColor;hCaption :String;Modal: Integer): TMetroBtn; -begin - Result.Base:= TPanel.Create(hParent); - with Result.Base do - begin - Parent:=hParent; - Left:=hLeft; - Top:=hTop; - Width:=hWidth; - Height:=hHeight; - Color:=hcolor; - BorderStyle := bsNone; - BevelInner := bvNone; - BevelOuter := bvNone; - BorderWidth := 0; - ParentBackground := False; - Caption := hCaption; - with Font do - begin - Name := {#FontName}; - Color := clwhite; - end; - end; - Border(result.base,hBorderWidth,hBorderCol); - Result.ModalBtn:= TButton.Create(hParent); - with Result.ModalBtn do - begin - SetBounds(0,0,0,0); - ModalResult:=Modal; - Parent:= hParent; - end; -end; - -procedure UpdateStateCompare(var sc :TStateCompare; Compare1, Compare2 :Extended); -begin - ImgSetVisibility(sc.ifEqual,False); - ImgSetVisibility(sc.ifGreater,False); - ImgSetVisibility(sc.iflesser,False); - if ( Compare1 = Compare2) then - ImgSetVisibility(sc.ifEqual,True) - else if ( Compare1 > Compare2 ) then - ImgSetVisibility(sc.ifGreater,True) - else if ( Compare1 < Compare2 ) then - ImgSetVisibility(sc.iflesser,True); - ImgApplyChanges(sc.Parent_Handle); -end; - -function CreateStateCompare(hHandle :HWND; hLeft, hTop, hWidth, hHeight :Integer; ifGreaterImg, ifequalImg, ifLessImg :String):TStateCompare; -begin - Result.Parent_Handle := hHandle; - Result.ifEqual := ImgLoad(Result.parent_Handle,ifequalImg,hLeft, hTop, hWidth, hHeight, true, true); - Result.ifGreater := ImgLoad(Result.parent_Handle,ifGreaterImg,hLeft, hTop, hWidth, hHeight, true, true); - Result.iflesser := ImgLoad(Result.parent_Handle,ifLessImg,hLeft, hTop, hWidth, hHeight, true, true); - ImgSetVisibility(Result.ifEqual,False); - ImgSetVisibility(Result.ifGreater,False); - ImgSetVisibility(Result.iflesser,False); - ImgApplyChanges(result.Parent_Handle); -end; - -procedure WFMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); -begin - SetLayeredWindowAttributes(StrToInt(ExpandConstant('{wizardhwnd}')), 0, 155, LWA_ALPHA); - ReleaseCapture; - SendMessage(WizardForm.Handle,$0112,$F012,0); - SetLayeredWindowAttributes(StrToInt(ExpandConstant('{wizardhwnd}')), 0, 255, LWA_ALPHA); -end; - -procedure DFMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); -begin - ReleaseCapture; - SendMessage(DialogForm.Form.Handle,$0112,$F012,0); -end; - -procedure WFMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); -begin - -end; - -procedure WFShow(Sender: TObject); -begin -// AnimateWindow(WizardForm.Handle,1000, AW_SLIDE_IN_RIGHT); -end; - -procedure BrowseBtnClick(Sender :TObject); -begin - WizardForm.DirBrowseButton.Click; -end; - -procedure CancelBtnclick(Sender: TObject); -begin - WizardForm.CancelButton.Click; -end; - -procedure MinimizeBtnclick(Sender: TObject); -begin - ReleaseCapture; - SendMessage(WizardForm.Handle,$112,61472,0); -end; - -procedure MetroNextBtnClick(Sender: TObject); -begin - if WizardForm.CurPageID = wpInstalling then - WizardForm.CancelButton.Click - else - WizardForm.NextButton.Click; -end; - -procedure MetroBackBtnClick(Sender: TObject); -begin - WizardForm.BackButton.Click; -end; - -procedure CloseBtnClick(Sender: TObject); -begin - if WizardForm.CurPageID = wpFinished then - WizardForm.NextButton.Click - else - WizardForm.CancelButton.Click; -end; - -procedure OnLangNav(Sender :TObject); -begin - LanguageLabel.Font.Color := {#Col}; - langNav.Font.Color := {#Col}; -end; - -procedure OffLangNav(Sender :TObject); -begin - LanguageLabel.Font.Color := clwhite; - langNav.Font.Color := clwhite; -end; - -procedure DirEdtChange(Sender :TObject); -begin - DirEdt.Text.Caption := MinimizePathName(WizardForm.DirEdit.Text, DirEdt.Text.Font, DirEdt.Text.Width); - ReadyPage.ComponentLabl[4].Caption := MinimizePathName(WizardForm.DirEdit.Text, DirEdt.Text.Font, DirEdt.Text.Width); - Drive:= ExtractFileDrive(WizardForm.DirEdit.Text); - GetSpaceOnDisk(Drive, True, FreeMB, TotalMB); - FreeSpace.Caption:= MbOrTb(FreeMB)+' ('+(NumToStr(FreeMB*100.0/TotalMB))+'%)'; - NeedSpace.Caption:= MBorTb({#NeedSize}*1.0) ; - TotalSpace.Caption := MbOrTb(TotalMB*1.0); - if (FreeMB < {#NeedSize} ) then - begin - LeftSpace.Caption := MbOrTb2(FreeMB - {#NeedSize})+' ('+ NumToStr( Longint(FreeMB-{#NeedSize})*100/TotalMB) + '.' + NumToStr( -(Longint(FreeMB-{#NeedSize})*10000/TotalMB) mod 100 ) +'%)'; - LeftSpace.Font.Color := clred - end else begin - LeftSpace.Font.Color := {#Col}; - LeftSpace.Caption := MbOrTb(FreeMB-{#NeedSize})+' ('+(NumtoStr( (FreeMB-{#NeedSize})*100.0/TotalMB) )+'%)'; - end; - UpdateStateCompare(ReadyPage.Compares[4],FreeMB,{#NEEDSIZE}); -end; - -procedure SidePnlUp(Sender :TOBject); -begin - SidePnl2.Show; -end; - -procedure SidePnlDown(Sender :TOBject); -begin - SidePnl2.Hide; -end; - -procedure SidePnlOperate(Sender :TObject); -begin - GetCursorPos(CurPoint); - if ( (CurPoint.x > WizardForm.Left) and (CurPoint.y > WizardForm.Top) ) then - begin - if ( (CurPoint.x - WizardForm.Left <= 56) ) then - SidePnl2.Show - else if ( CurPoint.x - WizardForm.Left >= 256 ) then - SidePnl2.Hide - end else - SidePnl2.Hide; - ImgApplyChanges(WizardForm.handle); -end; - -procedure SidePnlOnMouse(Sender: TObject; Shift: TShiftState; X, Y: Integer); -begin - SidePnl.Width := SidePnl.Width + 200; - WizardForm.Repaint; -end; - -procedure MetroUiHide; -var g: Integer; -begin - WelcomeUi.Base.Hide; - ConfigUi.Base.Hide; - InfoUi.Base.Hide; - for g := 0 to 3 do - SysCheckPage[g].Base.Hide; - SideBtnVisibility(HomeSideBtn,False); - SideBtnVisibility(OptionSideBtn,False); - SideBtnVisibility(InfoSideBtn,False); - SideBtnVisibility(SysSideBtn,False); - ImgApplyChanges(WizardForm.Handle); -end; - -procedure MetroUiShow; -var g:Integer; -begin - WelcomeUi.Base.Show; - ConfigUi.Base.Hide; - InfoUi.Base.Hide; - for g := 0 to 3 do - SysCheckPage[g].Base.Hide; - SideBtnVisibility(HomeSideBtn,TRUE); - SideBtnVisibility(OptionSideBtn,TRUE); - SideBtnVisibility(InfoSideBtn,TRUE); - SideBtnVisibility(SysSideBtn,TRUE); -end; - -procedure SystemPageShow(Sender :TObject); -begin - AllSidebtnDisable; - MetroUiPageHide; - SideBtnClick(SysSideBtn); - SysCheckPage[ProcessorCheckpage].Base.Show; -end; - -procedure WelcomeUiCreate; -begin - with WelcomeUi do - begin - Base := TListView.Create(WizardForm); - with Base do - begin - SetBounds(0,32,854,480); - Parent := WizardForm; - Color := WizardForm.Color; - BorderStyle := bsNone; - Createlabel(Base,False,False,0,0,Width,Height,0,0,'',taLeftJustify); - end; - ImgLoad(Base.Handle,'{#BackGround}',0,0,854,480,true,true); - #ifdef DARK - ImgLoad(Base.Handle,'DARK.PNG',0,0,854,480,true,true); - #endif - {Coordinates Are Taken From ASC and are Comparative to Wizardform} - PageTitle := Createlabel(Base,false,false,80-Base.Left,48-Base.Top,498,42,18,clwhite,'Home',allign); - PageTitle.Font.Name := 'Segoe Ui SemiBold'; - PageTitle.Layout := tlCenter; - - LeftUiLabl := CreateUiLabl(Base,80-Base.Left,86-Base.Top,498,42,12,2,clwhite,'WELCOME','Welcome to {#AppName} setup wizard' +#13+ - 'This will install {#AppName} on your computer'); - BottomLeftUiLabl := CreateUiLabl(Base,80-Base.Left,196-Base.Top,498,42,12,2,clwhite,'GUIDE FOR INSTALLATION','Follow these guides to help installation run smoothly'); - RightUiLabl := CreateUiLabl(Base,600-Base.Left,86-Base.Top,228,42,12,2,clwhite,'NAVIGATION','Use the sidebar on the left'); - RightUiLabl.Sublabl.Font.style := {#UIfontStyles}; - RightUiLabl.Sublabl.Font.Color := {#col}; - BottomRightUiLabl := CreateUiLabl(Base,600-Base.Left,166-Base.Top,228,42,12,2,clwhite,'MORE',''); - - GuideLine := Createlabel(Base,false,false,100-Base.Left,268-Base.Top,478,181,10,{#Col},'Please turn off antivirus software during installation'+#13+ - 'If this is an online installation, please make sure you have internet',taLeftJustify); - GuideLine.Font.Style := {#UIfontStyles}; - - Extra1 := TLabel.Create(Base); - with Extra1 do - begin - Parent := Base; - SetBounds(600-Base.Left,210-Base.Top,228,30); - Caption := 'Check if PC supports this app'; - with Font do - begin - Style := {#UIfontStyles}; - Name := 'Segoe UI'; - Size := 10; - Color := {#COL}; - end; - OnCLick := @SystemPageShow; - end; - - Extra2 := TLabel.Create(Base); - with Extra2 do - begin - Parent := Base; - SetBounds(600-Base.Left,230-Base.Top,228,30); - Caption := 'Start Installation'; - with Font do - begin - Style := {#UIfontStyles}; - Name := 'Segoe UI'; - Size := 10; - Color := {#COL}; - end; - OnClick := @MetroNextBtnClick; - end; - - ImgApplyChanges(Base.Handle); - end; -end; - -procedure InfoUiCreate; -begin - with InfoUi do - begin - Base := TListView.Create(WizardForm); - with Base do - begin - SetBounds(0,32,854,480); - Parent := WizardForm; - Color := WizardForm.Color; - BorderStyle := bsNone; - Createlabel(Base,False,False,0,0,Width,Height,0,0,'',taLeftJustify); - end; - - #ifexist "Graphics\Background2.JPG" - ImgLoad(Base.Handle,'Background2.JPG',0,0,854,480,true,true); - #else - ImgLoad(Base.Handle,'{#BackGround}',0,0,854,480,true,true); - #endif - - #ifdef DARK - ImgLoad(Base.Handle,'DARK.PNG',0,0,854,480,true,true); - #endif - - {Coordinates Are Taken From ASC and are Comparative to Wizardform} - PageTitle := Createlabel(Base,false,false,80-Base.Left,48-Base.Top,498,42,18,clwhite,'Information',allign); - PageTitle.Font.Name := 'Segoe Ui SemiBold'; - PageTitle.Layout := tlCenter; - - LeftUiLabl := CreateUiLabl(Base,80-Base.Left,86-Base.Top,498,42,12,2,clwhite,'{#AppName}',''); - - BottomLeftUiLabl := CreateUiLabl(Base,80-Base.Left,326-Base.Top,498,42,12,2,clwhite,'PACKAGE','{#PACKAGEDESCRIPTION}'); - - RightUiLabl := CreateUiLabl(Base,600-Base.Left,86-Base.Top,228,42,12,2,clwhite,'OTHER','Genre: {#GAMEGENRE}' +#13+'Rating: {#GAMERATING}'); - RightUiLabl.Sublabl.Font.style := {#UIfontStyles}; - RightUiLabl.Sublabl.Font.Color := {#col}; - - BottomRightUiLabl := CreateUiLabl(Base,600-Base.Left,166-Base.Top,228,42,12,2,clwhite,'MORE',''); - - with WizardForm.InfoBeforeMemo do - begin - Parent := Base; - SetBounds(80-Base.Left,130-Base.Top,498,200); - ExtractTemporaryFile('{#GameInfoFile}'); - Lines.LoadFromFile(ExpandConstant('{tmp}\{#GameInfoFile}')); - Color := $00171616; - with Font do - Begin - Name := 'Segoe Ui'; - Color := {#Col}; - end; - BorderStyle := bsNone; - Show; - end; - - Extra1 := TLabel.Create(Base); - with Extra1 do - begin - Parent := Base; - SetBounds(600-Base.Left,210-Base.Top,228,30); - Caption := 'Check if PC supports this app'; - with Font do - begin - Style := {#UIfontStyles}; - Name := 'Segoe UI'; - Size := 10; - Color := {#COL}; - end; - OnCLick := @SystemPageShow; - end; - - Extra2 := TLabel.Create(Base); - with Extra2 do - begin - Parent := Base; - SetBounds(600-Base.Left,230-Base.Top,228,30); - Caption := 'Start Installation'; - with Font do - begin - Style := {#UIfontStyles}; - Name := 'Segoe UI'; - Size := 10; - Color := {#COL}; - end; - OnClick := @MetroNextBtnClick; - end; - ImgApplyChanges(Base.Handle); - end; - -end; - -procedure ConfigUiCreate; -begin - with ConfigUi do - begin - Base := TListView.Create(WizardForm); - with Base do - begin - SetBounds(0,32,854,480); - Parent := WizardForm; - Color := WizardForm.Color; - BorderStyle := bsNone; - Createlabel(Base,False,False,0,0,Width,Height,0,0,'',taLeftJustify); - end; - #ifexist "Graphics\Background3.JPG" - ImgLoad(Base.Handle,'Background3.JPG',0,0,854,480,true,true); - #else - ImgLoad(Base.Handle,'{#BackGround}',0,0,854,480,true,true); - #endif - #ifdef DARK - ImgLoad(Base.Handle,'DARK.PNG',0,0,854,480,true,true); - #endif - {Coordinates Are Taken From ASC and are Comparative to Wizardform} - PageTitle := Createlabel(Base,false,false,80-Base.Left,48-Base.Top,498,42,18,clwhite,'Configuration',allign); - PageTitle.Font.Name := 'Segoe Ui SemiBold'; - PageTitle.Layout := tlCenter; - - LeftUiLabl := CreateUiLabl(Base,80-Base.Left,86-Base.Top,498,42,12,2,clwhite,'INSTALLATION PATH','{#AppName} will be installed in:'); - BottomLeftUiLabl := CreateUiLabl(Base,80-Base.Left,196-Base.Top,498,42,12,2,clwhite,'SELECTED PATH DETAILS',''); - RightUiLabl := CreateUiLabl(Base,600-Base.Left,86-Base.Top,228,42,12,2,clwhite,'TIPS','Make sure you have enough space'); - RightUiLabl.Sublabl.Font.Style := {#UIfontStyles} - RightUiLabl.Sublabl.Font.Color := {#Col}; - DirEdt := CreateEdt(Base,100-Base.Left,160-Base.Top,478,30,10,2,20,'browse',clWhite,$00171616,{#Col}); - DirEdt.text.Caption := WizardDirValue; - DirEdt.base.Show; - - FreeSpaceTitle := Createlabel(Base,false,false,80-Base.Left,250-Base.Top,498,30,12,clwhite,'Free Space',taLeftJustify); - FreeSpace := Createlabel(Base,false,false,100-Base.Left,280-Base.Top,478,30,12,clwhite,'Free Space',taLeftJustify); - FreeSpace.Font.Color := {#col}; - FreeSpace.Font.Style := {#UIfontStyles}; - NeedSpaceTitle := Createlabel(Base,false,false,80-Base.Left,310-Base.Top,498,30,12,clwhite,'Needed Space',taLeftJustify); - NeedSpace := Createlabel(Base,false,false,100-Base.Left,340-Base.Top,478,30,12,clwhite,'Free Space',taLeftJustify) - NeedSpace.Font.Color := {#col}; - NeedSpace.Font.Style := {#UIfontStyles}; - TotalSpaceTitle := Createlabel(Base,false,false,80-Base.Left+260,250-Base.Top,498,30,12,clwhite,'Total Space',taLeftJustify); - TotalSpace := Createlabel(Base,false,false,100-Base.Left+260,280-Base.Top,478,30,12,clwhite,'Total Space',taLeftJustify) - TotalSpace.Font.Color := {#col}; - TotalSpace.Font.Style := {#UIfontStyles}; - LeftSpaceTitle := Createlabel(Base,false,false,80-Base.Left+260,310-Base.Top,498,30,12,clwhite,'Space After Installation',taLeftJustify); - LeftSpace := Createlabel(Base,false,false,100-Base.Left+260,340-Base.Top,478,30,12,clwhite,'Left Space',taLeftJustify) - LeftSpace.Font.Color := {#col}; - LeftSpace.Font.Style := {#UIfontStyles}; - - ImgApplyChanges(Base.Handle); - end; -end; - -procedure SysChange(Sender :TObject); -begin - MetroUiPageHide; - case TPanel(Sender).Caption of - {#MemoryBtnCaption}: - begin - SysCheckPage[MemoryCheckpage].Base.Show; - end; - {#GraphicBtnCaption}: - begin - SysCheckPage[GraphicCheckPage].Base.Show; - end; - {#WindowBtnCaption}: - begin - SysCheckPage[WindowCheckPage].Base.Show; - end; - {#ProcessorBtnCaption}: - begin - SysCheckPage[ProcessorCheckpage].Base.Show; - end; - end; -end; - -function SekeletonSyspage(hPagetitle :String):TMetroUiSysPage; -begin - with result do - begin - Base := TListView.Create(WizardForm); - with Base do - begin - SetBounds(0,32,854,480); - Parent := WizardForm; - Color := WizardForm.Color; - BorderStyle := bsNone; - OnMouseDown := @WFMouseDown; - OnMouseup := @WFMouseup; - Createlabel(Base,False,False,0,0,Width,Height,0,0,'',taLeftJustify); - end; - - #ifexist "Graphics\Background4.JPG" - ImgLoad(Base.Handle,'Background4.JPG',0,0,854,480,true,true); - #else - ImgLoad(Base.Handle,'{#BackGround}',0,0,854,480,true,true); - #endif - - #ifdef DARK - ImgLoad(Base.Handle,'DARK.PNG',0,0,854,480,true,true); - #endif - {Coordinates Are Taken From ASC and are Comparative to Wizardform} - PageTitle := Createlabel(Base,false,false,80-Base.Left,48-Base.Top,498,42,18,clwhite,hPagetitle,allign); - PageTitle.Font.Name := 'Segoe Ui SemiBold'; - PageTitle.Layout := tlCenter; - - SetArrayLength(UiLabl,5); - UiLabl[0] := CreateUiLabl(Base,80-Base.Left,86-Base.Top,238,42,12,2,clwhite,'REQUIRED',''); - UiLabl[1] := CreateUiLabl(Base,340-Base.Left,86-Base.Top,238,42,12,2,clwhite,'YOUR SYSTEM',''); - UiLabl[2] := CreateUiLabl(Base,600-Base.Left,86-Base.Top,238,42,12,2,clwhite,'MORE',''); - UiLabl[3] := CreateUiLabl(Base,80-Base.Left,246-Base.Top,498,42,12,2,clwhite,'VERDICT',''); - UiLabl[4] := CreateUiLabl(Base,80-Base.Left,316-Base.Top,498,42,12,2,clwhite,'OTHER COMPONENT',''); - - LeftBtn := ButtonCreate(Base,258-Base.Left,370-Base.Top,100,32,2,{#Col},$00171616,'',mrNone); - MidBtn := ButtonCreate(Base,368-Base.Left,370-Base.Top,100,32,2,{#Col},$00171616,'',mrNone); - RightBtn := ButtonCreate(Base,478-Base.Left,370-Base.Top,100,32,2,{#Col},$00171616,'',mrNone); - MetroBtnEvent(LeftBtn,@SysChange); - MetroBtnEvent(MidBtn,@SysChange); - MetroBtnEvent(RightBtn,@SysChange); - - - LeftTitle := Createlabel(Base,false,false,80-Base.Left,130-Base.Top,238,30,12,clwhite,'',taLeftJustify); - Left := Createlabel(Base,false,false,100-Base.Left,160-Base.Top,218,30,12,{#Col},'',taLeftJustify); - Left.Font.Style := {#UIfontStyles}; - - BottomLeftTitle := Createlabel(Base,false,false,80-Base.Left,190-Base.Top,238,30,12,clwhite,'',taLeftJustify); - BottomLeft := Createlabel(Base,false,false,100-Base.Left,220-Base.Top,218,30,12,{#Col},'',taLeftJustify); - BottomLeft.Font.Style := {#UIfontStyles}; - - RightTitle := Createlabel(Base,false,false,340-Base.Left,130-Base.Top,238,30,12,clwhite,'',taLeftJustify); - Right := Createlabel(Base,false,false,360-Base.Left,160-Base.Top,218,30,12,{#Col},'',taLeftJustify); - Right.Font.Style := {#UIfontStyles}; - - BottomRightTitle := Createlabel(Base,false,false,340-Base.Left,190-Base.Top,238,30,12,clwhite,'',taLeftJustify); - BottomRight := Createlabel(Base,false,false,360-Base.Left,220-Base.Top,218,30,12,{#Col},'',taLeftJustify); - BottomRight.Font.Style := {#UIfontStyles}; - - LeftTitle.Hide; Left.Hide; RightTitle.Hide; Right.Hide; - BottomLeftTitle.Hide; BottomLeft.Hide; BottomRightTitle.Hide; BottomRight.Hide; - - Verdict := CreatePB(Base,80-Base.Left,295-Base.Top,498,25,2,2,$00171616,clwhite,{#Col}); - CreatePanel(Verdict.Base,Round(Verdict.Base.Width/1.4)-2,0,6,Verdict.Base.Height,$00171616); - CreatePanel(Verdict.Base,Round(Verdict.Base.Width/1.4),0,2,Verdict.Base.Height,clwhite); - Border(Verdict.Base,2,clwhite) - - Extra1 := TLabel.Create(Base); - with Extra1 do - begin - Parent := Base; - SetBounds(600-Base.Left,130-Base.Top,228,30); - Caption := 'Start Installation'; - with Font do - begin - Style := {#UIfontStyles}; - Name := 'Segoe UI'; - Size := 10; - Color := {#COL}; - end; - OnClick := @MetroNextBtnClick; - end; - - ImgApplyChanges(Base.Handle); - end -end; - -procedure SysUiCreate; -begin - SetArrayLength(SysCheckPage,4); - //--------------------------------------------------------------------------------------------- - SysCheckPage[ProcessorCheckpage] := SekeletonSyspage('System requirements | Processor'); - with SysCheckPage[ProcessorCheckpage] do - begin - LeftTitle.Show; Left.Show; RightTitle.Show; Right.Show; - BottomLeftTitle.Show; BottomLeft.Show; BottomRightTitle.Show; BottomRight.Show; - RightTitle.Caption := 'Cores'; - Right.Caption := IntToStr( GetCpuLogicalCores ) + ' Cores'; - BottomRightTitle.Caption := 'Speed'; - BottomRight.Caption := IntToStr( GetCpuCurrentClockSpeed ) + ' MHz'; - LeftTitle.Caption := 'Cores'; - Left.Caption := '{#CPUCores} Cores'; - BottomLeftTitle.Caption := 'Speed'; - BottomLeft.Caption := '{#CPUSpeed} MHz'; - PBSetProgressEx(Verdict,GetCpuCurrentClockSpeed*GetCpuLogicalCores,{#CPUCores}*{#CpuSpeed}*1.4); - MetroBtnCaption(LeftBtn,{#MemoryBtnCaption}); - MetroBtnCaption(MidBtn,{#GraphicBtnCaption}); - MetroBtnCaption(rightBtn,{#WindowBtnCaption}); - end; - //--------------------------------------------------------------------------------------------- - SysCheckPage[MemoryCheckpage] := SekeletonSyspage('System requirements | Memory'); - with SysCheckPage[MemoryCheckpage] do - begin - LeftTitle.Show; Left.Show; RightTitle.Show; Right.Show; - RightTitle.Caption := 'Size'; - Right.Caption := IntToStr( GetTotalVisibleMemory ) + ' MB'; - LeftTitle.Caption := 'Size'; - Left.Caption := '{#RAMSIZE} MB'; - PBSetProgressEx(Verdict,GetTotalVisibleMemory,{#RAMSIZE}*1.4); - MetroBtnCaption(LeftBtn,{#ProcessorBtnCaption}); - MetroBtnCaption(MidBtn,{#GraphicBtnCaption}); - MetroBtnCaption(rightBtn,{#WindowBtnCaption}) - end; - //--------------------------------------------------------------------------------------------- - SysCheckPage[GraphicCheckPage] := SekeletonSyspage('System requirements | Graphics'); - with SysCheckPage[GraphicCheckPage] do - begin - LeftTitle.Show; Left.Show; RightTitle.Show; Right.Show; - BottomLeftTitle.Show; BottomLeft.Show; BottomRightTitle.Show; BottomRight.Show; - RightTitle.Caption := 'Size'; - Right.Caption := IntToStr( GetGpuVRam ) + ' MB'; - BottomRightTitle.Caption := 'DirectX'; - BottomRight.Caption := (string(GetDirectXVersion( Dx_Gpu ))); - LeftTitle.Caption := 'Size'; - Left.Caption := '{#GPUSize} MB'; - BottomLeftTitle.Caption := 'DirectX'; - BottomLeft.Caption := '{#GPUDX}'; - PBSetProgressEx(Verdict,GetGpuVRam,{#GPUSize}*1.4); - MetroBtnCaption(LeftBtn,{#MemoryBtnCaption}); - MetroBtnCaption(MidBtn,{#ProcessorBtnCaption}); - MetroBtnCaption(rightBtn,{#WindowBtnCaption}); - end; - //--------------------------------------------------------------------------------------------- - SysCheckPage[WindowCheckPage] := SekeletonSyspage('System requirements | Windows'); - with SysCheckPage[WindowCheckPage] do - begin - LeftTitle.Show; Left.Show; RightTitle.Show; Right.Show; - BottomLeftTitle.Show; BottomLeft.Show; BottomRightTitle.Show; BottomRight.Show; - RightTitle.Caption := 'Version'; - Right.Caption := InttoStr(GetOSVersionMajor); - BottomRightTitle.Caption := 'Build'; - BottomRight.Caption := (IntTostr(GetOSBuildNumbers)); - LeftTitle.Caption := 'Version'; - Left.Caption := '{#OSVersion}'; - BottomLeftTitle.Caption := 'Build'; - BottomLeft.Caption := '{#OSBuild}'; - PBSetProgressEx(Verdict,GetOSBuildNumbers*GetOSVersionMajor,{#OSVersion}*{#OSBuild}*1.4); - MetroBtnCaption(LeftBtn,{#MemoryBtnCaption}); - MetroBtnCaption(MidBtn,{#GraphicBtnCaption}); - MetroBtnCaption(rightBtn,{#ProcessorBtnCaption}); - end; - //--------------------------------------------------------------------------------------------- -end; - -procedure CheckBtnClicks(Sender :TObject); -begin - case TPanel(Sender) of - ReadyPage.Btns[0].Base: begin - WizardForm.BackButton.Click; - SysCheckPage[ProcessorCheckpage].Base.Show; - AllSidebtnDisable; - SideBtnClick(SysSideBtn); - end; - ReadyPage.Btns[1].Base: begin - WizardForm.BackButton.Click; - SysCheckPage[MemoryCheckpage].Base.Show; - AllSidebtnDisable; - SideBtnClick(SysSideBtn); - end; - ReadyPage.Btns[2].Base: begin - WizardForm.BackButton.Click; - SysCheckPage[GraphicCheckPage].Base.Show; - AllSidebtnDisable; - SideBtnClick(SysSideBtn); - end; - ReadyPage.Btns[3].Base: begin - WizardForm.BackButton.Click; - SysCheckPage[WindowCheckPage].Base.Show; - AllSidebtnDisable; - SideBtnClick(SysSideBtn); - end; - ReadyPage.Btns[4].Base: begin - WizardForm.BackButton.Click; - ConfigUi.Base.Show; - AllSidebtnDisable; - SideBtnClick(OptionSideBtn); - end; - end; -end; - -procedure ReadyUiCreate; -var g, cleft,ctop,lleft,ltop:integer; -begin - with ReadyPage do - begin - Base := TListView.Create(WizardForm); - with Base do - begin - SetBounds(0,32,854,480); - Parent := WizardForm; - Color := WizardForm.Color; - BorderStyle := bsNone; - Createlabel(Base,False,False,0,0,Width,Height,0,0,'',taLeftJustify); - end; - #ifexist "Graphics\Background2.JPG" - ImgLoad(Base.Handle,'Background2.JPG',0,0,854,480,true,true); - #else - ImgLoad(Base.Handle,'{#BackGround}',0,0,854,480,true,true); - #endif - #ifdef DARK - ImgLoad(Base.Handle,'DARK.PNG',0,0,854,480,true,true); - #endif - {Coordinates Are Taken From ASC and are Comparative to Wizardform} - PageTitle := Createlabel(Base,false,false,80-Base.Left,48-Base.Top,498,42,18,clwhite,'Review',allign); - PageTitle.Font.Name := 'Segoe Ui SemiBold'; - PageTitle.Layout := tlCenter; - - LeftUiLabl := CreateUiLabl(Base,80-Base.Left,86-Base.Top,498,42,12,2,clwhite,'SYSTEM COMPONENTS',''); - BottomLeftUiLabl := CreateUiLabl(Base,80-Base.Left,250-Base.Top,498,42,12,2,clwhite,'INSTALLATION LOCATION',''); - RightUiLabl := CreateUiLabl(Base,600-Base.Left,86-Base.Top,228,42,12,2,clwhite,'TIPS','Start Installation'); - RightUiLabl.Sublabl.Font.style := {#UIfontStyles}; - RightUiLabl.Sublabl.Font.Color := {#col}; - - SetArrayLength(ComponentLabl,5); - SetArrayLength(Btns,5); - SetArrayLength(Compares,5); - lleft := 80; - ltop := 130 - cleft := 492; - ctop := 134; - - for g := 0 to 3 do - begin - ComponentLabl[g] := Createlabel(Base,false,false,lleft-Base.Left,ltop-Base.top,408,30,10,clwhite,'',taLeftJustify); - ComponentLabl[g].Layout := tlCenter; - Compares[g] := CreateStateCompare(Base.Handle,cleft-Base.Left,ctop-Base.Top,22,22,'tick.png','tick.png','cross.png'); - Btns[g] := ButtonCreate(Base,cleft+22-Base.left+4,ctop-Base.Top,60,22,1,{#Col},$001F1F1F,'Check',mrNone); - MetroBtnEvent(Btns[g],@CheckBtnClicks); - ltop := ltop + 30; - ctop := ctop + 30; - end; - - UpdateStateCompare(Compares[0],GetCpuCurrentClockSpeed*GetCpuLogicalCores,{#CPUCores}*{#CpuSpeed}); - UpdateStateCompare(Compares[1],GetTotalVisibleMemory,{#RAMSIZE}); - UpdateStateCompare(Compares[2],GetGpuVRam,{#GPUSize}); - UpdateStateCompare(Compares[3],GetOSBuildNumbers*GetOSVersionMajor,{#OSVersion}*{#OSBuild}); - - ComponentLabl[0].Caption := GetCpuName; - ComponentLabl[1].Caption := MbOrTb(GetTotalVisibleMemory) + ' system memory'; - ComponentLabl[2].Caption := GetGpuName; - ComponentLabl[3].Caption := GetOSName + ' ( Build ' + InttoStr(GetOSBuildNumbers) + ' )' ; - - ComponentLabl[4] := Createlabel(Base,false,false,80-Base.Left,295-Base.top,408,30,10,clwhite,WizardDirValue,taLeftJustify); - ComponentLabl[4].Layout := tlCenter; - Btns[4] := ButtonCreate(Base,518-Base.Left,300-Base.Top,60,22,1,{#Col},$001F1F1F,'Change',mrNone); - Compares[4] := CreateStateCompare(Base.Handle,492-Base.Left,300-Base.Top,22,22,'tick.png','tick.png','cross.png'); - UpdateStateCompare(Compares[4],GetVolumeFreeSpace(ExtractFileDrive(WizardDirValue),TF_InMegaBytes),{#NEEDSIZE}); - MetroBtnEvent(Btns[4],@CheckBtnClicks); - - Extra1 := TLabel.Create(Base); - with Extra1 do - begin - Parent := Base; - SetBounds(600-Base.Left,130-Base.Top,228,30); - Caption := 'Start Installation'; - with Font do - begin - Style := {#UIfontStyles}; - Name := 'Segoe UI'; - Size := 10; - Color := {#COL}; - end; - OnClick := @MetroNextBtnClick; - end; - - ImgApplyChanges(Base.Handle); - end; -end; - -procedure InstallUiCreate; -var g:Integer; -begin - with InstallPage do - begin - Base := TListView.Create(WizardForm); - with Base do - begin - SetBounds(0,32,854,480); - Parent := WizardForm; - Color := WizardForm.Color; - BorderStyle := bsNone; - Createlabel(Base,False,False,0,0,Width,Height,0,0,'',taLeftJustify); - end; - #ifexist "Graphics\Background3.JPG" - ImgLoad(Base.Handle,'Background3.JPG',0,0,854,480,true,true); - #else - ImgLoad(Base.Handle,'{#BackGround}',0,0,854,480,true,true); - #endif - #ifdef DARK - ImgLoad(Base.Handle,'DARK.PNG',0,0,854,480,true,true); - #endif - {Coordinates Are Taken From ASC and are Comparative to Wizardform} - PageTitle := Createlabel(Base,false,false,80-Base.Left,48-Base.Top,498,42,18,clwhite,'Installation',allign); - PageTitle.Font.Name := 'Segoe Ui SemiBold'; - PageTitle.Layout := tlCenter; - - LeftUiLabl := CreateUiLabl(Base,80-Base.Left,86-Base.Top,498,42,12,2,clwhite,'PROGRESS',''); - BottomLeftUiLabl := CreateUiLabl(Base,80-Base.Left,161-Base.Top,498,42,12,2,clwhite,'STATISTICS',''); - RightUiLabl := CreateUiLabl(Base,600-Base.Left,86-Base.Top,228,42,12,2,clwhite,'TIPS','Please wait while app is installed'); - RightUiLabl.Sublabl.Font.style := {#UIfontStyles}; - RightUiLabl.Sublabl.Font.Color := {#col}; - BottomRightUiLabl := CreateUiLabl(Base,600-Base.Left,161-Base.Top,228,42,12,2,clwhite,'MORE',''); - - ProgressBar := CreatePB(Base,80-Base.Left,135-Base.Top,498,25,2,2,$00171616,clwhite,{#Col}); - - SetArrayLength(StatTitles,5); - StatTitles[0] := Createlabel(Base,false,false,080-Base.Left,205-Base.Top,238,30,12,clwhite,'Elapsed time',taLeftJustify); - StatTitles[1] := Createlabel(Base,false,false,080-Base.Left,265-Base.Top,238,30,12,clwhite,'Estimated Time',taLeftJustify); - StatTitles[2] := Createlabel(Base,false,false,340-Base.Left,205-Base.Top,238,30,12,clwhite,'Remaining Time',taLeftJustify); - StatTitles[3] := Createlabel(Base,false,false,340-Base.Left,265-Base.Top,238,30,12,clwhite,'Transfer Rate',taLeftJustify); - StatTitles[4] := Createlabel(Base,false,false,080-Base.Left,325-Base.Top,238,30,12,clwhite,'File',taLeftJustify); - - SetArrayLength(StatLabls,5); - StatLabls[0] := Createlabel(Base,false,false,100-Base.Left,235-Base.Top,218,30,12,{#Col},'Elapsed time',taLeftJustify); - StatLabls[1] := Createlabel(Base,false,false,100-Base.Left,295-Base.Top,218,30,12,{#Col},'Estimated Time',taLeftJustify); - StatLabls[2] := Createlabel(Base,false,false,360-Base.Left,235-Base.Top,218,30,12,{#Col},'Remaining Time',taLeftJustify); - StatLabls[3] := Createlabel(Base,false,false,360-Base.Left,295-Base.Top,218,30,12,{#Col},'Transfer Rate',taLeftJustify); - StatLabls[4] := Createlabel(Base,false,false,100-Base.Left,355-Base.Top,468,30,12,{#Col},'File',taLeftJustify); - for g:= 0 to 4 do - StatLabls[g].Font.Style := {#UIfontStyles}; - - SetArrayLength(MonitorLabls,3); - MonitorLabls[0] := Createlabel(Base,false,false,600-Base.Left,205-Base.Top,228,30,12,{#Col},'CPU Usage',taLeftJustify); - MonitorLabls[1] := Createlabel(Base,false,false,600-Base.Left,235-Base.Top,228,30,12,{#Col},'',taLeftJustify); - MonitorLabls[2] := Createlabel(Base,false,false,600-Base.Left,265-Base.Top,228,30,12,{#Col},' Disk Free Space',taLeftJustify); - for g:= 0 to 2 do - MonitorLabls[g].Font.Style := {#UIfontStyles}; - - ImgApplyChanges(Base.Handle); - end; -end; - -procedure FinishUiCreate; -begin - with FinishPage do - begin - Base := TListView.Create(WizardForm); - with Base do - begin - SetBounds(0,32,854,480); - Parent := WizardForm; - Color := WizardForm.Color; - BorderStyle := bsNone; - Createlabel(Base,False,False,0,0,Width,Height,0,0,'',taLeftJustify); - end; - #ifexist "Graphics\Background4.JPG" - ImgLoad(Base.Handle,'Background4.JPG',0,0,854,480,true,true); - #else - ImgLoad(Base.Handle,'{#BackGround}',0,0,854,480,true,true); - #endif - #ifdef DARK - ImgLoad(Base.Handle,'DARK.PNG',0,0,854,480,true,true); - #endif - {Coordinates Are Taken From ASC and are Comparative to Wizardform} - PageTitle := Createlabel(Base,false,false,80-Base.Left,48-Base.Top,698,42,18,clwhite,'Finish',allign); - PageTitle.Font.Name := 'Segoe Ui SemiBold'; - PageTitle.Layout := tlCenter; - - LeftUiLabl := CreateUiLabl(Base,80-Base.Left,86-Base.Top,698,42,12,2,clwhite,'COMPLETING SETUP','{#AppName} has been installed successfully' +#13+ - 'Click Finish to close setup wizard'); - - BottomLeftUiLabl := CreateUiLabl(Base,80-Base.Left,196-Base.Top,698,42,12,2,clwhite,'GUIDE FOR APPLICATION','Follow these guides to help run {#AppName}'); - GuideLineLabl := Createlabel(Base,false,false,100-Base.Left,268-Base.Top,678,181,10,{#Col},'You can now launch the application from your desktop'+#13+ - 'You can find another launcher under your startmenu'+#13+ - 'Use control panel programs and features to uninstall the application',taLeftJustify); - GuideLineLabl.Font.Style := {#UIfontStyles}; - ImgApplyChanges(Base.Handle); - end; -end; - -function isthatSideBtn(hSideBtn :TSideBtn; Compareto :TObject):Boolean; -begin - Result := false; - case Compareto of - hSideBtn.SidePnl: result := true; - hSideBtn.Labl1: result := true; - hSideBtn.Labl2: result := true; - end; -end; - -procedure BtnClicks(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); -begin - AllSidebtnDisable; - MetroUiPageHide; - if isthatSideBtn(HomeSideBtn,Sender) then - begin - if not WelcomeUi.Base.Visible then - WelcomeUi.Base.Show; - SideBtnClick(HomeSideBtn); - end else - if isthatSideBtn(InfoSideBtn,Sender) then - begin - if not InfoUi.Base.Visible then - InfoUi.Base.Show; - SideBtnClick(InfoSideBtn); - end else - if isthatSideBtn(OptionSideBtn,Sender) then - begin - DirEdtChange(Sender) - if not ConfigUi.Base.Visible then; - ConfigUi.Base.Show; - SideBtnClick(OptionSideBtn); - end else - if isthatSideBtn(SysSideBtn,Sender) then - begin - if not SysCheckPage[0].Base.Visible then - SysCheckPage[0].Base.Show; - SideBtnClick(SysSideBtn); - end; - ImgApplyChanges(WizardForm.Handle); -end; - -procedure SetupLang; -var g:Integer; -begin - #define public TotalLangs - #sub Dummy - #endsub - #for { TotalLangs = 0 ; FileExists( "Resources\Languages\" + StringChange( "LanguageCounter.txt", "Counter", str(TotalLangs+1)) ) ; TotalLangs++ } Dummy - SetArrayLength(Language,{#TotalLangs}); - for g := 0 to GetArrayLength(Language)-1 do - ExtractTemporaryFile('Language'+IntToStr(g+1)+'.txt'); - CurLang := 0; -end; - -procedure LangUpdate; -var g:Integer; -begin - LanguageLabel.Caption := GetLangLabel('Language'); - langNav.Caption := GetLangLabel('LanguageChange'); - if WizardForm.CurPageID = wpWelcome then - begin - MetroNextBtn.base.Caption := GetLangLabel('ProceedBtn'); - - HomeSideBtn.Labl1.Caption := GetLangLabel('HomeLabel') - InfoSideBtn.Labl1.Caption := GetLangLabel('InfoLabel') - SysSideBtn.Labl1.Caption := GetLangLabel('SystemLabel') - OptionSideBtn.Labl1.Caption := GetLangLabel('ConfigLabel') - - // if WelcomeUi.Base.Showing then - with WelcomeUi do - begin - Pagetitle.Caption := GetLangLabel('WelcomePageTitle'); - GuideLine.Caption := GetLangLabel('Guide'); - Extra1.Caption := GetLangLabel('SystemCheckNavigation'); - Extra2.Caption := GetLangLabel('InstalltionNavigation'); - UilablSetLabl(LeftUiLabl,GetLangLabel('WelcomeTitle'),GetLangLabel('WelcomeCaption')); - UilablSetLabl(BottomLeftUiLabl,GetLangLabel('GuideTitle'),GetLangLabel('GuideCaption')); - UilablSetLabl(RightUiLabl,GetLangLabel('NavigationTitle'),GetLangLabel('NavigationCaption')); - UilablSetLabl(BottomRightUiLabl,GetLangLabel('More'),''); - end; - // else if InfoUi.Base.Showing then - with InfoUi do - begin - Pagetitle.Caption := GetLangLabel('InfoPageTitle'); - Extra1.Caption := GetLangLabel('SystemCheckNavigation'); - Extra2.Caption := GetLangLabel('InstalltionNavigation'); - UilablSetLabl(LeftUiLabl,GetLangLabel('InfoTitle'),''); - UilablSetLabl(BottomLeftUiLabl,GetLangLabel('PackageTitle'),GetLangLabel('PackageDescription')); - UilablSetLabl(RightUiLabl,GetLangLabel('Other'),GetLangLabel('OtherPackageDescription')); - UilablSetLabl(BottomRightUiLabl,GetLangLabel('More'),''); - FreeSpaceTitle.Caption := GetLangLabel('FreeSpace'); - NeedSpaceTitle.Caption := GetLangLabel('NeedSpace'); - TotalSpaceTitle.Caption := GetLangLabel('TotalSpace'); - LeftSpaceTitle.Caption := GetLangLabel('AfterSpace') - end; - //else if ConfigUi.Base.Showing then - with ConfigUi do - begin - Pagetitle.Caption := GetLangLabel('ConfigPageTitle'); - FreeSpace.Caption := GetLangLabel('FreeSpace'); - NeedSpace.Caption := GetLangLabel('NeedSpace'); - UilablSetLabl(LeftUiLabl,GetLangLabel('DirPath'),GetLangLabel('SelectDirlabel')); - UilablSetLabl(BottomLeftUiLabl,GetLangLabel('PathDetails'),('')); - UilablSetLabl(RightUiLabl,GetLangLabel('TipsCaption'),GetLangLabel('DirTip')); - DirEdtChange(WizardForm.DirBrowseButton); - end; - //else begin - for g:=0 to GetArrayLength(SysCheckPage)-1 do - with SysCheckPage[g] do - begin - UilablSetLabl(Uilabl[0],GetLangLabel('RequiredLabel'),''); - UilablSetLabl(Uilabl[1],GetLangLabel('YourSystemLabel'),''); - UilablSetLabl(Uilabl[2],GetLangLabel('MoreLabel'),''); - UilablSetLabl(Uilabl[3],GetLangLabel('VerdictLabel'),''); - UilablSetLabl(Uilabl[4],GetLangLabel('OtherComponentlabel'),''); - Extra1.Caption := GetLangLabel('SystemCheckNavigation'); - end; - with SysCheckPage[ProcessorCheckPage] do - begin - MetroBtnCaption(LeftBtn,{#MemoryBtnCaption}); - MetroBtnCaption(MidBtn,{#GraphicBtnCaption}); - MetroBtnCaption(rightBtn,{#WindowBtnCaption}); - Pagetitle.Caption := GetLangLabel('ProcessorPagelabel'); - end; - with SysCheckPage[MemoryCheckpage] do - begin - MetroBtnCaption(LeftBtn,{#ProcessorBtnCaption}); - MetroBtnCaption(MidBtn,{#GraphicBtnCaption}); - MetroBtnCaption(rightBtn,{#WindowBtnCaption}) - Pagetitle.Caption := GetLangLabel('MemoryPageLabel'); - end; - with SysCheckPage[GraphicCheckPage] do - begin - MetroBtnCaption(LeftBtn,{#MemoryBtnCaption}); - MetroBtnCaption(MidBtn,{#ProcessorBtnCaption}); - MetroBtnCaption(rightBtn,{#WindowBtnCaption}); - Pagetitle.Caption := GetLangLabel('GraphicPageLabel'); - end; - with SysCheckPage[WindowCheckPage] do - begin - MetroBtnCaption(LeftBtn,{#MemoryBtnCaption}); - MetroBtnCaption(MidBtn,{#GraphicBtnCaption}); - MetroBtnCaption(rightBtn,{#ProcessorBtnCaption}); - Pagetitle.Caption := GetLangLabel('WindowPageLabel'); - end; - end else if WizardForm.CurPageID = wpReady then - with ReadyPage do - begin - NotesSideBtn.Labl1.Caption := GetLangLabel('ReadySideLabel'); - MetroNextBtn.base.Caption := GetLangLabel('InstalBtn'); - Pagetitle.Caption := GetLangLabel('ReadyPageLabel'); - UilablSetLabl(LeftUiLabl,GetLangLabel('SysReviewLabel'),''); - UilablSetLabl(BottomLeftUiLabl,GetLangLabel('DirPathReviewTitle'),''); - UilablSetLabl(RightUiLabl,GetLangLabel('TipsCaption'),''); - for g:= 0 to GetArrayLength(Btns)-2 do - Btns[g].Base.Caption := GetLangLabel('CheckBtnLabel'); - Btns[GetArrayLength(Btns)-1].base.Caption := GetLangLabel('BrowseBtn'); - Extra1.Caption := GetLangLabel('InstalltionNavigation'); - end - - else if WizardForm.CurPageID = wpInstalling then - with InstallPage do - begin - InstallSideBtn.Labl1.Caption := GetLangLabel('InstallSideLabel'); - MetroNextBtn.base.Caption := GetLangLabel('CancelBtn'); - UiLablSetLabl(LeftUiLabl,GetLangLabel('ProgressLabel'),''); - UiLablSetLabl(BottomLeftUiLabl,GetLangLabel('StatsLabel'),''); - UiLablSetLabl(RightUiLabl,GetLangLabel('TipsCaption'),GetLangLabel('InstallationTip')); - UiLablSetLabl(BottomRightUiLabl,GetLangLabel('MoreLabel'),''); - StatTitles[0].Caption := GetLangLabel('Elapsedtime'); - StatTitles[1].Caption := GetLangLabel('EstimatedTime'); - StatTitles[2].Caption := GetLangLabel('RemainingTime'); - StatTitles[3].Caption := GetLangLabel('TransferRate'); - StatTitles[4].Caption := GetLangLabel('CurrFile'); - PageTitle.Caption := GetLangLabel('InstallPagelabel'); - end - - else if WizardForm.CurPageID = wpFinished then - with FinishPage do - begin - FinishSideBtn.Labl1.Caption := GetLangLabel('FinishSideLabel'); - MetroNextBtn.base.Caption := GetLangLabel('FinshBtn'); - Pagetitle.Caption := GetLangLabel('FinishPageLabel'); - GuideLineLabl.Caption := GetLangLabel('FinishedGuideLabel'); - UilablSetLabl(LeftUiLabl,GetLangLabel('FinishHeadingLabel'),GetLangLabel('FinishedLabel')); - UilablSetLabl(BottomLeftUiLabl,GetLangLabel('FinishGuideHeading'),GetLangLabel('FinishGuideHint')); - end; -end; - -procedure LangChange(Sender :TObject); -begin - if CurLang <> GetArrayLength(Language)-1 then - CurLang := CurLang + 1 - else - Curlang := 0; - LangUpdate; -end; - -procedure BASS_OnOffClick(Sender :TObject); -begin - if (_BASS_ChannelIsActive(Mp3Handle) = BASS_ACTIVE_PAUSED) then _BASS_ChannelPlay(Mp3Handle, False) else - _BASS_ChannelPause(Mp3Handle) -end; - -procedure YesBtnClick(Sender :TObject); -begin - DialogForm.YesBtn.ModalBtn.Click; -end; - -procedure NoBtnClick(Sender :TObject); -begin - DialogForm.NoBtn.ModalBtn.Click; -end; - -procedure DFShow(Sender: TObject); -begin - with DialogForm do - begin - NotificationLabl.Caption := GetLangLabel('DialogMessage1'); //Notification - ResponseUiLabl.labl.Caption := GetLangLabel('DialogMessage2'); // Response - MessageUiLabl.labl.Caption := GetLangLabel('DialogMessage3'); // Response - YesBtn.base.Caption := GetLangLabel('YesBtn'); - NoBtn.base.Caption := GetLangLabel('NoBtn'); - end; -end; - -procedure SetDialogMessage(dMessage :string); -begin - DialogForm.MessageUiLabl.Sublabl.Caption := GetLangLabel(dMessage); -end; - -function ShowCancelBox:Integer; -begin - SetWindowPos(DialogForm.Form.Handle,0,(WizardForm.Left+(WizardForm.Width-DialogForm.Form.Width)/2),WizardForm.Top+(WizardForm.Height-DialogForm.Form.Height)/2,0,0,$515); - SetDialogMessage('SetupExit'); - Result:= DialogForm.Form.ShowModal; -end; - -function ChangeDisc(var FileName :String; findFile : Boolean):Boolean; -var str :string; -begin - SetWindowPos(DialogForm.Form.Handle,0,(WizardForm.Left+(WizardForm.Width-DialogForm.Form.Width)/2),WizardForm.Top+(WizardForm.Height-DialogForm.Form.Height)/2,0,0,$515); - FileName := ExpandConstant(FileName); - if not FileExists(FileName) then - begin - str := GetLangLabel('FileNotInDir'); - StringChange(str,'', ExtractFileName( Filename ) ); - StringChange(str,'', ExtractFileDir( Filename ) ); - DialogForm.MessageUiLabl.Sublabl.Caption := str; - if DialogForm.Form.ShowModal = mrYes then - Result := GetOpenFileName('',FileName,ExtractFilePath( FileName ),ExtractFileName(FileName)+ '|' + ExtractFileName(FileName),ExtractFileName(FileName)) - else - result := false; - end else - Result := true; -end; - -// -procedure CancelButtonClick(CurPageID: Integer; var Cancel, Confirm: Boolean); -#if defined( MC ) -var ResultCode :Integer; -#endif -begin - Confirm := false; - if ShowCancelBox = mryes then - Cancel := true - else - Cancel := false; - #if defined(MC) - if CurPageID = wpInstalling then - begin - SuspendProc; - if Cancel then - begin - ISDoneCancel:=1; - Exec(ExpandConstant('{sys}\taskkill.exe'), ' /F /IM pZLib.exe', '', SW_HIDE, ewWaitUntilTerminated, ResultCode); - Exec(ExpandConstant('{sys}\taskkill.exe'), ' /F /IM fazip.exe', '', SW_HIDE, ewWaitUntilTerminated, ResultCode); - end; - ResumeProc; - end; - #endif -end; -// - -function InitializeSetup(): Boolean; -begin - if not FileExists(ExpandConstant('{tmp}\botva2.dll')) then - ExtractTemporaryFile('botva2.dll'); - if not FileExists(ExpandConstant('{tmp}\CallbackCtrl.dll')) then - ExtractTemporaryFile('CallbackCtrl.dll'); - if not FileExists(ExpandConstant('{tmp}\InnoCallback.dll')) then - ExtractTemporaryFile('InnoCallback.dll'); - if not FileExists(ExpandConstant('{tmp}\ISSysInfo.dll')) then - ExtractTemporaryFile('ISSysInfo.dll'); - if not FileExists(ExpandConstant('{tmp}\Bass.dll')) then - ExtractTemporaryFile('Bass.dll'); - - #ifexist "Graphics\Music.mp3" - if not FileExists(ExpandConstant('{tmp}\Music.mp3')) then - ExtractTemporaryFile('Music.mp3'); - #endif - - #ifdef UnArc_Protect - ExtractTemporaryFile('unarc.dll'); - #endif - #ifdef UnArc_None - ExtractTemporaryFile('unarc.dll'); - #endif - - // Seting up Languages - SetupLang; - - #ifexist "Graphics\Music.mp3" - // Initialising Music - BASS_Init(-1, 44100, 0, 0, 0); - mp3Handle := BASS_StreamCreateFile(FALSE, PAnsiChar(ExpandConstant('{tmp}\Music.mp3')), 0, 0, 0, 0, 4); - BASS_Start(); - BASS_ChannelPlay(mp3Handle, False); - #endif - - // Dialog Form - with DialogForm do - begin - Form := CreateCustomForm; - with Form do - begin - Width := 540; - Height := 288; - BorderStyle := bsNone; - Color := $001E1E1E; - FormStyle := fsStayOnTop; - OnShow := @DFShow; - Position := poScreenCenter - end; - - UpperPanel := CreatePanel(Form,0,0,540,32,$00141414); - UpperPanelLabl := Createlbl(UpperPanel,true,false,10,10,0,0,8,clwhite,'{#AppName}',taCenter); - UpperPanellabl.OnMouseDown := @DFMouseDown; - UpperPanel.OnMouseDown := @DFMouseDown; - LowerPanel := CreatePanel(Form,0,280,540,8,{#Col}); - LowerPanel.OnMouseDown := @DFMouseDown; - NotificationLabl := Createlbl(Form,false,false,20,42,500,42,18,clwhite,'Notification',taLeftJustify); - NotificationLabl.Layout := tlCenter; - - MessageUiLabl := CreateUiLabl2(Form,20,76,500,44,12,2,clwhite,'MESSAGE',''); - MessageUiLabl.Sublabl.WordWrap := true; - ResponseUiLabl := CreateUiLabl2(Form,20,174,500,44,12,2,clwhite,'RESPONSE',''); - - NoBtn := ButtonCreate(DialogForm.Form,420,225,100,32,1,{#Col},$001E1E1E,'No',mrNo); - NoBtn.base.Font.Size := 10; - NoBtn.Base.Onclick := @NoBtnClick; - YesBtn := ButtonCreate(DialogForm.Form,316,225,100,32,1,{#Col},$001E1E1E,'Yes',mrYes); - YesBtn.base.Font.Size := 10; - YesBtn.Base.Onclick := @YesBtnClick; - - with TLabel.Create(Form) do - begin - Parent := Form; - SetBounds(0,0,Form.Width,Form.Height) - OnMouseDown := @DFMouseDown; - end; - end; - //Dialog Form - // Return Type - #ifdef MC - ExtractTemporaryFile('english.ini'); - ExtractTemporaryFile('Archive.ini'); - if FileExists(ExpandConstant('{src}\Setup.db')) then - Result := True - else - begin - MsgBox('Missing file "Setup.db"', mbCriticalError, MB_OK); - end; - #else - Result := True; - #endif - #ifndef DEBUG - // Whether App is Installed or not? - if RegValueExists(HKLM, 'SOFTWARE\{#AppName}', 'InstallPath') then begin - // App is Installed, Asking whether to continue or not? - DialogForm.MessageUiLabl.Sublabl.Caption := 'A copy of this program is already installed! Installation should be aborted.'+#13+'Do you want to abort?'; - Result:= DialogForm.Form.ShowModal <> mrYes; - end; - #endif -end; - -function ShouldSkipPage(PageID: Integer): Boolean; -begin - Result := True; - if ( (PageID = wpWelcome) or (PageID = wpReady) or (PageID = wpInstalling) or ( (PageID = wpFinished) and not ISDoneError ) ) then - Result := False; -end; - -procedure InitializeWizard(); -var g:Integer; -begin - with WizardForm do - begin - BorderStyle:=bsNone; - ClientWidth:=854; - ClientHeight:=576; - Center; - Color:=$FF1F1F1F; - OuterNotebook.Hide; - InnerNotebook.Hide; - Bevel.Hide; - PageNameLabel.Hide; - PageDescriptionLabel.Hide; - MainPanel.Hide; - BackButton.SetBounds(0,0,0,0); - NextButton.SetBounds(0,0,0,0); - CancelButton.SetBounds(0,0,0,0); - DirBrowseButton.SetBounds(0,0,0,0); - GroupBrowseButton.SetBounds(0,0,0,0); - DirEdit.OnChange := @DirEdtChange; - OnShow := @WFShow; - SetWindowLong(StrToInt(ExpandConstant('{wizardhwnd}')),GWL_EXSTYLE, WS_EX_LAYERED); - SetLayeredWindowAttributes(StrToInt(ExpandConstant('{wizardhwnd}')), 0, 255, LWA_ALPHA); - end; - - Createlabel(WizardForm,False,False,0,0,854,576,0,0,'',taLeftJustify); //WizardForm Move Label - ImgLoad(WizardForm.Handle,'{#BackGround}',0,32,854,480,true,true); - AppLabel := Createlabel(WizardForm,true,false,10,8,0,0,10,clwhite,'{#AppName}',taLeftJustify); - - CloseBtn := CreateSmlBtn(WizardForm,808,0,46,32,10,4,24,24,$FF1F1F1F,clred,$FF1F1F1F,'Close.PNG'); - SmlBtnEvent(CloseBtn,@CloseBtnclick); - MinimizeBtn := CreateSmlBtn(WizardForm,770,0,38,32,10,8,16,16,$FF1F1F1F,clGrayText,$FF1F1F1F,'Minimize.PNG'); - SmlBtnEvent(MinimizeBtn,@MinimizeBtnclick); - #ifexist "Graphics\Music.mp3" - MusicBtn := CreateSmlBtn(WizardForm,770-38,0,38,32,10,8,16,16,$FF1F1F1F,clGrayText,$FF1F1F1F,'Music.PNG'); - SmlBtnEvent(MusicBtn,@BASS_OnOffClick); - #endif - MetroNextBtn := ButtonCreate(WizardForm,736,530,100,32,1,{#Col},$001F1F1F,'Proceed',mrNone) - MetroBtnEvent(MetroNextBtn,@MetroNextBtnClick); - - //---------------------------------------------------------------------------------------------------// - WelcomeUiCreate; // - InfoUiCreate; // - ConfigUiCreate; // - SysUiCreate; // - ReadyUiCreate; // - InstallUiCreate; // - FinishUiCreate; // - //---------------------------------------------------------------------------------------------------// - SidePnl2 := CreatePanel(WizardForm,-2,31,256,482,WizardForm.Color); - SidePnl2.Hide; - SidePnl := CreatePanel(WizardForm,-2,31,56,482,WizardForm.Color); - - LanguageLabel := TLabel.Create(WizardForm); - with LanguageLabel do - begin - Parent := SidePnl; - SetBounds(0,444,56,18); - AutoSize := false; - with Font do - begin - Name := {#FontName}; - Size := 12; - Color := clwhite; - end; - Caption := GetLangLabel('language'); - OnClick := @LangChange; - OnMouseEnter := @OnLangNav; - OnMouseLeave := @OffLangnav; - Layout := tlCenter; - Alignment := taCenter; - end; - - langNav := TLabel.Create(SidePnl2) - with langNav do - begin - Parent := SidePnl2; - SetBounds(12,444,256,LanguageLabel.Height); - AutoSize := false; - with Font do - begin - name := {#FontName}; - Size := 10; - Color := clwhite; - end; - caption := GetLangLabel('languagechange'); - OnClick := @LangChange; - OnMouseEnter := @OnLangNav; - OnMouseLeave := @OffLangnav; - Layout := tlCenter; - Alignment := taCenter; - end; - - with TTimer.Create(WizardForm) do - begin - Interval := 100; - OnTimer := @SidePnlOperate; - Enabled := true; - end; - - HomeSideBtn := CreateSideBtn(SidePnl,0,48-SidePnl.Top,256,48,'Home','Home'); - SetSideBtnOnCLick(HomeSideBtn,@BtnClicks); - InfoSideBtn := CreateSideBtn(SidePnl,0,96-SidePnl.Top,256,48,'Info','Information'); - SetSideBtnOnCLick(InfoSideBtn,@BtnClicks); - SysSideBtn := CreateSideBtn(SidePnl,0,144-SidePnl.Top,256,48,'System','System Check'); - SetSideBtnOnCLick(SysSideBtn,@BtnClicks); - OptionSideBtn:= CreateSideBtn(SidePnl,0,192-SidePnl.Top,256,48,'Settings','Configuration'); - SetSideBtnOnCLick(OptionSideBtn,@BtnClicks); - - NotesSideBtn := CreateSideBtn(SidePnl,0,48-SidePnl.Top,256,48,'Notes','Logs'); - ImgSetPosition(NotesSideBtn.Img,12,48-SidePnl.Top+4,36,36); - ImgSetPosition(NotesSideBtn.OnMouseImg,12,48-SidePnl.Top+4,36,36); - SideBtnVisibility(NotesSideBtn,False); - - InstallSideBtn := CreateSideBtn(SidePnl,0,48-SidePnl.Top,256,48,'Install','Installation'); - SideBtnClick(InstallSideBtn); - - FinishSideBtn := CreateSideBtn(SidePnl,0,48-SidePnl.Top,256,48,'Finish','Finalization'); - SideBtnClick(FinishSideBtn); - - AllSidebtnDisable; - SideBtnClick(HomeSideBtn); - - WelcomeUi.Base.Show; - InfoUi.Base.Hide; - ConfigUi.Base.Hide; - for g := 0 to 3 do - SysCheckPage[g].Base.Hide; - - Createlabel(WizardForm,true,false,16,532,480,24,10,{#Col},'{#Watermark}',taLeftJustify); - CreatePanel(WizardForm,0,WizardForm.Height-4,WizardForm.Width,4,{#Col}); - - ImgApplyChanges(WizardForm.Handle); -end; - -procedure CurPageChanged(CurPageID: Integer); -begin - MetroUiHide; - ReadyPage.Base.Hide; - InstallPage.Base.Hide; - FinishPage.Base.Hide; - SideBtnVisibility(NotesSideBtn,False); - SideBtnVisibility(InstallSideBtn,False); - SideBtnVisibility(FinishSideBtn,False); - case CurPageID of - wpWelcome: - begin - LangUpdate; - SideBtnVisibility(NotesSideBtn,False); - MetroUiShow; - SideBtnClick(HomeSideBtn); - DirEdtChange(nil); - end; - wpReady: - begin - LangUpdate; - SideBtnVisibility(NotesSideBtn,True); - SideBtnClick(NotesSideBtn); - ReadyPage.Base.Show; - end; - wpInstalling: - begin - LangUpdate; - WizardForm.CancelButton.Enabled := True; - InstallPage.Base.Show; - Time := 0; - TransferRate := 0; - Startedat := GetTickCount; - TimerID:= SetTimer(0, 0, 900 , WrapBGI(@BGIChanger,0)); - SideBtnVisibility(InstallSideBtn,True); - SideBtnClick(InstallSideBtn); - end; - wpFinished: - begin - LangUpdate; - FinishPage.Base.Show; - SideBtnVisibility(FinishSideBtn,True); - SideBtnClick(FinishSideBtn); - end; - end; - ImgApplyChanges(WizardForm.Handle); -end; - -procedure CurStepChanged(CurStep: TSetupStep); -#if defined( MC ) -var - ResultCode :Integer; -#endif -begin - #ifdef MC - if FileExists(ExpandConstant('{tmp}\Archive.ini')) and (CurStep = ssInstall) then - MC_Process; - #endif - #if defined( MC ) - if (CurStep=ssPostInstall) and ISDoneError then begin - Exec(ExpandConstant('{sys}\taskkill.exe'), ' /F /IM pZLib.exe', '', SW_HIDE, ewWaitUntilTerminated, ResultCode); - Exec(ExpandConstant('{sys}\taskkill.exe'), ' /F /IM fazip.exe', '', SW_HIDE, ewWaitUntilTerminated, ResultCode); - Exec2(ExpandConstant('{uninstallexe}'), '/VERYSILENT', false); - DelTree(ExpandConstant('{app}'), True, True, True); - RemoveDir(ExpandConstant('{app}')); - end; - if (CurStep=ssPostInstall) and not ISDoneError then - begin - #define public RedistsINI ".\Redist.ini" - #ifnexist RedistsINI - #error Ini for redists reading can't be find - #endif - #define public Section - #define public i - #define public Counter - #expr Counter = 0 - #define public RedistName - #define public RedistFileName - #define public RedistParameters - #sub AddRedist - #expr Counter = Counter + 1 - #expr Section = StringChange("RedistCounter", "Counter", str(Counter) ) - #expr RedistName = ReadIni(SourcePath + RedistsINI , Section , "Name","") - #expr RedistFileName = ReadIni(SourcePath + RedistsINI , Section , "FileName","") - #expr RedistParameters = Readini(SourcePath + RedistsINI , Section , "Parameters","") - #if RedistFileName != "" - if MsgBox('Do you want install: "{#RedistName}"?', mbError, MB_OKCANCEL) = IDOK then - Exec(ExpandConstant('{#RedistFileName}'),'{#RedistParameters}', '', SW_SHOWNORMAL, ewWaitUntilTerminated, ResultCode); - #endif - #endsub - #for { i = 1 ; ReadIni( SourcePath + RedistsINI, StringChange( "RedistCounter", "Counter", str(i)) , "FileName" , "" ) != "" ; i++ } AddRedist - end; - #endif -end; - -procedure DeinitializeSetup(); -begin - gdipShutdown; - KillTimer(0,TimerId); - #ifexist "Graphics\Music.mp3" - BASS_Stop(); - BASS_Free(); - #endif -end; \ No newline at end of file