Ru-Board.club
← Вернуться в раздел «Программы»

» Inno Setup (создание инсталяционных пакетов)

Автор: marineharrison
Дата сообщения: 13.01.2015 14:24
sergey3695

Я так понимаю на файлообменнике скрипт смены дисков? Если да, то он запускается в этом месте после распаковки первого архива:
if not SelectDisk('data-1.bin',1) then break;
Но процедуры SelectDisk нет в скрипте. Я пытался совместить скрипты, но не могу. При сборке выдает ошибку SelectDisk Unknown Identifier.

Попробовал удалить isskin из скрипта и заменить VclStylesinno. Вроде получилось как нужно, но приколы в окне смена диска остались, но уже другие. Теперь от винды показывает верхнюю панельку и внутреннюю рамку. Вот скрин:


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

[more]
#define NeedSize "14300000000"

#define NeedMem 800

[Setup]
AppName=Aliens: Colonial Marines
AppVerName=Aliens: Colonial Marines версии 1.0.210.751923
DefaultDirName={pf}\SEGA\Aliens Colonial Marines
DefaultGroupName=SEGA\Aliens Colonial Marines
AppPublisher=]^[@r!ne_I-I@rr!$0n™
AppVersion=1.0.210.751923
VersionInfoVersion=3.0
AlwaysShowDirOnReadyPage=yes
AlwaysShowGroupOnReadyPage=yes
OutputDir=.
OutputBaseFilename=setup
Compression=lzma2/ultra64
WizardImageFile=1.bmp
WizardSmallImageFile=2.bmp
SetupIconFile=install.ico

#ifdef NeedSize
ExtraDiskSpaceRequired={#NeedSize}
#endif

[Files]
Source: isSlideShow.dll; DestDir: {tmp}; Flags: dontcopy ignoreversion nocompression
Source: walls\BackImage.jpg; DestDir: "{tmp}"; Flags: dontcopy nocompression
Source: walls\01.jpg; DestDir: "{tmp}"; Flags: dontcopy nocompression
Source: walls\02.jpg; DestDir: "{tmp}"; Flags: dontcopy nocompression
Source: walls\03.jpg; DestDir: "{tmp}"; Flags: dontcopy nocompression
Source: walls\04.jpg; DestDir: "{tmp}"; Flags: dontcopy nocompression
Source: walls\05.jpg; DestDir: "{tmp}"; Flags: dontcopy nocompression

Source: Amakrits.vsf; DestDir: {tmp}; Flags: dontcopy nocompression
Source: VclStylesinno.dll; DestDir: {tmp}; Flags: dontcopy ignoreversion nocompression

Source: unarc.dll; DestDir: {tmp}; Flags: dontcopy ignoreversion nocompression
Source: ISDone.dll; DestDir: {tmp}; Flags: dontcopy ignoreversion nocompression

[Messages]
BeveledLabel=Aliens: Colonial Marines installer by ]^[@r!ne_I-I@rr!$0n

SelectDirDesc=В какую папку Вы хотите установить игру?
ReadyLabel1=Программа установки готова начать установку игры на Ваш компьютер.
InstallingLabel=Пожалуйста, подождите, пока игра установится на Ваш компьютер.

[CustomMessages]
russian.ExtractedFile=Извлекается файл:
russian.Extracted=Распаковка архивов...
russian.CancelButton=Отменa
russian.Error=Игра не установлена!
russian.ElapsedTime=Прошло:
russian.RemainingTime=Осталось времени:
russian.EstimatedTime=Всего:
russian.AllElapsedTime=Время установки:

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

[UninstallDelete]
Type: filesandordirs; Name: {app}

[Code]
const
PCFonFLY=true;
notPCFonFLY=false;
var
LabelPct1,LabelCurrFileName,LabelTime1,LabelTime2,LabelTime3: TLabel;
ISDoneProgressBar1: TNewProgressBar;

MyCancelButton: TButton;
ISDoneCancel:integer;
ISDoneError:boolean;
PCFVer:double;
PauseButton: TNewButton;

TimerID: LongWord;
CurrentPicture:integer;
PicList: TStringlist;
BackgroundForm: TForm;
PageNameLabel, PageDescriptionLabel: TLabel;


type
TCallback = function (OveralPct,CurrentPct: integer;CurrentFile,TimeStr1,TimeStr2,TimeStr3:PAnsiChar): longword;
TProc=procedure(HandleW, msg, idEvent, TimeSys: LongWord);



function WrapTimerProc(callback:TProc; paramcount:integer):longword; external 'wrapcallback@files:ISDone.dll stdcall';
function SetTimer(hWnd, nIDEvent, uElapse, lpTimerFunc: LongWord): LongWord; external 'SetTimer@user32.dll stdcall';
function KillTimer(hWnd, nIDEvent: LongWord): LongWord; external 'KillTimer@user32.dll stdcall';
function GetSystemMetrics(nIndex:Integer):Integer; external 'GetSystemMetrics@user32.dll stdcall';
procedure InitializeSlideShow(Hwnd:Thandle; l,t,w,h:integer;Animate:boolean; Stretch:integer); external 'InitializeSlideShow@files:isslideshow.dll stdcall';
procedure DeinitializeSlideShow; external 'DeinitializeSlideShow@files:isslideshow.dll stdcall';
procedure ShowImage(ipath:PAnsiChar; Effect:integer); external 'ShowImage@files:isslideshow.dll stdcall';


function WrapCallback(callback:TCallback; paramcount:integer):longword;external 'wrapcallback@files:ISDone.dll stdcall delayload';

function ISArcExtract(CurComponent:Cardinal; PctOfTotal:double; InName, OutPath, ExtractedPath: AnsiString; DeleteInFile:boolean; Password, CfgFile, WorkPath: AnsiString; ExtractPCF: boolean ):boolean; external 'ISArcExtract@files:ISDone.dll stdcall delayload';
function ShowChangeDiskWindow(Text, DefaultPath, SearchFile:AnsiString):boolean; external 'ShowChangeDiskWindow@files:ISDone.dll stdcall delayload';

function Exec2 (FileName, Param: PAnsiChar;Show:boolean):boolean; external 'Exec2@files:ISDone.dll stdcall delayload';
function ISFindFiles(CurComponent:Cardinal; FileMask:AnsiString; var ColFiles:integer):integer; external 'ISFindFiles@files:ISDone.dll stdcall delayload';
function ISPickFilename(FindHandle:integer; OutPath:AnsiString; var CurIndex:integer; DeleteInFile:boolean):boolean; external 'ISPickFilename@files:ISDone.dll stdcall delayload';
function ISGetName(TypeStr:integer):PAnsichar; external 'ISGetName@files:ISDone.dll stdcall delayload';
function ISFindFree(FindHandle:integer):boolean; external 'ISFindFree@files:ISDone.dll stdcall delayload';
function ISExec(CurComponent:Cardinal; PctOfTotal,SpecifiedProcessTime:double; ExeName,Parameters,TargetDir,OutputStr:AnsiString;Show:boolean):boolean; external 'ISExec@files:ISDone.dll stdcall delayload';

function FileSearchInit(RecursiveSubDir:boolean):boolean; external 'FileSearchInit@files:ISDone.dll stdcall delayload';
function ISDoneInit(RecordFileName:AnsiString; TimeType,Comp1,Comp2,Comp3:Cardinal; WinHandle, NeededMem:longint; callback:TCallback):boolean; external 'ISDoneInit@files:ISDone.dll stdcall';
function ISDoneStop:boolean; external 'ISDoneStop@files:ISDone.dll stdcall';
function ChangeLanguage(Language:AnsiString):boolean; external 'ChangeLanguage@files:ISDone.dll stdcall delayload';
function SuspendProc:boolean; external 'SuspendProc@files:ISDone.dll stdcall';
function ResumeProc:boolean; external 'ResumeProc@files:ISDone.dll stdcall';

function ProgressCallback(OveralPct,CurrentPct: integer;CurrentFile,TimeStr1,TimeStr2,TimeStr3:PAnsiChar): longword;
begin
if OveralPct<=1000 then ISDoneProgressBar1.Position := OveralPct;
LabelPct1.Caption := IntToStr(OveralPct div 10)+'.'+chr(48 + OveralPct mod 10)+'%';

LabelCurrFileName.Caption:=ExpandConstant('{cm:ExtractedFile} ')+MinimizePathName(CurrentFile, LabelCurrFileName.Font, LabelCurrFileName.Width-ScaleX(100));
LabelTime1.Caption:=ExpandConstant('{cm:ElapsedTime} ')+TimeStr2;
LabelTime2.Caption:=ExpandConstant('{cm:RemainingTime} ')+TimeStr1;
LabelTime3.Caption:=ExpandConstant('{cm:AllElapsedTime}')+TimeStr3;
Result := ISDoneCancel;
end;

procedure CancelButtonOnClick(Sender: TObject);
begin
SuspendProc;
if MsgBox(SetupMessage(msgExitSetupMessage), mbConfirmation, MB_YESNO) = IDYES then ISDoneCancel:=1;
ResumeProc;
end;

procedure BevelLabelClick(Sender: TObject);
var ErrorCode: Integer;
begin
ShellExec('open','http://vk.com/marine_harrison','', '', SW_SHOW, ewNoWait, ErrorCode)
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';



procedure HideControls;
begin
WizardForm.FileNamelabel.Hide;
ISDoneProgressBar1.Hide;
LabelPct1.Hide;
LabelCurrFileName.Hide;
LabelTime1.Hide;
LabelTime2.Hide;
MyCancelButton.Hide;
end;

procedure CreateControls;
var PBTop:integer;
begin
PBTop:=ScaleY(50);
ISDoneProgressBar1 := TNewProgressBar.Create(WizardForm);
with ISDoneProgressBar1 do begin
Parent := WizardForm.InstallingPage;
Height := WizardForm.ProgressGauge.Height;
Left := ScaleX(0);
Top := PBTop;
Width := ScaleX(365);
Max := 1000;
end;
LabelPct1 := TLabel.Create(WizardForm);
with LabelPct1 do begin
Parent := WizardForm.InstallingPage;
AutoSize := False;
Left := ISDoneProgressBar1.Width+ScaleX(5);
Top := ISDoneProgressBar1.Top + ScaleY(2);
Width := ScaleX(80);
end;
LabelCurrFileName := TLabel.Create(WizardForm);
with LabelCurrFileName do begin
Parent := WizardForm.InstallingPage;
AutoSize := False;
Width := ISDoneProgressBar1.Width+ScaleX(30);
Left := ScaleX(0);
Top := ScaleY(34);
end;
LabelTime1 := TLabel.Create(WizardForm);
with LabelTime1 do begin
Parent := WizardForm.InstallingPage;
AutoSize := False;
Width := ISDoneProgressBar1.Width div 2;
Left := ScaleX(0);
Top := PBTop + ScaleY(35);
end;
LabelTime2 := TLabel.Create(WizardForm);
with LabelTime2 do begin
Parent := WizardForm.InstallingPage;
AutoSize := False;
Width := LabelTime1.Width+ScaleX(40);
Left := ISDoneProgressBar1.Width div 2;
Top := LabelTime1.Top;
end;
LabelTime3 := TLabel.Create(WizardForm);
with LabelTime3 do begin
Parent := WizardForm.FinishedPage;
AutoSize := False;
Width := 300;
Left := 180;
Top := 200;
end;
MyCancelButton:=TButton.Create(WizardForm);
with MyCancelButton do begin
Parent:=WizardForm;
Width:=ScaleX(80);
Caption:=ExpandConstant('{cm:CancelButton}');
Left:=ScaleX(380);
Top := 60;
Width := ScaleX(75);
Height := ScaleY(25);
OnClick:=@CancelButtonOnClick;
end;
end;


function InitializeSetup(): Boolean;
begin
ExtractTemporaryFile('Amakrits.vsf');
LoadVCLStyle(ExpandConstant('{tmp}\Amakrits.vsf'));
Result := True;
end;



procedure InitializeWizard();
begin
BackgroundForm:= TForm.Create(nil);
BackgroundForm.BorderStyle:= bsNone;
BackgroundForm.Color:=clBlack;
BackgroundForm.SetBounds(0, 0, GetSystemMetrics(0), GetSystemMetrics(1))
BackgroundForm.Visible:=True;
BackgroundForm.enabled:= false;
PicList:=tstringlist.Create;
ExtractTemporaryFile('BackImage.jpg');
ExtractTemporaryFile('01.jpg');
ExtractTemporaryFile('02.jpg');
ExtractTemporaryFile('03.jpg');
ExtractTemporaryFile('04.jpg');
ExtractTemporaryFile('05.jpg');
piclist.add(ExpandConstant('{tmp}') + '\01.jpg');
piclist.add(ExpandConstant('{tmp}') + '\02.jpg');
piclist.add(ExpandConstant('{tmp}') + '\03.jpg');
piclist.add(ExpandConstant('{tmp}') + '\04.jpg');
piclist.add(ExpandConstant('{tmp}') + '\05.jpg');
BackgroundForm.show;
InitializeSlideShow(BackgroundForm.Handle, 0, 0, GetSystemMetrics(0), GetSystemMetrics(1), false, 1);
ShowImage(ExpandConstant('{tmp}') + '\BackImage.jpg', 1);

begin
WizardForm.WizardBitmapImage.Width:=497
WizardForm.WelcomeLabel1.Visible:=False
WizardForm.WelcomeLabel2.Visible:=False
WizardForm.WizardBitmapImage2.Width:=497
WizardForm.FinishedLabel.Visible:=False
WizardForm.FinishedHeadingLabel.Visible:=False

begin
WizardForm.WizardSmallBitmapImage.SetBounds(ScaleX(0), ScaleY(0), WizardForm.MainPanel.Width, WizardForm.MainPanel.Height);

begin
PageNameLabel:= TLabel.Create(WizardForm);
with PageNameLabel do begin
Left:= WizardForm.PageNameLabel.Left;
Top:= WizardForm.PageNameLabel.Top;
Width:= WizardForm.PageNameLabel.Width;
Height:= WizardForm.PageNameLabel.Height;
AutoSize:= False;
WordWrap:= True;
Font.Name:= WizardForm.PageNameLabel.Font.Name;
Font.Color:= clWhite;
Font.Style:= [fsBold];
Transparent:= True;
Parent:= WizardForm.MainPanel;
end;

PageDescriptionLabel:= TLabel.Create(WizardForm);
with PageDescriptionLabel do begin
Left:= WizardForm.PageDescriptionLabel.Left-ScaleX(12);
Top:= WizardForm.PageDescriptionLabel.Top;
Height:= WizardForm.PageDescriptionLabel.Height;
Width:= ScaleX(220);
AutoSize:= False;
WordWrap:= True;
Font.Name:= WizardForm.PageDescriptionLabel.Font.Name;
Font.Color:= clWhite;
Transparent:= True;
Parent:= WizardForm.MainPanel;
end;

with WizardForm do begin
PageNameLabel.Hide;
PageDescriptionLabel.Hide;

begin
with WizardForm do begin
with BeveledLabel do begin
OnClick:=@BevelLabelClick;
Font.Color:=clRed;
Enabled:=True;
Cursor:=crHand;
end;
end;
end;

end;
end;
end;
end;
end;


procedure OnTimer(HandleW, msg, idEvent, TimeSys: LongWord);
var
thePicture: integer;
delta: double;
begin
delta := WizardForm.ProgressGauge.Max / ( piclist.Count );
thePicture := round( WizardForm.ProgressGauge.Position / delta );
if( thePicture <> CurrentPicture ) then
begin
CurrentPicture := thePicture;
try
ShowImage(piclist.strings[CurrentPicture - 1], 1);
except
end;
end;
end;

procedure CurPageChanged1(CurPageID: Integer);

begin
PageNameLabel.Caption:= WizardForm.PageNameLabel.Caption;
PageDescriptionLabel.Caption:= WizardForm.PageDescriptionLabel.Caption;
begin
If CurPageID=wpInstalling then
begin

WizardForm.MainPanel.Visible:=False;
WizardForm.Bevel1.Visible:=False;
WizardForm.Width:=ScaleX(470);
WizardForm.Height:=ScaleY(150);

WizardForm.Position:=poScreenCenter;
WizardForm.Top:=ScaleY(BackgroundForm.Height-220);

WizardForm.InnerNotebook.Left:=ScaleX(10);
WizardForm.InnerNotebook.Top:=ScaleY(10);
WizardForm.InnerNotebook.Width:=ScaleX(370);
WizardForm.StatusLabel.Left:=ScaleX(0);
WizardForm.StatusLabel.Top:=ScaleY(0);
WizardForm.StatusLabel.Width:=WizardForm.InnerNotebook.Width;
WizardForm.FileNameLabel.Left:=ScaleX(0);
WizardForm.FileNameLabel.Top:=ScaleY(20);
WizardForm.FileNameLabel.Width:=WizardForm.InnerNotebook.Width;
WizardForm.ProgressGauge.Top:=ScaleY(40);
WizardForm.ProgressGauge.Width:=WizardForm.InnerNotebook.Width;
WizardForm.CancelButton.Left:=ScaleX(154);
WizardForm.CancelButton.Top:=ScaleY(80);
WizardForm.CancelButton.bringtofront;

TimerID:=SetTimer(0, 0, 200, WrapTimerProc(@OnTimer, 4));
end;
end;

if CurPageID=wpFinished then
begin
WizardForm.Visible:=False;
WizardForm.Width:=502;
WizardForm.Height:=392;
WizardForm.Left:=(BackgroundForm.Width-WizardForm.Width) div 2;
WizardForm.Top:=(BackgroundForm.Height-WizardForm.Height) div 2;
WizardForm.Visible:=True;
showimage(ExpandConstant('{tmp}') + '\BackImage.jpg', 1);
end;
end;

procedure CurStepChanged1(CurStep: TSetupStep);
begin
if CurStep = ssPostInstall then begin
end;
end;

Procedure CurPageChanged(CurPageID: Integer);
Begin
CurPageChanged1(CurPageID);
if (CurPageID = wpFinished) then
begin
if (CurPageID = wpFinished) and ISDoneError then
begin
LabelTime3.Hide;
WizardForm.Caption:= ExpandConstant('{cm:Error}');
WizardForm.FinishedLabel.Font.Color:= clRed;
WizardForm.FinishedLabel.Caption:= SetupMessage(msgSetupAborted) ;
end;
end;
end;

function CheckError:boolean;
begin
result:= not ISDoneError;
end;

procedure CurStepChanged(CurStep: TSetupStep);
var Comps1,Comps2,Comps3, TmpValue:cardinal;
FindHandle1,ColFiles1,CurIndex1,tmp:integer;
ExecError:boolean;
InFilePath,OutFilePath,OutFileName:PAnsiChar;
begin
CurStepChanged1(CurStep);
if CurStep = ssInstall then begin //Если необходимо, можно поменять на ssPostInstall
WizardForm.ProgressGauge.Hide;
WizardForm.CancelButton.Hide;
CreateControls;
WizardForm.StatusLabel.Caption:=ExpandConstant('{cm:Extracted}');
ISDoneCancel:=0;

// Распаковка всех необходимых файлов в папку {tmp}.

ExtractTemporaryFile('unarc.dll');

// Подготавливаем переменную, содержащую всю информацию о выделенных компонентах для ISDone.dll
// максимум 96 компонентов.
Comps1:=0; Comps2:=0; Comps3:=0;

ISDoneError:=true;
if ISDoneInit(ExpandConstant('{src}\records.inf'), $F777, Comps1,Comps2,Comps3, MainForm.Handle, {#NeedMem}, @ProgressCallback) then begin
repeat

if not FileSearchInit(false) then break;

if not ISArcExtract ( 0, 50, ExpandConstant('{src}\setup-1.arc'), ExpandConstant('{app}'), '', false, '', '', '', notPCFonFLY) then break;

if not ShowChangeDiskWindow('Пожалуйста, вставьте диск 2 и дождитесь его инициализации.', ExpandConstant('{src}'),'setup-2.arc') then break;

if not ISArcExtract ( 0, 50, ExpandConstant('{src}\setup-2.arc'), ExpandConstant('{app}'), '', false, '', '', '', notPCFonFLY) then break;

ISDoneError:=false;
until true;
ISDoneStop;
end;
HideControls;
WizardForm.CancelButton.Visible:=true;
WizardForm.CancelButton.Enabled:=false;
end;
if (CurStep=ssPostInstall) and ISDoneError then begin
Exec2(ExpandConstant('{uninstallexe}'), '/VERYSILENT', false);
end;
end;

procedure DeinitializeSetup();
begin
DeinitializeSlideShow;
KillTimer(0, TimerID);
UnLoadVCLStyles;
end;
[/more]

Прошу поправить мой скрипт, я не могу разобраться.
Автор: innonewbie
Дата сообщения: 14.01.2015 10:28
Всех приветствую! Может кто подсказать код, чтоб на странице выбора папки установки при выборе в качестве места установки CD-ROM кнопка далее становилась неактивной.
Автор: nik1967
Дата сообщения: 14.01.2015 21:07
innonewbie, [more=примерно так]
Код: [Setup]
AppName=Game
AppVersion=Game_v1
DefaultDirName=D:\Games
OutputDir=.

[Code]
#define A = (Defined UNICODE) ? "W" : "A"
const
DRIVE_CDROM = 5;

function GetDriveType(nDrive: string): Longint; external 'GetDriveType{#A}@kernel32.dll stdcall';

function CDROM(Drive: String): Boolean;
begin
Result:= GetDriveType(Drive) = 5;
end;

procedure GetDrive(Sender: TObject);
var
Path: String;
begin
    Path:= ExtractFileDrive(WizardForm.DirEdit.Text);
    WizardForm.NextButton.Enabled:= not CDROM(Path);
end;

procedure CurPageChanged(CurPageID: Integer);
begin
    case CurPageID of
        wpSelectDir:
        begin
            GetDrive(nil);
            WizardForm.DirEdit.OnChange:= @GetDrive;
        end;
    end;
end;
Автор: sergey3695
Дата сообщения: 14.01.2015 22:02
marineharrison #include "NewDiskForm.iss" не пробывал?
Не разберешься, тогда с файлами в лс кидай. файлы подбирать не собираюсь.
Автор: marineharrison
Дата сообщения: 14.01.2015 22:43
sergey3695

А где взять этот скрипт. Я извиняюсь, но меня тут давно не было. Я поиском поищу, но если не сложно где лежит этот скрипт.
Автор: Habib2302
Дата сообщения: 15.01.2015 08:42
Доброе время суток. Помогите исправить

[more]
Код: ; Скрипт создан через Мастер Inno Setup Script.
; ИСПОЛЬЗУЙТЕ ДОКУМЕНТАЦИЮ ДЛЯ ПОДРОБНОСТЕЙ ИСПОЛЬЗОВАНИЯ INNO SETUP!

#define MyAppName "BlueScreenView"
#define MyAppVersion "1.52"
#define MyAppURL "https://href.li/?http://www.nirsoft.net/utils/blue_screen_view.html"
#define MyAppExeName "BlueScreenView.exe"
#include "WinTB.iss"
#include "botva2.iss"
#include "BrowseForm.iss"

[Setup]
; Примечание: Значение AppId идентифицирует это приложение.
; Не используйте одно и тоже значение в разных установках.
; (Для генерации значения GUID, нажмите Инструменты | Генерация GUID.)
AppName={#MyAppName}
AppVersion={#MyAppVersion}
;AppVerName={#MyAppName} {#MyAppVersion}
AppPublisherURL={#MyAppURL}
AppSupportURL={#MyAppURL}
AppUpdatesURL={#MyAppURL}
DefaultDirName={pf}\{#MyAppName}
DefaultGroupName={#MyAppName}
AllowNoIcons=true
OutputBaseFilename={#MyAppName} {#MyAppVersion} RePack (& Portable) by Xabib
SetupIconFile=ico.ico
Compression=lzma/Ultra64
SolidCompression=true
InternalCompressLevel=Ultra64
DiskSpanning=false
DiskSliceSize=736000000
ShowLanguageDialog=yes
SlicesPerDisk=4
UninstallDisplayIcon={app}\ico.ico
RawDataResource=Botva:botva2.dll|b2p:b2p.dll|Logo:logo.png|bPic:bPic.png|LiPic:LiPic.png|aPic:aPic.png
AppModifyPath={app}
VersionInfoProductName={#MyAppName}
DirExistsWarning=no
DisableReadyPage=true
AppID={#MyAppName}
VersionInfoDescription={#MyAppName} RePack by Xabib
AppCopyright=Xabib © 2014
VersionInfoVersion={#MyAppVersion}
VersionInfoProductVersion={#MyAppVersion}
VersionInfoCopyright=Xabib © 2014
DisableFinishedPage=false
UninstallDisplayName={#MyAppName}
ComponentsListTVStyle=true
ShowComponentSizes=false
Uninstallable=false
DisableProgramGroupPage=yes
CreateUninstallRegKey=false
InfoBeforeFile=Info.rtf
AlwaysRestart=false

[Languages]
Name: "Russian"; MessagesFile: "Russian.isl"

[Types]
Name: full; Description: Полная установка; Flags: iscustom

[Tasks]
Name: ic; Description: {cm:AdditionalIcons}; Components: BSOD\I;
Name: ic\desktop; Description: {cm:CreateDesktopIcon}; Components: BSOD\I;
Name: ic\group; Description: {cm:CreateGroupeIcon}; Components: BSOD\I;
Name: ic\quicklaunch; Description: {cm:CreateQuickLaunchIcon}; OnlyBelowVersion: 0,6.1; Components: BSOD\I; Flags: unchecked
Name: ic\taskbar; Description: {cm:TaskBarIcon}; MinVersion: 0.0,6.1.7600; Components: BSOD\I; Flags: unchecked
Name: ic\startmenu; Description: {cm:StartMenuIcon}; MinVersion: 0.0,6.1.7600; Components: BSOD\I; Flags: unchecked

[Components]
Name: BSOD; Description: {#MyAppName}; Flags: fixed disablenouninstallwarning; Types: full;
Name: BSOD\I; Description: Установить {#MyAppName}; Flags: exclusive disablenouninstallwarning
Name: BSOD\P; Description: Распаковать {#MyAppName}; Flags: exclusive disablenouninstallwarning
Name: L; Description: {cm:InterfaceLang}; Flags: fixed disablenouninstallwarning; Types: full;
Name: L\R; Description: Русский; Flags: exclusive disablenouninstallwarning;
Name: L\E; Description: Английский; Flags: exclusive disablenouninstallwarning;
Name: L\U; Description: Украинский; Flags: exclusive disablenouninstallwarning;

[Files]
;Файлы распаковываемые в папку с игрой. Необходимы для деинсталлятора;
Source: WinTB.dll; Flags: dontcopy;
Source: ico.ico; DestDir: {app}; Flags: ignoreversion
Source: ru.ini; DestDir: {app}; Flags: ignoreversion; Components: L\R; DestName: BlueScreenView_lng.ini;
Source: ua.ini; DestDir: {app}; Flags: ignoreversion; Components: L\U; DestName: BlueScreenView_lng.ini;
; Примечание: Не используйте "Flags: ignoreversion" для системных файлов
Source: {app}\*; DestDir: {app}; Flags: ignoreversion recursesubdirs createallsubdirs;

[Icons]
Name: {group}\{#MyAppName}; Filename: {app}\{#MyAppExeName}; Components: BSOD\I; Tasks: ic\group; IconFilename: {app}\ico.ico;
Name: {group}\{cm:UninstallProgram,{#MyAppName}}; Filename: {uninstallexe}; Components: BSOD\I; Tasks: ic\group; IconFilename: {app}\ico.ico;
Name: {group}\{cm:ProgramOnTheWeb,{#MyAppName}}; Filename: {#MyAppURL}; Components: BSOD\I; Tasks: ic\group;
Name: {commondesktop}\{#MyAppName}; Filename: {app}\{#MyAppExeName}; Components: BSOD\I; Tasks: ic\desktop; IconFilename: {app}\ico.ico;
Name: {userappdata}\Microsoft\Internet Explorer\Quick Launch\{#MyAppName}; Filename: {app}\{#MyAppExeName}; Components: BSOD\I; Tasks: ic\quicklaunch; IconFilename: {app}\ico.ico;

[Run]
Filename: {app}\{#MyAppExeName}; Description: "{cm:LaunchProgram,{#StringChange(MyAppName, '&', '&&')}}"; Flags: nowait skipifsilent PostInstall Unchecked;

[Code]
#ifdef UNICODE
#define A "W"
#else
#define A "A"
#endif

#define A = (Defined UNICODE) ? "W" : "A"

const
///////////////////////////////////Относится к лого и изображениям мастера
RT_RCDATA = 10;
LOAD_LIBRARY_AS_DATAFILE = $2;

var
///////////////////////////////////Лого и изображения
lPLogo, bPicHandle, bPicHandle2, lPicHandle: THandle;
BtnImage: TBitmapImage;
///////////////////////////////////////////
iInitialize: Boolean;

///////////////////////////////////Ресурсы(относится к лого и изображениям мастера)
function GetFromRes(const ResName, SaveFileName: String): Boolean;
var
lResStream: TResourceStream;
begin
lResStream := TResourceStream.Create(HInstance, ResName, RT_RCDATA);
try
lResStream.SaveToFile(AddBackslash(ExpandConstant('{tmp}')) + SaveFileName);
finally
lResStream.Free;
Result := FileExists(AddBackslash(ExpandConstant('{tmp}')) + SaveFileName);
end;
end;

function OnShouldSkipPage(Sender: TWizardPage): Boolean;
begin
if WizardForm.ComponentsList.Items.Count > 0 then WizardForm.Tag:= 1; // отображаются страницы выбора папки и компонентов
end;

procedure InitializeWizard;
begin
PageFromID(wpSelectDir).OnShouldSkipPage:= @OnShouldSkipPage
with WizardForm do
begin

///////////////////////////////////Логотип и изображения мастера
iInitialize := True;
if GetFromRes('_IS_BOTVA', 'botva2.dll') and GetFromRes('_IS_B2P', 'b2p.dll') and GetFromRes('_IS_LOGO', 'logo.png') and GetFromRes('_IS_BPIC', 'bPic.png') and GetFromRes('_IS_LIPIC', 'LiPic.png') and GetFromRes('_IS_APIC', 'aPic.png') then
begin
///////////////////////////////////Изображения
bPicHandle := ImgLoad(WelcomePage.Handle, ExpandConstant('{tmp}\aPic.png'), WizardBitmapImage.Left, WizardBitmapImage.Top, WizardBitmapImage.Width, WizardBitmapImage.Height, True, True);
WizardBitmapImage.Hide;
ImgSetVisibility(bPicHandle, True);
ImgApplyChanges(WelcomePage.Handle);

bPicHandle := ImgLoad(FinishedPage.Handle, ExpandConstant('{tmp}\bPic.png'), WizardBitmapImage2.Left, WizardBitmapImage2.Top, WizardBitmapImage2.Width, WizardBitmapImage2.Height, True, True);
WizardBitmapImage2.Hide;
ImgSetVisibility(bPicHandle, True);
ImgApplyChanges(FinishedPage.Handle);

lPicHandle := ImgLoad(MainPanel.Handle, ExpandConstant('{tmp}\LiPic.png'), WizardSmallBitmapImage.Left, WizardSmallBitmapImage.Top, WizardSmallBitmapImage.Width, WizardSmallBitmapImage.Height, True, True);
WizardSmallBitmapImage.Hide;
DiskSpaceLabel.Hide;
ComponentsDiskSpaceLabel.Hide;
ImgSetVisibility(lPicHandle, True);
ImgApplyChanges(MainPanel.Handle);

///////////////////////////////////Логотип
lPLogo:= ImgLoad(WizardForm.Handle, ExpandConstant('{tmp}\logo.png'), ScaleX(20), ScaleY(318), ScaleX(124), ScaleY(40), True, True);
ImgApplyChanges(WizardForm.Handle);
end;

///////////////////////////////////WinTB
ExtractTemporaryFile('WinTB.dll');
TaskBarV10(MainForm.Handle, WizardForm.Handle, false, false, 0, 0, _m_);
//////////////////////////////////////

with TLabel.Create(WizardForm) do
begin
Parent:=WizardForm;
AutoSize:=False;
Transparent:= true;
SetBounds(ScaleX(20), ScaleY(318), ScaleX(124), ScaleY(40));
end;
DirBrowseButton.OnClick:= @BrowseClick;
end;
end;

function LoadLibraryEx(lpFileName: String; hFile: THandle; dwFlags: DWORD): THandle; external 'LoadLibraryEx{#A}@kernel32.dll stdcall';
function LoadString(hInstance: THandle; uID: SmallInt; var lpBuffer: Char; nBufferMax: Integer): Integer; external 'LoadString{#A}@user32.dll stdcall';
function SHGetNewLinkInfo(pszLinkTo, pszDir: String; var pszName: Char; var pfMustCopy: Longint; uFlags: UINT): BOOL; external 'SHGetNewLinkInfo{#A}@shell32.dll stdcall';

function PinToTaskbar(const szFilename: String; IsPin: Boolean): Boolean;
// szFilename : full path to executable file
// IsPin......: False - unpin from TaskBar, True - pin to TaskBar
var
hInst: THandle;
buf: array [0..255] of Char;
i, res: Integer;
strLnk, strVerb: String;
objShell, colVerbs: Variant;
begin
Result := False;
if (GetWindowsVersion < $06010000) or not FileExists(szFilename) then Exit; { below Windows 7 }

{ String resources }
if IsPin then
begin
if SHGetNewLinkInfo(szFilename, ExpandConstant('{tmp}'), buf[0], res, 0) then
begin
while buf[Length(strLnk)] <> #0 do Insert(buf[Length(strLnk)], strLnk, Length(strLnk)+1);
if FileExists(ExpandConstant('{userappdata}\Microsoft\Internet Explorer\Quick Launch\User Pinned\TaskBar\') + ExtractFileName(strLnk)) then Exit;
end;
res := 5386; { Pin to Tas&kbar }
end else res := 5387; { Unpin from Tas&kbar }

{ Load string resource }
hInst := LoadLibraryEx(ExpandConstant('{sys}\shell32.dll'), 0, LOAD_LIBRARY_AS_DATAFILE);
if hInst <> 0 then
try
for i := 0 to LoadString(hInst, res, buf[0], 255)-1 do Insert(buf[i], strVerb, i+1);
try
objShell := CreateOleObject('Shell.Application');
colVerbs := objShell.Namespace(ExtractFileDir(szFilename)).ParseName(ExtractFileName(szFilename)).Verbs;
for i := 1 to colVerbs.Count do if CompareText(colVerbs.Item[i].Name, strVerb) = 0 then
begin
colVerbs.Item[i].DoIt;
Result := True;
Break;
end;
except
Exit;
end;
finally
FreeDLL(hInst);
end;
end;

/////////////////////////////////////////////////////////////////////////
function PinToStartMenu(const szFilename: String; IsPin: Boolean): Boolean;
// szFilename : full path to exe- or lnk-file
// IsPin......: False - unpin from StartMenu, True - pin to StartMenu
var
hInst: THandle;
buf: array [0..259] of Char;
i, res: Integer;
strLnk, strVerb: String;
objShell, colVerbs: Variant;
begin
Result := False;
if not FileExists(szFilename) then Exit;
if GetWindowsVersion > $06020000 then Exit; { Window 8 and above }

{ Windows 7 }
if (GetWindowsVersion >= $06010000) and boolean(SHGetNewLinkInfo(szFilename, ExpandConstant('{tmp}'), buf[0], res, 0)) then
begin
while buf[Length(strLnk)] <> #0 do Insert(buf[Length(strLnk)], strLnk, Length(strLnk)+1);
if FileExists(ExpandConstant('{userappdata}\Microsoft\Internet Explorer\Quick Launch\User Pinned\StartMenu\') + ExtractFileName(strLnk)) then Exit;
end;

{ String resources }
if IsPin then
res := 5381 { Pin to Start Men&u }
else
res := 5382; { Unpin from Start Men&u }

{ Load string resource }
hInst := LoadLibraryEx(ExpandConstant('{sys}\shell32.dll'), 0, LOAD_LIBRARY_AS_DATAFILE);
if hInst <> 0 then
try
for i := 0 to LoadString(hInst, res, buf[0], 255)-1 do Insert(buf[i], strVerb, i+1);
try
objShell := CreateOleObject('Shell.Application');

{ below Windows 7 }
if GetWindowsVersion < $06010000 then
begin
objShell.Namespace(ExtractFileDir(szFilename)).ParseName(ExtractFileName(szFilename)).InvokeVerb(strVerb);
Result := True;
end;

{ Windows 7 }
if GetWindowsVersion >= $06010000 then
begin
colVerbs := objShell.Namespace(ExtractFileDir(szFilename)).ParseName(ExtractFileName(szFilename)).Verbs;
for i := 1 to colVerbs.Count do if CompareText(colVerbs.Item[i].Name, strVerb) = 0 then
begin
colVerbs.Item[i].DoIt;
Result := True;
Break;
end;
end;
except
Exit;
end;
finally
FreeDLL(hInst);
end;
end;

Procedure CurPageChanged(CurPageID: Integer);
Begin
Case CurPageID of
wpFinished:
begin
if IsTaskSelected('ic\taskbar') then
PinToTaskbar(ExpandConstant('{app}\{#MyAppExeName}'), True);
if IsTaskSelected('ic\startmenu') then
PinToStartMenu(ExpandConstant('{app}\{#MyAppExeName}'), True);
end;
wpSelectTasks:
if IsComponentSelected('BSOD\I') then
begin
WizardForm.NextButton.Caption:= SetupMessage(msgButtonInstall);
end;
wpSelectDir: if WizardForm.Tag = 1 then
begin
WizardForm.SelectDirPage.Notebook.ActivePage:= WizardForm.SelectComponentsPage;
WizardForm.PageNameLabel.Caption:= SetupMessage(msgWizardSelectComponents);
WizardForm.Hint:= WizardForm.PageDescriptionLabel.Caption; // запомнить SetupMessage(msgSelectDirDesc)
WizardForm.PageDescriptionLabel.Caption:= SetupMessage(msgSelectComponentsDesc);
end;
wpSelectComponents: if WizardForm.Tag = 1 then
begin
WizardForm.SelectComponentsPage.Notebook.ActivePage:= WizardForm.SelectDirPage;
WizardForm.DiskSpaceLabel.Caption:= WizardForm.ComponentsDiskSpaceLabel.Caption;
WizardForm.PageNameLabel.Caption:= SetupMessage(msgWizardSelectDir);
WizardForm.PageDescriptionLabel.Caption:= WizardForm.Hint; // иначе вместо названия программы [name]
if not WizardSilent then
if IsComponentSelected('BSOD\I') then
begin
WizardForm.DirEdit.Text :=(ExpandConstant('{#SetupSetting("DefaultDirName")}'))
end else
if not WizardSilent then
if IsComponentSelected('BSOD\P') then
begin
WizardForm.DirEdit.Text := AddBackslash(ExpandConstant('{src}')) + '{#MyAppName} Portable'
WizardForm.NextButton.Caption:= SetupMessage(msgButtonInstall);
end;
end;
end;
end;

procedure DeinitializeSetup();
begin
if iInitialize then
begin
gdipShutdown;
TaskBarDestroy;
end;
end;

procedure InitializeUninstallProgressForm;
begin
with UninstallProgressForm do
begin
///////////////////////////////////Логотип и изображения мастера
if GetFromRes('_IS_BOTVA', 'botva2.dll') and GetFromRes('_IS_B2P', 'b2p.dll') and GetFromRes('_IS_LOGO', 'logo.png') and GetFromRes('_IS_LIPIC', 'LIPic.png') then
begin
///////////////////////////////////Изображения
lPicHandle := ImgLoad(MainPanel.Handle, ExpandConstant('{tmp}\LiPic.png'), WizardSmallBitmapImage.Left, WizardSmallBitmapImage.Top, WizardSmallBitmapImage.Width, WizardSmallBitmapImage.Height, True, True);
WizardSmallBitmapImage.Hide;
ImgSetVisibility(lPicHandle, True);
ImgApplyChanges(MainPanel.Handle);

///////////////////////////////////Логотип
lPLogo:= ImgLoad(UninstallProgressForm.Handle, ExpandConstant('{tmp}\logo.png'), ScaleX(20), ScaleY(318), ScaleX(124), ScaleY(40), True, True);
ImgApplyChanges(UninstallProgressForm.Handle);
end;

with TLabel.Create(nil) do
begin
Parent:=UninstallProgressForm;
AutoSize:=False;
Transparent:= true;
SetBounds(ScaleX(20), ScaleY(318), ScaleX(124), ScaleY(40));
end;
end;
end;

procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
var
instPath: string;
begin
case CurUninstallStep of
usUninstall:
begin
PinToTaskbar(ExpandConstant('{app}\{#MyAppExeName}'), False);
PinToStartMenu(ExpandConstant('{app}\{#MyAppExeName}'), False);
end;
end;
end;

procedure DeinitializeUninstall();
begin
if iInitialize then gdipShutdown;
end;

[UninstallDelete]
Name: {app}; Type: filesandordirs;
Автор: innonewbie
Дата сообщения: 15.01.2015 09:48
nik1967, спасибо большое, то что нужно.
Автор: LA2020
Дата сообщения: 15.01.2015 11:53
Делаю инсталлятор, все вроде бы ок. Но есть одна загвоздка - нужно сделать во время инсталляции окно с изменением распаковываемых файлов.

т.е. Пользователь устанавливая программу, помимо выбора директории, заполняет поля - IP, Port и пр. и эти данные вносятся в 2 ини-шника в подпапках. Не подскажете пример как можно реализовать?
Автор: sergey3695
Дата сообщения: 15.01.2015 17:20
marineharrison

Цитата:
http://rghost.ru/60294438
Использование

Автор: dodakaedr
Дата сообщения: 15.01.2015 18:13
LA2020
Если правильно понял [more]
Код: ;Script by Dodakaedr

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

[INI]
Filename: "{app}\config.ini"; Section: "IP"; Key: "Level"; String: "{code:SetInfo|IP}";
Filename: "{app}\config2.ini"; Section: "PORT"; Key: "Level"; String: "{code:SetInfo|PORT}";

[Code]
var
ISCustomPage1: TWizardPage;
Label1: TLabel;
Label2: TLabel;
NewEdit1: TNewEdit;
NewEdit2: TNewEdit;

function SetInfo( const Value: String ): String;
begin
case Value of
'IP': Result := NewEdit1.Text;
'PORT': Result := NewEdit2.Text;
end;
end;

procedure RedesignWizardForm;
begin

ISCustomPage1 := CreateCustomPage(wpUserInfo, 'ISCustomPage1_Caption', 'ISCustomPage1_Description');

{ Label1 }
Label1 := TLabel.Create(WizardForm);
with Label1 do
begin
Parent := ISCustomPage1.Surface;
Caption := 'IP:';
Font.Color := clRed;
Font.Height := -13;
Font.Name := 'Shruti';
Font.Style := [fsBold];
ParentFont := False;
Left := ScaleX(24);
Top := ScaleY(16);
Width := ScaleX(15);
Height := ScaleY(21);
end;

{ Label2 }
Label2 := TLabel.Create(WizardForm);
with Label2 do
begin
Parent := ISCustomPage1.Surface;
Caption := 'PORT:';
Font.Color := clRed;
Font.Height := -13;
Font.Name := 'Shruti';
Font.Style := [fsBold];
ParentFont := False;
Left := ScaleX(24);
Top := ScaleY(64);
Width := ScaleX(36);
Height := ScaleY(21);
end;

{ NewEdit1 }
NewEdit1 := TNewEdit.Create(WizardForm);
with NewEdit1 do
begin
Parent := ISCustomPage1.Surface;
Left := ScaleX(24);
Top := ScaleY(32);
Width := ScaleX(313);
Height := ScaleY(21);
end;

{ NewEdit2 }
NewEdit2 := TNewEdit.Create(WizardForm);
with NewEdit2 do
begin
Parent := ISCustomPage1.Surface;
Left := ScaleX(24);
Top := ScaleY(80);
Width := ScaleX(313);
Height := ScaleY(21);
end;
end;

procedure InitializeWizard();
begin
RedesignWizardForm;
end;
Автор: marineharrison
Дата сообщения: 15.01.2015 18:15
sergey3695
вот об этом я и написал на предыдущей странице. процедуры selectdisc нет. в личку отправил все.
Автор: Habib2302
Дата сообщения: 16.01.2015 12:08
Всем привет. У меня есть код для изменения пути установки в зависимости от компонента и не работает команда /DIR
[more]
Код: Procedure CurPageChanged(CurPageID: Integer);
Begin
Case CurPageID of
wpFinished:
begin
if IsTaskSelected('ic\taskbar') then
PinToTaskbar(ExpandConstant('{app}\{#MyAppExeName}'), True);
if IsTaskSelected('ic\startmenu') then
PinToStartMenu(ExpandConstant('{app}\{#MyAppExeName}'), True);
end;
wpSelectTasks:
if IsComponentSelected('BSOD\I') then
begin
WizardForm.NextButton.Caption:= SetupMessage(msgButtonInstall);
end;
wpSelectDir: if WizardForm.Tag = 1 then

begin
WizardForm.SelectDirPage.Notebook.ActivePage:= WizardForm.SelectComponentsPage;
WizardForm.PageNameLabel.Caption:= SetupMessage(msgWizardSelectComponents);
WizardForm.Hint:= WizardForm.PageDescriptionLabel.Caption; // запомнить SetupMessage(msgSelectDirDesc)
WizardForm.PageDescriptionLabel.Caption:= SetupMessage(msgSelectComponentsDesc);
end;
wpSelectComponents: if WizardForm.Tag = 1 then
begin
WizardForm.SelectComponentsPage.Notebook.ActivePage:= WizardForm.SelectDirPage;
WizardForm.DiskSpaceLabel.Caption:= WizardForm.ComponentsDiskSpaceLabel.Caption;
WizardForm.PageNameLabel.Caption:= SetupMessage(msgWizardSelectDir);
WizardForm.PageDescriptionLabel.Caption:= WizardForm.Hint; // иначе вместо названия программы [name]
if IsComponentSelected('BSOD\I') then
begin
WizardForm.DirEdit.Text :=(ExpandConstant('{#SetupSetting("DefaultDirName")}'))
end else
if IsComponentSelected('BSOD\P') then
begin
WizardForm.DirEdit.Text := AddBackslash(ExpandConstant('{src}')) + '{#MyAppName} Portable'
WizardForm.NextButton.Caption:= SetupMessage(msgButtonInstall);
end;
end;
end;
end;
Автор: Re0g
Дата сообщения: 21.01.2015 18:24
Здравствуйте. Прошу помочь.
Есть вот такой вот код для замещения прогресс-бара картинкой.
Но фон у прогресс-бара по умолчанию - белый.
Подскажите, что добавить в код, что бы замостить фон своей картинкой?

[more=Код]
Код:

[Setup]
AppName=zz
DefaultGroupName=group
AppVerName=zzz
DefaultDirName={pf}\test
SolidCompression=false
InternalCompressLevel=none
Compression=none

; --== Custom Progress Bar ==-- Created by SotM (c) June 2009
;
; Картинка размером 1x19. Хотя картинка может быть любого размера, но будет выглядеть отвратно при растягивании.
; Высота может чуть-чуть отличаться, т.е. если она будет высотой 17-22, то это не очень принципиально.
#define PB_ImageFile "progress1.bmp"

[Files]
Source: compiler:InnoCallback.dll; Flags: dontcopy ignoreversion
Source: {#PB_ImageFile}; DestDir: "{tmp}"; Flags: recursesubdirs ignoreversion
; Путь к нашим инсталяционным файлам
Source: ..\my_install\files1\*; DestDir: "{app}"; Flags: recursesubdirs ignoreversion

[Code]
type
TProc = procedure(HandleW, msg, idEvent, TimeSys: LongWord);

var
TimerID: LongWord;
intOldCurrWidth : Integer;
ProgressBar_BitmapImage: TBitmapImage;
ProgressBar_Edit : TEdit;
ProgressBar_ImageHeight : integer;

// Функции для работы с таймером
function WrapTimerProc(callback:TProc; paramcount:integer):longword; external 'wrapcallback@files:innocallback.dll stdcall';
function SetTimer(hWnd: LongWord; nIDEvent, uElapse: LongWord; lpTimerFunc: LongWord): LongWord; external 'SetTimer@user32.dll stdcall';
function KillTimer(hWnd: LongWord; nIDEvent: LongWord): LongWord; external 'KillTimer@user32.dll stdcall';

// Обработчик нажатия кнопки Отмена
procedure CancelButtonClick(CurPageID: Integer; var Cancel, Confirm: Boolean);
begin
if CurPageID = wpInstalling then // Просто спрячем наш Прогресс Бар
ProgressBar_Edit.Hide;
end;

// Функция вызываемая по таймеру
procedure OnTimer(HandleW, msg, idEvent, TimeSys: LongWord);
var
CurrWidth : single;
begin
// Используем текущее состояние стандартного Прогресс Бара (ПБ)
with WizardForm.ProgressGauge do
begin
CurrWidth := ( Position * Width ) / Max; // Вычисляем какой ширины должен быть наш ПБ
if intOldCurrWidth <> Round( CurrWidth ) then // Если ширина пока что такая же, то не будем пока что рисовать, чтобы избежать лишних обновлений формы
begin
intOldCurrWidth := Round( CurrWidth );
// Теперича "рисуем" наш ПБ
ProgressBar_BitmapImage.SetBounds( 0, 0, intOldCurrWidth, ProgressBar_ImageHeight );
ProgressBar_BitmapImage.Show(); // Показываем его во всей красе
end;
end;
end;

procedure CurPageChanged(CurPageID: Integer);
var
pfunc: LongWord;
begin
if CurPageID = wpInstalling then
begin
// Устанавливаем таймер
pfunc := WrapTimerProc( @OnTimer, 4 );
TimerID := SetTimer( 0, 0, 100, pfunc );
intOldCurrWidth := 0;
end;

// Убираем таймер, когда находимся на последней странице.
if CurPageID = wpFinished then
KillTimer( 0, TimerID );
end;

Procedure InitializeWizard;
begin
// Создаем наш Edit, чтобы у нашего ПБ была более-менее нормальная рамка.
ProgressBar_Edit := TEdit.Create( WizardForm );
with ProgressBar_Edit do
begin
// Создаем его на месте стандартного ПБ
Left := WizardForm.ProgressGauge.Left;
Top := WizardForm.ProgressGauge.Top;
Width := WizardForm.ProgressGauge.Width;
Height := WizardForm.ProgressGauge.Height;
Enabled := False;
ReadOnly := True;
// Фоновый цвет делаем точно такой же как у формы.
Color := WizardForm.Color;
Parent := WizardForm.InstallingPage;
end;

// Распаковываем картинку для нашего ПБ
ExtractTemporaryFile( '{#PB_ImageFile}' );

ProgressBar_BitmapImage := TBitmapImage.Create( WizardForm );
with ProgressBar_BitmapImage do
begin
// Загружаем картинку
Bitmap.LoadFromFile( ExpandConstant( '{tmp}\' ) + '{#PB_ImageFile}' );
Parent := ProgressBar_Edit;
Stretch := True; // Он должен растягиваться
Hide; // Прячем его до поры до времени
end;

// Получаем высоту для картинки
ProgressBar_ImageHeight := ProgressBar_Edit.Height - 2;
// Прячем стандартный ПБ
WizardForm.ProgressGauge.Hide;
end;

procedure DeinitializeSetup();
begin
// Убираем таймер
KillTimer( 0, TimerID );
end;

Автор: sergey3695
Дата сообщения: 21.01.2015 20:48
Re0g botva2 (в шапке. доп. библиотеки. там примеры. найдешь) или создай панель, изображение туды и этот код без эдита (родитель панель). дерзай
Автор: Tima182
Дата сообщения: 22.01.2015 16:29
Привет. Как сделать полное удаление всей папки игры куда она устанавливается?
И как добавить создание ярлыка, что бы можно было галочку поставить и рядом было имя файла?
Автор: Re0g
Дата сообщения: 22.01.2015 23:05
sergey3695, спасибо за наводку. Разобрался.
Автор: AngelNet
Дата сообщения: 22.01.2015 23:34
Tima182
насчёт полного удаления вот:

Цитата:
[UninstallDelete]
// удаляем все файлы и рабочую папку программы при деинсталляции.
Type: "filesandordirs"; Name: "{app}"


насчёт ярлыка к сожалению не могу подсказать(
не совсем понимаю что именно вы хотите сделать...
Автор: Tima182
Дата сообщения: 23.01.2015 09:34
Удаление куда добавить. под каким параметром скрипта? Что бы удаляло все при удалении.
Знаете вовремя установки есть создать ярлык? там 1 галочка, а создаются 2 ярлыка, можно как нибудь сделать что бы галочка всегда стояла? Т.к подобную установку открывал у игры там галочка стоит, а когда я создаю приходится ставить ее. Весь скрипт вот он:
[more]Скрипт
; Script generated by the Inno Setup Script Wizard.
; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES!

#define MyAppName "SpinTires 2014"
#define MyAppVersion "0.2"
#define MyAppExeName "SpinTires.exe"

[Setup]
; NOTE: The value of AppId uniquely identifies this application.
; Do not use the same AppId value in installers for other applications.
; (To generate a new GUID, click Tools | Generate GUID inside the IDE.)
AppId={{2D30D0EC-6B19-4EF8-9D1A-4F0BA1F9AA36}
AppName={#MyAppName}
AppVersion={#MyAppVersion}
;AppVerName={#MyAppName} {#MyAppVersion}
DefaultDirName={pf}\{#MyAppName}
DefaultGroupName={#MyAppName}
AllowNoIcons=yes
OutputDir=C:\Users\&#63408;&#1496;&#1500;&#1488;\Desktop
OutputBaseFilename=SpinTires 2014
Compression=lzma/ultra
SolidCompression=true
InternalCompressLevel=ultra
PrivilegesRequired=none

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

[Tasks]
Name: desktopicon; Description: {cm:CreateDesktopIcon}; GroupDescription: {cm:AdditionalIcons}; Flags: unchecked

[Files]
Source: C:\&#63405;&#1504;&#1502;&#1491;&#1504;&#1488;&#1500;&#1500;&#63421;\Spintires20141\SpinTires.exe; DestDir: {app}; Flags: ignoreversion
Source: C:\&#63405;&#1504;&#1502;&#1491;&#1504;&#1488;&#1500;&#1500;&#63421;\Spintires20141\*; DestDir: {app}; Flags: ignoreversion recursesubdirs createallsubdirs
; NOTE: Don't use "Flags: ignoreversion" on any shared system files

[Icons]
Name: {commondesktop}\{#MyAppName}; Filename: {app}\SpinTires.exe; Tasks: desktopicon; WorkingDir: {app}
Name: {commondesktop}\&#63402;&#1493;&#1501;&#1493;&#1492;&#1494;&#1493;&#1504; &#1500;&#1502;&#1492;&#1502;&#1490;; Filename: {app}\spmmm.exe; Tasks: desktopicon; WorkingDir: {app}; IconIndex: 0
Name: {group}\{cm:UninstallProgram,{#MyAppName}}; Filename: {uninstallexe}

[Run]
Filename: {app}\{#MyAppExeName}; Description: {cm:LaunchProgram,{#StringChange(MyAppName, '&', '&&')}}; Flags: nowait postinstall skipifsilent
[/more]
Автор: dodakaedr
Дата сообщения: 23.01.2015 13:22
Tima182
Как вариант можно так: [more]
Код: #define MyAppName "SpinTires 2014"
#define MyAppVersion "0.2"
#define MyAppExeName "SpinTires.exe"

[Setup]
AppName={#MyAppName}
AppVersion={#MyAppVersion}
DefaultDirName={pf}\{#MyAppName}
DefaultGroupName={#MyAppName}
AllowNoIcons=yes
OutputDir=.

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

[Tasks]
Name: desktopicon; Description: {cm:CreateDesktopIcon} SpinTires; GroupDescription: {cm:AdditionalIcons};
Name: desktopicon2; Description: {cm:CreateDesktopIcon} SPMM; GroupDescription: {cm:AdditionalIcons}; Flags: unchecked

[Icons]
Name: {commondesktop}\{#MyAppName}; Filename: {app}\SpinTires.exe; Tasks: desktopicon; WorkingDir: {app}
Name: {commondesktop}\smp; Filename: {app}\spmmm.exe; Tasks: desktopicon2; WorkingDir: {app}; IconIndex: 0
Name: {group}\{cm:UninstallProgram,{#MyAppName}}; Filename: {uninstallexe}

[Run]
Filename: {app}\{#MyAppExeName}; Description: {cm:LaunchProgram,{#StringChange(MyAppName, '&', '&&')}}; Flags: nowait postinstall skipifsilent
Автор: AlexALSP
Дата сообщения: 24.01.2015 14:46
Подскажите как добавить отключение фоновой музыки инсталлятора по кнопке клавы или маленькой кнопочке отключить звук включить звук.

https://yadi.sk/d/AvTbv05LeCtuQ - скрипт тут . Буду признателен , кто поможет добавить кода.
Автор: tryroom
Дата сообщения: 24.01.2015 16:19
AlexALSP
музыка+кнопка

http://rghost.ru/60531681
Автор: AlexALSP
Дата сообщения: 24.01.2015 19:38
tryroom

Спасибо. Сейчас будем прикручивать , если мозга хватит )))

Добавлено:
tryroom


сам скрипт компилится с ошибкой , попробовал подставить , скорее всего либо другой нужен, либо мозга мало ))
Автор: tryroom
Дата сообщения: 24.01.2015 21:23
AlexALSP
Тестируйте. Проверял на Unicode,Ansi
http://rghost.ru/60538785
Автор: AlexALSP
Дата сообщения: 25.01.2015 01:21
Тут мне хоть мозга хватило заменить dll свою , которая при данном коде выдала ошибку на ту что ранее в архиве дана была. ))

Спасибо, все работает. Я тут цистерной пива не обойдусь ..... )))) Реально выручил.
Автор: Tima182
Дата сообщения: 26.01.2015 12:33
Скрипт тут есть выше где-то, помогите туда добавить удаление каталога в системе разрядностей 86 и 64, папка appdata, там папка игры spintires, то есть добавить в скрипт что бы удаляло в аппдате каталог(кеш) игры?
Что бы в appdate не зависимо от системы удаляло папку spintires. И добавить удаление записи из реестра: HKEY_CURRENT_USER\Software\Spin Tires
Автор: tryroom
Дата сообщения: 26.01.2015 14:15
Tima182

Можно так
[more]
Код:
#define MyAppName "SpinTires 2014"
#define MyAppVersion "0.2"
#define MyAppExeName "SpinTires.exe"

[Setup]
AppName={#MyAppName}
AppVersion={#MyAppVersion}
DefaultDirName={pf}\{#MyAppName}
DefaultGroupName={#MyAppName}
AllowNoIcons=yes
OutputDir=.

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

[Tasks]
Name: desktopicon; Description: {cm:CreateDesktopIcon} SpinTires; GroupDescription: {cm:AdditionalIcons};
Name: desktopicon2; Description: {cm:CreateDesktopIcon} SPMM; GroupDescription: {cm:AdditionalIcons}; Flags: unchecked

[Registry]
Root: HKCU; SubKey: Software\Spin Tires; Flags: uninsdeletekey

[Icons]
Name: {userdesktop}\{#MyAppName}; Filename: {app}\SpinTires.exe; Tasks: desktopicon; WorkingDir: {app}
Name: {userdesktop}\smp; Filename: {app}\spmmm.exe; Tasks: desktopicon2; WorkingDir: {app}; IconIndex: 0
Name: {group}\{cm:UninstallProgram,{#MyAppName}}; Filename: {uninstallexe}

[Run]
Filename: {app}\{#MyAppExeName}; Description: {cm:LaunchProgram,{#StringChange(MyAppName, '&', '&&')}}; Flags: nowait postinstall skipifsilent

[UninstallDelete]
Type: "filesandordirs"; Name: "{app}"
Type: filesandordirs; Name: "{localappdata}\spintires";
Type: filesandordirs; Name: "{userappdata}\spintires";

;{localappdata} AppData\Local
;{userappdata} AppData\Roaming
Автор: CUTA
Дата сообщения: 26.01.2015 17:04
Прошу подсказать. Есть функция которая определяет наличие ветки в реестре, но мне нужно чтоб находило конкретное значение параметра. Вот код функции:

Код: Function CheckKey: Boolean;
Begin
if RegKeyExists(HKLM, 'SOFTWARE\Microsoft\NET Framework Setup\NDP\v3.5')
then
End;
Автор: sergey3695
Дата сообщения: 26.01.2015 17:40
CUTA ну дык есть и RegValueExists. (в справке)
Автор: Tima182
Дата сообщения: 26.01.2015 18:29
А как сделать что бы удаляло каталог самой игры от туда куда установлена игра? А то по дефолту удаляет из программ файлса
кажется.
tryroom
Что то скрипт не фурычит.
Вот мой, ваш что то не так сделан похоже.
[more=Читать дальше..]
; Script generated by the Inno Setup Script Wizard.
; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES!

#define MyAppName "SpinTires 2014"
#define MyAppVersion "0.2"
#define MyAppExeName "SpinTires.exe"

[Setup]
; NOTE: The value of AppId uniquely identifies this application.
; Do not use the same AppId value in installers for other applications.
; (To generate a new GUID, click Tools | Generate GUID inside the IDE.)
AppId={{2D30D0EC-6B19-4EF8-9D1A-4F0BA1F9AA36}
AppName={#MyAppName}
AppVersion={#MyAppVersion}
;AppVerName={#MyAppName} {#MyAppVersion}
DefaultDirName={pf}\{#MyAppName}
DefaultGroupName={#MyAppName}
AllowNoIcons=yes
OutputDir=C:\Users\Тима\Desktop
OutputBaseFilename=SpinTires 2014
Compression=lzma/ultra
SolidCompression=true
InternalCompressLevel=ultra
PrivilegesRequired=none
CompressionThreads=8

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

[Tasks]
Name: desktopicon; Description: {cm:CreateDesktopIcon}; GroupDescription: {cm:AdditionalIcons}; Flags: unchecked

[Registry]
Root: HKCU; SubKey: Software\Spin Tires; Flags: uninsdeletekey

[Files]
Source: C:\Программы\Spintires20141\SpinTires.exe; DestDir: {app}; Flags: ignoreversion
Source: C:\Программы\Spintires20141\*; DestDir: {app}; Flags: ignoreversion recursesubdirs createallsubdirs
; NOTE: Don't use "Flags: ignoreversion" on any shared system files

[Icons]
Name: {commondesktop}\{#MyAppName}; Filename: {app}\SpinTires.exe; Tasks: desktopicon; WorkingDir: {app}
Name: {commondesktop}\Менеджер модов; Filename: {app}\spmmm.exe; Tasks: desktopicon; WorkingDir: {app}; IconIndex: 0
Name: {group}\{cm:UninstallProgram,{#MyAppName}}; Filename: {uninstallexe}

[UninstallDelete]
Type: filesandordirs; Name: {app}

[Run]
Filename: {app}\{#MyAppExeName}; Description: {cm:LaunchProgram,{#StringChange(MyAppName, '&', '&&')}}; Flags: nowait postinstall skipifsilent
[/more]
Автор: CUTA
Дата сообщения: 26.01.2015 18:42
sergey3695 и что? Вы только и умеете что в справку посылать! Я много что пробовал, просто так сюда не пишу.

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758

Предыдущая тема: Только инсталлятор


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.