Войти

Показать полную графическую версию : [архив] Скрипты Inno Setup. Помощь и советы [часть 2]


Страниц : 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 [92] 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133

BaRSPRO
25-05-2010, 13:47
vint56, Спасибо, большое, за помощь!

BaRSPRO
25-05-2010, 14:19
vint56, не подскажешь как изменить цвет шрифта на панельке AutoSize:=False; SetBounds(ScaleX(357), ScaleY(96), ScaleX(114), ScaleY(20)); Transparent:=True; Font.Name:= 'Courier New'; Font.Size:= 10; Font.Style:=[fsBold]; Caption := ExpandConstant('{cm:StartMenu}'); Parent := WizardForm;

vint56
25-05-2010, 15:05
BaRSPRO, призапуске установшика
case CurPageID of
wpWelcome:
begin
Welcome.Font.Color := $00FFFF; цвет желтый вот здесь меняй цвет
и после переходана другую страничку

procedure CurPageChanged(CurPageID: Integer);
begin
SetStateNewButtons;
Welcome.Font.Color := $FFFFFF; вот здесь меняй цвет
и так далие

EN130
25-05-2010, 19:43
Как ставить комментарий в одной строке с параметром?

qqqb
26-05-2010, 03:06
Как запретить во время установки изменять конечную папку? Чтобы юзер мог установить в любую папку , но инсталятор сам создал бы в этой папке папку в которую будут копироваться файлы.
Есть переменная обозначающая не папку куда устанавливается приложение, а папку в которой находится папка с приложением?

R.i.m.s.k.y.
26-05-2010, 09:17
Как запретить во время установки изменять конечную папку? Чтобы юзер мог установить в любую папку , но инсталятор сам создал бы в этой папке папку в которую будут копироваться файлы.
Есть переменная обозначающая не папку куда устанавливается приложение, а папку в которой находится папка с приложением »
Догоняю краями... Как-то сумбурно написано
т.е. пользователь указывает папку а там уже инсталлер все разбрасывает по подпапкам? просто -

Source: Total Commander XP\*; DestDir: {app}; Flags: ignoreversion recursesubdirs createallsubdirs

В папке Source: Total Commander XP\* есть подпапки самого тотала, приложений для него (AkelPad, IrfanView), в результате в папке, указанной пользователем, создаются папки самого тотала, и если выбрано при установке - доп. программок, в общем в папке, указанной пользователем при установке создается структура папок как в Source: Total Commander XP\*

Как ставить комментарий в одной строке с параметром? »
стандартные указатели комментариев (без кавычек): ";", "/* комментарий */", "//"
Но ";" используется для разделения параметров, так что получается вроде никак, как вариант комментировать сверху строчки. В хелпе так и написано - комментарий определяется ";" в начале строки.
В коде "//" в любом месте строки, "/* */" так же в любом месте строки кода С

EN130
26-05-2010, 17:10
R.i.m.s.k.y.,
Такой код выдает ошибку Системе не удается найти указанный путь.
WizardImageFile=C:\D1.bmp; // 164x314

Когда убираю комментарий, все компилируется.
В то-же время такой код
HSTREAM = DWORD; // тип звукового потока
Отрабатывает нормальна. Чего я не понимаю?

Хочу сделать слайд-шоу через такой код:


[Setup]
WindowVisible=yes
WindowResizable=no
WindowShowCaption=no

[Files]
Source: C:\isxbb.dll; DestDir: {tmp}; Flags: dontcopy
Source: C:\1.jpg; DestDir: {tmp}; Flags: dontcopy
Source: C:\2.jpg; DestDir: {tmp}; Flags: dontcopy
Source: C:\3.jpg; DestDir: {tmp}; Flags: dontcopy
Source: C:\4.jpg; DestDir: {tmp}; Flags: dontcopy

[Code]
const
BACKGROUND=6;
TIMER=16;

function isxbb_AddImage(Image: PChar; Flags: Cardinal): Integer;
external 'isxbb_AddImage@files:isxbb.dll stdcall';

function isxbb_Init(hWnd: Integer): Integer;
external 'isxbb_Init@files:isxbb.dll stdcall';

