как подключить модуль проигрыаания музыки?

Eisemann

Новичок
Хочу чтобы в установщике играла музыка, но не знаю как добавить её через скрипт, то есть подключить
 

Timick

Старожил
Код:
[Files]
Source: InstallFiles\MusicFiles\*.*; Flags: DontCopy DeleteAfterInstall

[Code]
var
MusicButton, mp3Handle: HWND;

Function BASS_Init(device: Integer; freq, flags: DWORD; win: hwnd; CLSID: Integer): Boolean; external 'BASS_Init@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_ChannelIsActive(handle: DWORD): Integer; external 'BASS_ChannelIsActive@files:BASS.dll stdcall delayload';
Function BASS_ChannelPause(handle: DWORD): Boolean; external 'BASS_ChannelPause@files:BASS.dll stdcall delayload';
Function BASS_Pause: Boolean; external 'BASS_Pause@files:BASS.dll stdcall delayload';
Function BASS_Stop: Boolean; external 'BASS_Stop@files:BASS.dll stdcall delayload';
Function BASS_Free: Boolean; external 'BASS_Free@files:BASS.dll stdcall delayload';
Function BASS_StreamCreateFileLib(MEM: BOOL; fil: PAnsiChar; offset, length, flags: DWORD): DWORD; external 'BASS_StreamCreateFile@{tmp}\bp.dll stdcall delayload';
Function BASS_StreamCreateFile(MEM: BOOL; fil: AnsiString; offset, flags: DWORD): DWORD;
var
  Size: Longint;
  Buffer: ansistring;
