Показать полную графическую версию : [архив] Скрипты Inno Setup. Помощь и советы [часть 2]
vint56, Спасибо, большое, за помощь!
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;
BaRSPRO, призапуске установшика
case CurPageID of
wpWelcome:
begin
Welcome.Font.Color := $00FFFF; цвет желтый вот здесь меняй цвет
и после переходана другую страничку
procedure CurPageChanged(CurPageID: Integer);
begin
SetStateNewButtons;
Welcome.Font.Color := $FFFFFF; вот здесь меняй цвет
и так далие
Как ставить комментарий в одной строке с параметром?
Как запретить во время установки изменять конечную папку? Чтобы юзер мог установить в любую папку , но инсталятор сам создал бы в этой папке папку в которую будут копироваться файлы.
Есть переменная обозначающая не папку куда устанавливается приложение, а папку в которой находится папка с приложением?
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\*
Как ставить комментарий в одной строке с параметром? »
стандартные указатели комментариев (без кавычек): ";", "/* комментарий */", "//"
Но ";" используется для разделения параметров, так что получается вроде никак, как вариант комментировать сверху строчки. В хелпе так и написано - комментарий определяется ";" в начале строки.
В коде "//" в любом месте строки, "/* */" так же в любом месте строки кода С
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...
В общем за пределами кода ";" определяет строку комментария, а т.к. точка с запятой используется для разделения параметров, то не может использоваться в любом месте строки, только в начале.
В коде в любом месте строки "//" или " /* */ " в середине строки.
Без кавык есссно.
Все компилировалось, вот только МП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;
но музыка все равно и не играет. Может подскажете в чем проблема?
--- Добавил.
Понял в чем проблема.
Подскажите, как правильно переименовать несколько 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;
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]. Значит я так понял - что реализовать это нельзя...:))
Реестр:
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 /? - почитайте.
всем доброго времени суток, возможно глупый вопрос, но все же он есть, как указать путь распаковки только одному архиву?
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.