function isxbb_StartTimer(Seconds: Integer; Flags: Cardinal): Integer;
external 'isxbb_StartTimer@files:isxbb.dll stdcall';

function isxbb_KillTimer(Flags: Cardinal): Integer;
external 'isxbb_KillTimer@files:isxbb.dll stdcall';

procedure InitializeWizard();
begin
ExtractTemporaryFile('1.jpg');
isxbb_AddImage(ExpandConstant('{tmp}')+'\1.jpg',BACKGROUND);
isxbb_Init(StrToInt(ExpandConstant('{hwnd}')));
end;

procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep=ssInstall
then
begin
ExtractTemporaryFile('2.jpg');
ExtractTemporaryFile('3.jpg');
ExtractTemporaryFile('4.jpg');
isxbb_AddImage(ExpandConstant('{tmp}')+'\2.jpg',BACKGROUND or TIMER);
isxbb_AddImage(ExpandConstant('{tmp}')+'\3.jpg',BACKGROUND or TIMER);
isxbb_AddImage(ExpandConstant('{tmp}')+'\4.jpg',BACKGROUND or TIMER);
isxbb_Init(StrToInt(ExpandConstant('{hwnd}')));
//Таймер показа изображений в скундах (3?)
isxbb_StartTimer(3,BACKGROUND)
end
//не зациклено.
else if CurStep=ssPostInstall then
isxbb_KillTimer(BACKGROUND);
end;
но мне на строчке
function isxbb_AddImage(Image: PChar; Flags: Cardinal): Integer;
Выдает такую ошибку
http://s14.radikal.ru/i187/1005/bd/4de13a06d6e2.jpg

Как ее исправить?

alex2010
26-05-2010, 21:08
но мне на строчке
function isxbb_AddImage(Image: PChar; Flags: Cardinal): Integer;
Выдает такую ошибку »
по пробуй написать PAnsiChar вместо PChar

cleric1985_n
26-05-2010, 21:41
Возможно ли как нибудь, не используя секцию [Code] реализовать выбор при деинсталяции на удаление/не удаление определенной папки, как это возможно в NSIS?

Habetdin
26-05-2010, 22:57
cleric1985_n, [UninstallDelete]
Name: {commonappdata}\My Program; Type: filesandordirs

cleric1985_n
27-05-2010, 03:13
Я имел ввиду, запрос на удаление...т.е. либо окошко, либо галочку поставить при деинсталяции..

R.i.m.s.k.y.
27-05-2010, 08:53
Отрабатывает нормальна. Чего я не понимаю? »
Открывем хелп, читаем


Comments may be embedded in expression by using a slash and an asterisk. For example:

#emit Var1 /* this is a comment */ + Var2 /* this is a comment */


Also one line comments are supported. Those comments must begin with a semicolon. Whole text after the semicolon up to the end of a line is considered comment.

#emit Var1 + Var2 ; this is a comment


Please note that line spanning feature is triggered before any further processing, thus a comment may occupy more than one line:

#emit Var1 + Var2 ; this is \
a comment


You can put "comments" in the script (which are ignored by the compiler) by placing a semicolon at the beginning of a line. For example:

; This is a comment. I could put reminders to myself here...


В общем за пределами кода ";" определяет строку комментария, а т.к. точка с запятой используется для разделения параметров, то не может использоваться в любом месте строки, только в начале.

В коде в любом месте строки "//" или " /* */ " в середине строки.
Без кавык есссно.

EN130
27-05-2010, 11:31
Все компилировалось, вот только МП3 не играет. А судя по тому, что и кнопок для управления проигрыванием нет, то вся часть про МП3 не отрабатывается.

; Script generated by the Ìàñòåð Inno Setup Script.
; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES!

#define MyAppName "Äåìèóðãè. Äèëîãèÿ"
#define MyAppVerName "Äåìèóðãè 1.07 + 1.02"
#define MyAppPublisher "EN130"
#define MyAppURL "HTTP://WWW.USDE.RU"