begin
  if MEM then begin
    Size:= ExtractTemporaryFileSize(fil);
    SetLength(Buffer,Size);
    ExtractTemporaryFileToBuffer(fil, Cast{#defined UNICODE ? "Ansi" : ""}StringToInteger(Buffer));
    Result:= BASS_StreamCreateFileLib(MEM, Buffer, 0, Size, flags);
  end else Result:= BASS_StreamCreateFileLib(MEM, fil, offset, 0, flags);
end;

Procedure MusicButtonClick(hBtn:HWND);
begin
  if BtnGetChecked(MusicButton) then BASS_ChannelPause(mp3Handle) else if BASS_ChannelIsActive(mp3Handle) = 3 then BASS_ChannelPlay(mp3Handle, False);
end;

Procedure InitMusic();
begin
  if not FileExists(ExpandConstant('{tmp}\Bass.dll')) then ExtractTemporaryFile('Bass.dll');
  if not FileExists(ExpandConstant('{tmp}\BP.dll'))   then ExtractTemporaryFile('BP.dll');

  MusicButton:= BtnCreate(WizardForm.Handle, ScaleX(10), ScaleY(320), ScaleX(35), ScaleY(35), 'MusicButton.png', 1, True);
  BtnSetCursor(MusicButton, GetSysCursorHandle(32649));
  BtnSetEvent(MusicButton, BtnClickEventID, CallBackAddr('MusicButtonClick'));
  BtnSetVisibility(MusicButton, True);

  BASS_Init(-1, 44100, 0, 0, 0);
  mp3Handle:= BASS_StreamCreateFile(TRUE, 'Music.mp3', 0, 4);
  BASS_Start;
  BASS_ChannelPlay(mp3Handle, False);
end;

Procedure StopMusic();
begin
  BASS_Stop;
  BASS_Free;
end;

Procedure InitializeWizard();
begin
  InitMusic();
end;

Procedure DeinitializeSetup();
begin
  StopMusic();
end;
 

Вложения

Eisemann

Новичок
Код:
[Files]
Source: InstallFiles\MusicFiles\*.*; Flags: DontCopy DeleteAfterInstall

[Code]
var
MusicButton, mp3Handle: HWND;

Function BASS_Init(device: Integer; freq, flags: DWORD; win: hwnd; CLSID: Integer): Boolean; external 'BASS_Init@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_ChannelIsActive(handle: DWORD): Integer; external 'BASS_ChannelIsActive@files:BASS.dll stdcall delayload';
Function BASS_ChannelPause(handle: DWORD): Boolean; external 'BASS_ChannelPause@files:BASS.dll stdcall delayload';
Function BASS_Pause: Boolean; external 'BASS_Pause@files:BASS.dll stdcall delayload';
Function BASS_Stop: Boolean; external 'BASS_Stop@files:BASS.dll stdcall delayload';
Function BASS_Free: Boolean; external 'BASS_Free@files:BASS.dll stdcall delayload';
Function BASS_StreamCreateFileLib(MEM: BOOL; fil: PAnsiChar; offset, length, flags: DWORD): DWORD; external 'BASS_StreamCreateFile@{tmp}\bp.dll stdcall delayload';
Function BASS_StreamCreateFile(MEM: BOOL; fil: AnsiString; offset, flags: DWORD): DWORD;
var
  Size: Longint;
  Buffer: ansistring;
begin
  if MEM then begin
    Size:= ExtractTemporaryFileSize(fil);
    SetLength(Buffer,Size);
    ExtractTemporaryFileToBuffer(fil, Cast{#defined UNICODE ? "Ansi" : ""}StringToInteger(Buffer));
    Result:= BASS_StreamCreateFileLib(MEM, Buffer, 0, Size, flags);
  end else Result:= BASS_StreamCreateFileLib(MEM, fil, offset, 0, flags);
end;

Procedure MusicButtonClick(hBtn:HWND);
begin
  if BtnGetChecked(MusicButton) then BASS_ChannelPause(mp3Handle) else if BASS_ChannelIsActive(mp3Handle) = 3 then BASS_ChannelPlay(mp3Handle, False);
end;

Procedure InitMusic();
begin
  if not FileExists(ExpandConstant('{tmp}\Bass.dll')) then ExtractTemporaryFile('Bass.dll');
  if not FileExists(ExpandConstant('{tmp}\BP.dll'))   then ExtractTemporaryFile('BP.dll');

  MusicButton:= BtnCreate(WizardForm.Handle, ScaleX(10), ScaleY(320), ScaleX(35), ScaleY(35), 'MusicButton.png', 1, True);
  BtnSetCursor(MusicButton, GetSysCursorHandle(32649));
  BtnSetEvent(MusicButton, BtnClickEventID, CallBackAddr('MusicButtonClick'));
  BtnSetVisibility(MusicButton, True);

  BASS_Init(-1, 44100, 0, 0, 0);
  mp3Handle:= BASS_StreamCreateFile(TRUE, 'Music.mp3', 0, 4);
  BASS_Start;
  BASS_ChannelPlay(mp3Handle, False);
end;

Procedure StopMusic();
begin
  BASS_Stop;
  BASS_Free;
end;

Procedure InitializeWizard();
begin
  InitMusic();
end;

Procedure DeinitializeSetup();
begin
  StopMusic();
end;
Не понял, честно говоря
 

vint56

Ветеран
Проверенный
Eisemann,
#define Music

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

[Files]
Source: InstallFiles\MusicFiles\*.*; Flags: DontCopy DeleteAfterInstall

Код:
const
BtnClickEventID      = 1;

type
  #ifndef UNICODE
  AnsiChar = Char;
  #endif

  TBtnEventProc = procedure(h:HWND);

var
MusicButton, mp3Handle: HWND;

function WrapBtnCallback(Callback: TBtnEventProc; ParamCount: Integer): Longword; external 'wrapcallbackaddr@{tmp}\CallbackCtrl.dll stdcall delayload';
function BtnGetChecked(h:HWND):boolean; external 'BtnGetChecked@{tmp}\botva2.dll stdcall delayload';
function BtnCreate(hParent:HWND; Left,Top,Width,Height:integer; FileName:PAnsiChar; ShadowWidth:integer; IsCheckBtn:boolean):HWND;  external 'BtnCreate@{tmp}\botva2.dll stdcall delayload';
procedure BtnSetCursor(h:HWND; hCur:Cardinal); external 'BtnSetCursor@{tmp}\botva2.dll stdcall delayload';
function GetSysCursorHandle(id:integer):Cardinal; external 'GetSysCursorHandle@{tmp}\botva2.dll stdcall delayload';
procedure BtnSetEvent(h:HWND; EventID:integer; Event:Longword); external 'BtnSetEvent@{tmp}\botva2.dll stdcall delayload';
procedure BtnSetVisibility(h:HWND; Value:boolean); external 'BtnSetVisibility@{tmp}\botva2.dll stdcall delayload';
procedure gdipShutdown; external 'gdipShutdown@{tmp}\botva2.dll stdcall delayload';
procedure ImgApplyChanges(h:HWND); external 'ImgApplyChanges@{tmp}\botva2.dll stdcall delayload';

Function BASS_Init(device: Integer; freq, flags: DWORD; win: hwnd; CLSID: Integer): Boolean; external 'BASS_Init@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_ChannelIsActive(handle: DWORD): Integer; external 'BASS_ChannelIsActive@files:BASS.dll stdcall delayload';
Function BASS_ChannelPause(handle: DWORD): Boolean; external 'BASS_ChannelPause@files:BASS.dll stdcall delayload';
Function BASS_Pause: Boolean; external 'BASS_Pause@files:BASS.dll stdcall delayload';
Function BASS_Stop: Boolean; external 'BASS_Stop@files:BASS.dll stdcall delayload';
Function BASS_Free: Boolean; external 'BASS_Free@files:BASS.dll stdcall delayload';
Function BASS_StreamCreateFileLib(MEM: BOOL; fil: PAnsiChar; offset, length, flags: DWORD): DWORD; external 'BASS_StreamCreateFile@{tmp}\bp.dll stdcall delayload';
Function BASS_StreamCreateFile(MEM: BOOL; fil: AnsiString; offset, flags: DWORD): DWORD;

var
  Size: Longint;
  Buffer: ansistring;
begin
  if MEM then begin
    Size:= ExtractTemporaryFileSize(fil);
    SetLength(Buffer,Size);
    ExtractTemporaryFileToBuffer(fil, Cast{#defined UNICODE ? "Ansi" : ""}StringToInteger(Buffer));
    Result:= BASS_StreamCreateFileLib(MEM, Buffer, 0, Size, flags);
  end else Result:= BASS_StreamCreateFileLib(MEM, fil, offset, 0, flags);
end;

Procedure MusicButtonClick(hBtn:HWND);
begin
  if BtnGetChecked(MusicButton) then BASS_ChannelPause(mp3Handle) else if BASS_ChannelIsActive(mp3Handle) = 3 then BASS_ChannelPlay(mp3Handle, False);
end;

function InitializeSetup(): Boolean;
begin
  if not FileExists(ExpandConstant('{tmp}\Bass.dll')) then ExtractTemporaryFile('Bass.dll');
  if not FileExists(ExpandConstant('{tmp}\BP.dll'))   then ExtractTemporaryFile('BP.dll');
  if not FileExists(ExpandConstant('{tmp}\botva2.dll'))   then ExtractTemporaryFile('botva2.dll');
  if not FileExists(ExpandConstant('{tmp}\CallbackCtrl.dll'))   then ExtractTemporaryFile('CallbackCtrl.dll');
  if not FileExists(ExpandConstant('{tmp}\MusicButton.png'))   then ExtractTemporaryFile('MusicButton.png');
  Result:=True;
end;

Procedure InitializeWizard();
begin
  #ifdef Music
  MusicButton:=BtnCreate(WizardForm.Handle,ScaleX(10),ScaleY(320),ScaleX(35),ScaleY(35),ExpandConstant('{tmp}\MusicButton.png'),1,True);
  BtnSetCursor(MusicButton, GetSysCursorHandle(32649));
  BtnSetEvent(MusicButton, BtnClickEventID, CallBackAddr('MusicButtonClick'));
  BtnSetVisibility(MusicButton, True);
  BASS_Init(-1, 44100, 0, 0, 0);
  mp3Handle:= BASS_StreamCreateFile(TRUE, 'Music.mp3', 0, 4);
  BASS_Start;
  BASS_ChannelPlay(mp3Handle, False);
  ImgApplyChanges(WizardForm.Handle);
  #endif
end;

Procedure StopMusic();
begin
  BASS_Stop;
  BASS_Free;
end;

Procedure DeinitializeSetup();
begin
  StopMusic();
  gdipShutdown;
end;

[/SPOILER]
 

Nemko

Дилетант
Модератор
Eisemann, введите в поиске Youtube "Музыка в инсталлятор 2.0", там есть видео по установке BASS модуля с небольшими объяснениями...
 

Eisemann

Новичок
Eisemann,
#define Music

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

[Files]
Source: InstallFiles\MusicFiles\*.*; Flags: DontCopy DeleteAfterInstall

Код:
const
BtnClickEventID      = 1;

type
  #ifndef UNICODE
  AnsiChar = Char;
  #endif

  TBtnEventProc = procedure(h:HWND);

var
MusicButton, mp3Handle: HWND;

function WrapBtnCallback(Callback: TBtnEventProc; ParamCount: Integer): Longword; external 'wrapcallbackaddr@{tmp}\CallbackCtrl.dll stdcall delayload';
function BtnGetChecked(h:HWND):boolean; external 'BtnGetChecked@{tmp}\botva2.dll stdcall delayload';
function BtnCreate(hParent:HWND; Left,Top,Width,Height:integer; FileName:PAnsiChar; ShadowWidth:integer; IsCheckBtn:boolean):HWND;  external 'BtnCreate@{tmp}\botva2.dll stdcall delayload';
procedure BtnSetCursor(h:HWND; hCur:Cardinal); external 'BtnSetCursor@{tmp}\botva2.dll stdcall delayload';
function GetSysCursorHandle(id:integer):Cardinal; external 'GetSysCursorHandle@{tmp}\botva2.dll stdcall delayload';
procedure BtnSetEvent(h:HWND; EventID:integer; Event:Longword); external 'BtnSetEvent@{tmp}\botva2.dll stdcall delayload';
procedure BtnSetVisibility(h:HWND; Value:boolean); external 'BtnSetVisibility@{tmp}\botva2.dll stdcall delayload';
procedure gdipShutdown; external 'gdipShutdown@{tmp}\botva2.dll stdcall delayload';
procedure ImgApplyChanges(h:HWND); external 'ImgApplyChanges@{tmp}\botva2.dll stdcall delayload';

Function BASS_Init(device: Integer; freq, flags: DWORD; win: hwnd; CLSID: Integer): Boolean; external 'BASS_Init@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_ChannelIsActive(handle: DWORD): Integer; external 'BASS_ChannelIsActive@files:BASS.dll stdcall delayload';
Function BASS_ChannelPause(handle: DWORD): Boolean; external 'BASS_ChannelPause@files:BASS.dll stdcall delayload';
Function BASS_Pause: Boolean; external 'BASS_Pause@files:BASS.dll stdcall delayload';
Function BASS_Stop: Boolean; external 'BASS_Stop@files:BASS.dll stdcall delayload';
Function BASS_Free: Boolean; external 'BASS_Free@files:BASS.dll stdcall delayload';
Function BASS_StreamCreateFileLib(MEM: BOOL; fil: PAnsiChar; offset, length, flags: DWORD): DWORD; external 'BASS_StreamCreateFile@{tmp}\bp.dll stdcall delayload';
Function BASS_StreamCreateFile(MEM: BOOL; fil: AnsiString; offset, flags: DWORD): DWORD;

var
  Size: Longint;
  Buffer: ansistring;
begin
  if MEM then begin
    Size:= ExtractTemporaryFileSize(fil);
    SetLength(Buffer,Size);
    ExtractTemporaryFileToBuffer(fil, Cast{#defined UNICODE ? "Ansi" : ""}StringToInteger(Buffer));
    Result:= BASS_StreamCreateFileLib(MEM, Buffer, 0, Size, flags);
  end else Result:= BASS_StreamCreateFileLib(MEM, fil, offset, 0, flags);
end;

Procedure MusicButtonClick(hBtn:HWND);
begin
  if BtnGetChecked(MusicButton) then BASS_ChannelPause(mp3Handle) else if BASS_ChannelIsActive(mp3Handle) = 3 then BASS_ChannelPlay(mp3Handle, False);
end;

function InitializeSetup(): Boolean;
begin
  if not FileExists(ExpandConstant('{tmp}\Bass.dll')) then ExtractTemporaryFile('Bass.dll');
  if not FileExists(ExpandConstant('{tmp}\BP.dll'))   then ExtractTemporaryFile('BP.dll');
  if not FileExists(ExpandConstant('{tmp}\botva2.dll'))   then ExtractTemporaryFile('botva2.dll');
  if not FileExists(ExpandConstant('{tmp}\CallbackCtrl.dll'))   then ExtractTemporaryFile('CallbackCtrl.dll');
  if not FileExists(ExpandConstant('{tmp}\MusicButton.png'))   then ExtractTemporaryFile('MusicButton.png');
  Result:=True;
end;

Procedure InitializeWizard();
begin
  #ifdef Music
  MusicButton:=BtnCreate(WizardForm.Handle,ScaleX(10),ScaleY(320),ScaleX(35),ScaleY(35),ExpandConstant('{tmp}\MusicButton.png'),1,True);
  BtnSetCursor(MusicButton, GetSysCursorHandle(32649));
  BtnSetEvent(MusicButton, BtnClickEventID, CallBackAddr('MusicButtonClick'));
  BtnSetVisibility(MusicButton, True);
  BASS_Init(-1, 44100, 0, 0, 0);
  mp3Handle:= BASS_StreamCreateFile(TRUE, 'Music.mp3', 0, 4);
  BASS_Start;
  BASS_ChannelPlay(mp3Handle, False);
  ImgApplyChanges(WizardForm.Handle);
  #endif
end;

Procedure StopMusic();
begin
  BASS_Stop;
  BASS_Free;
end;

Procedure DeinitializeSetup();
begin
  StopMusic();
  gdipShutdown;
end;

[/SPOILER]
Е получается
 

Timick

Старожил
Eisemann, ну они же в паблике - делай что хочешь.
Но скинь сюда свой скрипт, который ты дорабатываешь.
Так просто удобней будет, согласись
 
Сверху