; --- Íà÷àëî ãëàâíûõ ïàðàìåòðîâ
[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={{97695CE3-87D0-4F8E-A417-C0BBC3AF4377}
AppName={#MyAppName}
AppVerName={#MyAppVerName}
AppPublisher={#MyAppPublisher}
AppPublisherURL={#MyAppURL}
AppSupportURL={#MyAppURL}
AppUpdatesURL={#MyAppURL}
DefaultDirName={pf}\{#MyAppName}
DefaultGroupName={#MyAppName}
AllowNoIcons=yes
LicenseFile=F:\ðàáîòà\Etherlords\Ëèöåíçèîííîå ñîãëàøåíèå.rtf
OutputDir=F:\ðàáîòà\Etherlords\123
OutputBaseFilename=setup
SetupIconFile=F:\ðàáîòà\Etherlords\ico.ico
Compression=lzma
SolidCompression=yes

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

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

[Files]
Source: "F:\ðàáîòà\Etherlords\Etherlords\Äåìèóðãè 2\Etherlords2.exe"; DestDir: "{app}"; Flags: ignoreversion
Source: "F:\ðàáîòà\Etherlords\Etherlords\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs
; NOTE: Don't use "Flags: ignoreversion" on any shared system files

[Icons]
Name: "{group}\{cm:UninstallProgram,{#MyAppName}}"; Filename: "{uninstallexe}"
; --- Êîíåö ãëàâíûõ ïàðàìåòðîâ

; --- Ðàçáèâàíèå íà òîìà
[Setup]
DiskSpanning=yes
DiskSliceSize=730000000

; --- Ñîáñòâåííîå ñîîáùåíèå ïðè íàæàòè íà êíîïêó îòìåíà
[Code]
procedure CancelButtonClick(CurPage: Integer; var Cancel, Confirm: Boolean);
begin
Cancel:=False;
Confirm:=False;
if MsgBox('Äåéñòâèòåëüíî îòìåíèòü óñòàíîâêó ïðèëîæåíèÿ?', mbError, MB_YESNO) = idYes
then
Cancel:=true;
end;

// --- Ñëàéäøîó
[Setup]
WindowVisible=yes
WindowResizable=no
WindowShowCaption=no

[Files]
Source: C:\isxbb.dll; DestDir: {tmp}; Flags: dontcopy
Source: C:\1.jpg; DestDir: {tmp}; Flags: dontcopy
Source: C:\2.jpg; DestDir: {tmp}; Flags: dontcopy
Source: C:\3.jpg; DestDir: {tmp}; Flags: dontcopy
Source: C:\4.jpg; DestDir: {tmp}; Flags: dontcopy

[Code]
const
BACKGROUND=6;
TIMER=16;

function isxbb_AddImage(Image: PAnsiChar; Flags: Cardinal): Integer;
external 'isxbb_AddImage@files:isxbb.dll stdcall';

function isxbb_Init(hWnd: Integer): Integer;
external 'isxbb_Init@files:isxbb.dll stdcall';

function isxbb_StartTimer(Seconds: Integer; Flags: Cardinal): Integer;
external 'isxbb_StartTimer@files:isxbb.dll stdcall';

function isxbb_KillTimer(Flags: Cardinal): Integer;
external 'isxbb_KillTimer@files:isxbb.dll stdcall';

procedure InitializeWizard();
begin
ExtractTemporaryFile('1.jpg');
isxbb_AddImage(ExpandConstant('{tmp}')+'\1.jpg',BACKGROUND);
isxbb_Init(StrToInt(ExpandConstant('{hwnd}')));
end;

procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep=ssInstall
then
begin
ExtractTemporaryFile('2.jpg');
ExtractTemporaryFile('3.jpg');
ExtractTemporaryFile('4.jpg');
isxbb_AddImage(ExpandConstant('{tmp}')+'\2.jpg',BACKGROUND or TIMER);
isxbb_AddImage(ExpandConstant('{tmp}')+'\3.jpg',BACKGROUND or TIMER);
isxbb_AddImage(ExpandConstant('{tmp}')+'\4.jpg',BACKGROUND or TIMER);
isxbb_Init(StrToInt(ExpandConstant('{hwnd}')));
//Òàéìåð ïîêàçà èçîáðàæåíèé â ñêóíäàõ (3?)
isxbb_StartTimer(1,BACKGROUND)
end
//íå çàöèêëåíî.
else if CurStep=ssPostInstall then
isxbb_KillTimer(BACKGROUND);
end;

// --- ïðîèãðûâàíèå ÌÏ3
[files]
Source: "C:\BASS.dll"; DestDir: "{tmp}"; Flags: dontcopy
;ôàéë çâóêà
Source: "C:\Etherlords.mp3"; DestDir: "{tmp}"; Flags: dontcopy
[code]
const
BASS_ACTIVE_STOPPED = 0;
BASS_ACTIVE_PLAYING = 1;
BASS_ACTIVE_STALLED = 2;
BASS_ACTIVE_PAUSED = 3;
BASS_SAMPLE_LOOP = 4;//ïîâòîðÿòü


function mciSendString(lpstrCommand: string; lpstrReturnString: string; uReturnLength:integer; hwndCallback:integer):integer;
external 'mciSendStringA@winmm.dll stdcall';

procedure StopSound(Sender: TObject);
begin
mciSendString(ExpandConstant('stop {tmp}\Etherlords.mp3'),'NULL',0,0)
end;

procedure playSound(Sender: TObject);
begin
mciSendString(ExpandConstant('play {tmp}\Etherlords.mp3'),'NULL',0,0)
end;

procedure InitializeWizard2();
var
ButtonStop: TButton;
ButtonPlay: TButton;
begin
ExtractTemporaryFile(ExpandConstant('Etherlords.mp3'))
mciSendString(ExpandConstant('stop {tmp}\Etherlords.mp3'),'NULL',0,0)
mciSendString(ExpandConstant('play {tmp}\Etherlords.mp3'),'NULL',0,0)
ButtonStop := TButton.Create(WizardForm);
ButtonPlay := TButton.Create(WizardForm);
with ButtonStop do
begin
Parent := WizardForm;
Caption :='ñòîï';
Left := ScaleX(8);
Top :=320
Width := ScaleX(43);
Height := ScaleY(33);
TabOrder := 0;
OnClick:=@StopSound
end;
with ButtonPlay do
begin
Parent := WizardForm;
Caption :='èãðà';
Left := ScaleX(8);
Top :=190
Width := ScaleX(43);
Height := ScaleY(33);
TabOrder := 0;
OnClick:=@playSound
end;
end;

// --- Ñâîÿ êàðòèíêà âñåðõó è ñëåâà. 164x314 ïåðâàÿ êàðòèíêà. 55x55 âòîðàÿ êàðòèíêà.
[Setup]
WizardImageFile=C:\D1.bmp
WizardSmallImageFile=C:\D2.bmp

// --- Ïðîâåðêà ñâîáîäíîãî ìåñòà.
[Code]
const
NeedSize = 3072; //Ïðîïèñàòü, ñêîëüêî ìåãàáàéò íåîáõîäèìî

DRIVE_UNKNOWN = 0;
DRIVE_NO_ROOT_DIR = 1;
DRIVE_REMOVEABLE = 2;
DRIVE_FIXED = 3;
DRIVE_REMOTE = 4;
DRIVE_CDROM = 5;
DRIVE_RAMDISK = 6;

function GetLogicalDrives: DWORD;
external 'GetLogicalDrives@kernel32.dll stdcall';

function GetDriveType(nDrive: String): Longint;
external 'GetDriveTypeA@kernel32.dll stdcall';

procedure InitializeWizard3();
var
Path: String;
FreeMB, TotalMB: Cardinal;
ListBox: TListBox;
drives: DWORD;
i: integer;
begin
ListBox:= TListBox.Create(WizardForm);
ListBox.Top:= 120;
ListBox.Width:= 300;
ListBox.Height:= ScaleY(90);
ListBox.Parent:= WizardForm.SelectDirPage;

drives:= GetLogicalDrives();
for i:= 0 to 31 do
begin
if (drives and (1 shl i)) > 0 then
begin
Path:= chr(ord('A')+i)+':';
if GetDriveType(Path) = DRIVE_FIXED then
begin
GetSpaceOnDisk(Path, True, FreeMB, TotalMB);
ListBox.Items.Add(Path + ' - Âñåãî: ' + IntToStr(TotalMB) +
'Ìá - Ñâîáîäíî: ' + IntToStr(FreeMB) + 'Ìá');
end;
end;
end;
end;

function NextButtonClick(CurPageID: Integer): Boolean;
var
Path: String;
FreeMB, TotalMB: Cardinal;
begin
Result:= True;
if CurPageID = wpSelectDir then
begin
Path:= ExtractFileDrive(WizardForm.DirEdit.Text);
GetSpaceOnDisk(Path, True, FreeMB, TotalMB);
if FreeMB < NeedSize then
begin
MsgBox('Íåäîñòàòî÷íî ìåñòà íà äèñêå!', mbInformation, MB_OK)
Result:= False;
end;
end;
end;

// --- íåîáõîäèìî åùå Í ìåñòà
function NextButtonClick2(CurPageID: Integer): Boolean;
var
Path: String;
FreeMB, TotalMB: Cardinal;
begin
Result:= True;
if CurPageID = wpSelectDir then
begin
Path:= ExtractFileDrive(WizardForm.DirEdit.Text);
GetSpaceOnDisk(Path, True, FreeMB, TotalMB);
if FreeMB < NeedSize then
begin
MsgBox('Äëÿ óñòàíîâêè ïðèëîæåíèÿ íåîáõîäèìî '+ IntTostr(NeedSize)+ ' MB,'#13+ 'à íà âûáðàííîì Âàìè äèñêå äîñòóïíî òîëüêî '+ IntToStr(FreeMB)+' MB', mbCriticalError, MB_OK)
Result := False;
end;
end;
end;

Пробовал для проигрывания МП3 использовать такой код

; Script generated by the Ìàñòåð Inno Setup Script.
; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES!

#define MyAppName "Äåìèóðãè. Äèëîãèÿ"
#define MyAppVerName "Äåìèóðãè 1.07 + 1.02"
#define MyAppPublisher "EN130"
#define MyAppURL "HTTP://WWW.USDE.RU"

; --- Íà÷àëî ãëàâíûõ ïàðàìåòðîâ
[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={{97695CE3-87D0-4F8E-A417-C0BBC3AF4377}
AppName={#MyAppName}
AppVerName={#MyAppVerName}
AppPublisher={#MyAppPublisher}
AppPublisherURL={#MyAppURL}
AppSupportURL={#MyAppURL}
AppUpdatesURL={#MyAppURL}
DefaultDirName={pf}\{#MyAppName}
DefaultGroupName={#MyAppName}
AllowNoIcons=yes
LicenseFile=F:\ðàáîòà\Etherlords\Ëèöåíçèîííîå ñîãëàøåíèå.rtf
OutputDir=F:\ðàáîòà\Etherlords\123
OutputBaseFilename=setup
SetupIconFile=F:\ðàáîòà\Etherlords\ico.ico
Compression=lzma
SolidCompression=yes

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

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

[Files]
Source: "F:\ðàáîòà\Etherlords\Etherlords\Äåìèóðãè 2\Etherlords2.exe"; DestDir: "{app}"; Flags: ignoreversion
Source: "F:\ðàáîòà\Etherlords\Etherlords\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs
; NOTE: Don't use "Flags: ignoreversion" on any shared system files

[Icons]
Name: "{group}\{cm:UninstallProgram,{#MyAppName}}"; Filename: "{uninstallexe}"
; --- Êîíåö ãëàâíûõ ïàðàìåòðîâ

; --- Ðàçáèâàíèå íà òîìà
[Setup]
DiskSpanning=yes
DiskSliceSize=730000000

; --- Ñîáñòâåííîå ñîîáùåíèå ïðè íàæàòè íà êíîïêó îòìåíà
[Code]
procedure CancelButtonClick(CurPage: Integer; var Cancel, Confirm: Boolean);
begin
Cancel:=False;
Confirm:=False;
if MsgBox('Äåéñòâèòåëüíî îòìåíèòü óñòàíîâêó ïðèëîæåíèÿ?', mbError, MB_YESNO) = idYes
then
Cancel:=true;
end;

// --- Ñëàéäøîó
[Setup]
WindowVisible=yes
WindowResizable=no
WindowShowCaption=no

[Files]
Source: C:\isxbb.dll; DestDir: {tmp}; Flags: dontcopy
Source: C:\1.jpg; DestDir: {tmp}; Flags: dontcopy
Source: C:\2.jpg; DestDir: {tmp}; Flags: dontcopy
Source: C:\3.jpg; DestDir: {tmp}; Flags: dontcopy
Source: C:\4.jpg; DestDir: {tmp}; Flags: dontcopy

[Code]
const
BACKGROUND=6;
TIMER=16;

function isxbb_AddImage(Image: PAnsiChar; Flags: Cardinal): Integer;
external 'isxbb_AddImage@files:isxbb.dll stdcall';

function isxbb_Init(hWnd: Integer): Integer;
external 'isxbb_Init@files:isxbb.dll stdcall';

function isxbb_StartTimer(Seconds: Integer; Flags: Cardinal): Integer;
external 'isxbb_StartTimer@files:isxbb.dll stdcall';

function isxbb_KillTimer(Flags: Cardinal): Integer;
external 'isxbb_KillTimer@files:isxbb.dll stdcall';

procedure InitializeWizard();
begin
ExtractTemporaryFile('1.jpg');
isxbb_AddImage(ExpandConstant('{tmp}')+'\1.jpg',BACKGROUND);
isxbb_Init(StrToInt(ExpandConstant('{hwnd}')));
end;

procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep=ssInstall
then
begin
ExtractTemporaryFile('2.jpg');
ExtractTemporaryFile('3.jpg');
ExtractTemporaryFile('4.jpg');
isxbb_AddImage(ExpandConstant('{tmp}')+'\2.jpg',BACKGROUND or TIMER);
isxbb_AddImage(ExpandConstant('{tmp}')+'\3.jpg',BACKGROUND or TIMER);
isxbb_AddImage(ExpandConstant('{tmp}')+'\4.jpg',BACKGROUND or TIMER);
isxbb_Init(StrToInt(ExpandConstant('{hwnd}')));
//Òàéìåð ïîêàçà èçîáðàæåíèé â ñêóíäàõ (3?)
isxbb_StartTimer(1,BACKGROUND)
end
//íå çàöèêëåíî.
else if CurStep=ssPostInstall then
isxbb_KillTimer(BACKGROUND);
end;

// --- ïðîèãðûâàíèå ÌÏ3
[Files]
Source: "C:\BASS.dll"; DestDir: "{tmp}"; Flags: dontcopy
Source: "C:\Etherlords.mp3"; DestDir: "{tmp}"; Flags: dontcopy

[Code]
const
BASS_SAMPLE_LOOP = 4; // ïîâòîðåíèå (âèäèìî ðàç)

type
HSTREAM = DWORD; // òèï çâóêîâîãî ïîòîêà

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; offset: DWORD; length: DWORD; flags: DWORD): HSTREAM;
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';

procedure InitializeWizard2();
var
Name1: string;
i: Integer;
begin
ExtractTemporaryFile('BASS.dll');
ExtractTemporaryFile('Etherlords.mp3');
if BASS_Init(-1, 44100, 0, 0, 0) then
begin
BASS_Start();
Name1:=ExpandConstant('{tmp}\Etherlords.mp3');
i:=BASS_StreamCreateFile(FALSE, PAnsiChar(Name1), 0, 0, 4);
if i <> 0 then
begin
BASS_ChannelPlay(i, True);
end;
end;
end;
procedure DeInitializeSetup();
begin
BASS_Stop();
BASS_Free();
end;

// --- Ñâîÿ êàðòèíêà âñåðõó è ñëåâà. 164x314 ïåðâàÿ êàðòèíêà. 55x55 âòîðàÿ êàðòèíêà.
[Setup]
WizardImageFile=C:\D1.bmp
WizardSmallImageFile=C:\D2.bmp

// --- Ïðîâåðêà ñâîáîäíîãî ìåñòà.
[Code]
const
NeedSize = 3072; //Ïðîïèñàòü, ñêîëüêî ìåãàáàéò íåîáõîäèìî

DRIVE_UNKNOWN = 0;
DRIVE_NO_ROOT_DIR = 1;
DRIVE_REMOVEABLE = 2;
DRIVE_FIXED = 3;
DRIVE_REMOTE = 4;
DRIVE_CDROM = 5;
DRIVE_RAMDISK = 6;

function GetLogicalDrives: DWORD;
external 'GetLogicalDrives@kernel32.dll stdcall';

function GetDriveType(nDrive: String): Longint;
external 'GetDriveTypeA@kernel32.dll stdcall';

procedure InitializeWizard3();
var
Path: String;
FreeMB, TotalMB: Cardinal;
ListBox: TListBox;
drives: DWORD;
i: integer;
begin
ListBox:= TListBox.Create(WizardForm);
ListBox.Top:= 120;
ListBox.Width:= 300;
ListBox.Height:= ScaleY(90);
ListBox.Parent:= WizardForm.SelectDirPage;

drives:= GetLogicalDrives();
for i:= 0 to 31 do
begin
if (drives and (1 shl i)) > 0 then
begin
Path:= chr(ord('A')+i)+':';
if GetDriveType(Path) = DRIVE_FIXED then
begin
GetSpaceOnDisk(Path, True, FreeMB, TotalMB);
ListBox.Items.Add(Path + ' - Âñåãî: ' + IntToStr(TotalMB) +
'Ìá - Ñâîáîäíî: ' + IntToStr(FreeMB) + 'Ìá');
end;
end;
end;
end;

function NextButtonClick(CurPageID: Integer): Boolean;
var
Path: String;
FreeMB, TotalMB: Cardinal;
begin
Result:= True;
if CurPageID = wpSelectDir then
begin
Path:= ExtractFileDrive(WizardForm.DirEdit.Text);
GetSpaceOnDisk(Path, True, FreeMB, TotalMB);
if FreeMB < NeedSize then
begin
MsgBox('Íåäîñòàòî÷íî ìåñòà íà äèñêå!', mbInformation, MB_OK)
Result:= False;
end;
end;
end;

// --- íåîáõîäèìî åùå Í ìåñòà
function NextButtonClick2(CurPageID: Integer): Boolean;
var
Path: String;
FreeMB, TotalMB: Cardinal;
begin
Result:= True;
if CurPageID = wpSelectDir then
begin
Path:= ExtractFileDrive(WizardForm.DirEdit.Text);
GetSpaceOnDisk(Path, True, FreeMB, TotalMB);
if FreeMB < NeedSize then
begin
MsgBox('Äëÿ óñòàíîâêè ïðèëîæåíèÿ íåîáõîäèìî '+ IntTostr(NeedSize)+ ' MB,'#13+ 'à íà âûáðàííîì Âàìè äèñêå äîñòóïíî òîëüêî '+ IntToStr(FreeMB)+' MB', mbCriticalError, MB_OK)
Result := False;
end;
end;
end;

но музыка все равно и не играет. Может подскажете в чем проблема?

EN130
27-05-2010, 12:13
--- Добавил.
Понял в чем проблема.
Подскажите, как правильно переименовать несколько procedure InitializeWizard(); так, чтобы они не конфликтовали?

Habetdin
27-05-2010, 14:25
cleric1985_n, тогда так:
procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
var
Res: Integer;
begin
case CurUninstallStep of
usPostUninstall:
begin
//Проверяем присутствие папки после удаления
If DirExists(ExpandConstant('{app}')+'')
then
//Создаем диалог с тремя кнопками
case MsgBox('Папка "'+ExpandConstant('{app}')+'" не пуста.'#13#13 +
'"Да" – полное удаление всех файлов в папке, включая саму папку.' #13#13 +
'"Нет" – открыть папку в проводнике, чтобы вручную удалить файлы.'#13#13 +
'"Отмена" – ничего не делать, удалить папку позже самостоятельно.', mbInformation, MB_YESNOCANCEL)
of IDYES:
begin
if not DelTree(ExpandConstant('{app}')+'', True, True, True)
then
MsgBox('Папка не удалена.' #13#13 'Папка или один из файлов в ней задействованы другим приложением.', mbError, MB_OK);
end;
IDNO:
begin
if not ShellExec('open', ExpandConstant('{app}')+'', '', '', SW_SHOWMAXIMIZED, ewNoWait, Res)
then
MsgBox('Ошибка открытия.' #13#13 'Папка не найдена.', mbError, MB_OK);
end;
IDCANCEL:
begin
end;
end;
end;
end;
end;

nik1967
27-05-2010, 16:10
EN130,
Где-нибудь в конце скрипта дописываете:
Procedure InitializeWizard();
begin
InitializeWizard1();
InitializeWizard2();
InitializeWizard3();
InitializeWizard4();
InitializeWizard5();
InitializeWizard7();
InitializeWizard8(); // сколько будете использовать процедур InitializeWizard.
end;
А все процедуры InitializeWizard переименовываете по порядку: InitializeWizard() в InitializeWizard1(), следующий InitializeWizard() в InitializeWizard2(), и так далее.

Можно так-же и другие процедуры использовать:
procedure CurPageChanged(CurPageID: Integer);
begin
CurPageChanged1(CurPageID);
CurPageChanged2(CurPageID);
CurPageChanged3(CurPageID);
CurPageChanged4(CurPageID);
end;
procedure CurStepChanged(CurStep: TSetupStep);
begin
CurStepChanged1(CurStep);
CurStepChanged2(CurStep);
end;
Например.

cleric1985_n
27-05-2010, 17:56
Habetdin, Так то так, но это уже через секцию [Code]. Значит я так понял - что реализовать это нельзя...:))

semiono
28-05-2010, 09:10
Реестр:
http://j.imagehost.org/0295/Snap1_1.png

procedure DeinitializeSetup();
var
S: TArrayOfString;
F: String; V1: String; V2: String; V3: String;
begin
RegQueryBinaryValue(HKLM, 'Software\Classes\Trilogy', 'Value1', V1)
RegQueryBinaryValue(HKLM, 'Software\Classes\Trilogy', 'Value2', V2)
RegQueryBinaryValue(HKLM, 'Software\Classes\Trilogy', 'Value3', V3)

F := ExpandConstant('{reg:HKLM32\Software\VST,VSTPluginsPath|{syswow64}\Plugins}\Trilogy\Trilogy.inf');
SetArrayLength(S, 12);
// -------------------------------------------------------------------------------------------------------------------------------------
S[00] := '[Version]'
S[01] := 'Signature=$Windows NT$'
S[02] := ''
S[03] := '[DefaultInstall]'
S[04] := 'AddReg=Add.Reg'
S[05] := ''
S[06] := '[Add.Reg]'

S[07] := 'HKLM,"Software\Classes\Trilogy","Value1",0x24001,"' + ExpandConstant(V1) + '"'
S[08] := 'HKLM,"Software\Classes\Trilogy","Value2",0x24001,"' + V2 + '"'
S[09] := 'HKLM,"Software\Classes\Trilogy","Value3",0x24001,"' + V3 + '"'

S[10] := 'HKLM,"Software\Microsoft\Windows\CurrentVersion\App Paths\Trilogy.exe",,0x4000,"' + ExpandConstant('{reg:HKLM32\Software\VST,Proton.exe|{syswow64}\Proton}') + '\Trilogy\Trilogy.exe"'
S[11] := 'HKLM,"Software\Microsoft\Windows\CurrentVersion\App Paths\Trilogy.exe","Path",0x4000,"' + ExpandConstant('{reg:HKLM32\Software\VST,Proton.exe|{syswow64}\Proton}') + '\Trilogy"'
// -------------------------------------------------------------------------------------------------------------------------------------
SaveStringsToFile(F, S, False);
end;

Результат:
http://h.imagehost.org/0957/Snap2.png

Помогите решить задачу? Думаю из кода понятно что я хочу? Надо написать INF-файл
Может REG_NONE не поддерживается? Или надо строку конвертировать как-то? Как?

R.i.m.s.k.y.
28-05-2010, 09:34
Может REG_NONE не поддерживается? Или надо строку конвертировать как-то? Как? »
Я в таких случаях шаманю с командой Reg Add, колдунство там сильное. Или если параметр статичен - просто импортирую файл реестра с нужными ветками.
Можете набрать в командной строке Reg Add /? - почитайте.

BaRSPRO
28-05-2010, 10:04
всем доброго времени суток, возможно глупый вопрос, но все же он есть, как указать путь распаковки только одному архиву?




© OSzone.net 2001-2012