Александр85
Новичок
Здравствуйте!
Кто может "адаптировать" код,, что представлен ниже или предложить свой вариант для Юникод-версии Inno Setup 5.6.1 и 6xx?
Под ASCII последних версий 5x - он работает более менее, нормально, под Юникод не работают вообще!
В этом коде всего 2 задачи:
1. Проигрывание трекерной музыки XM., MOD и т.п. - если можно ещё добавить кнопки пауза - воспроизведение или просто выключить музыку?
2. Заставить пользователя "читать" )) Лицензионного соглашение - пока пользователь до конца не прокрутит ползунок вниз всего текста + пока не пройдёт определённое время - кнопка Принять соглашение и Далее не будут активны!
Если можно "адаптировать" этот код под Юникод-версию, помогите, пожалуйста, или предложите, пожалуйста свой вариант для выполнения этих задач на Юникод-версии + сторонние библиотеки приложите, если они потребуются.
Спасибо!
Кто может "адаптировать" код,, что представлен ниже или предложить свой вариант для Юникод-версии Inno Setup 5.6.1 и 6xx?
Под ASCII последних версий 5x - он работает более менее, нормально, под Юникод не работают вообще!
Код:
[Setup]
AppName=My Prog
AppVersion=1.0
DefaultDirName={pf}\Me Prog
LicenseFile=embedded\License.txt
[Files]
Source: "embedded\BASSMOD.dll"; DestDir: "{tmp}"; Flags: dontcopy
Source: "embedded\music.xm"; DestDir: "{tmp}"; Flags: dontcopy
Source: "embedded\InnoCallback.dll"; Flags: dontcopy
Source: "{app}\*"; DestDir: "{app}"; Flags: ignoreversion overwritereadonly recursesubdirs createallsubdirs sortfilesbyextension
[Code]
const
BASS_MUSIC_RAMP = 1;
BASS_MUSIC_LOOP = 3;
BASS_MUSIC_SURROUND = 512;
function BASSMOD_Init(device: Integer; freq, flags: DWORD): Boolean;
external 'BASSMOD_Init@files:BASSMOD.dll stdcall delayload';
function BASSMOD_MusicStop(): Boolean;
external 'BASSMOD_MusicStop@files:BASSMOD.dll stdcall delayload';
function BASSMOD_MusicLoad(mem: BOOL; f: PChar; offset: DWORD; length: DWORD; flags: DWORD): Boolean;
external 'BASSMOD_MusicLoad@files:BASSMOD.dll stdcall delayload';
function BASSMOD_MusicPlay(): Boolean;
external 'BASSMOD_MusicPlay@files:BASSMOD.dll stdcall delayload';
procedure BASSMOD_Free();
external 'BASSMOD_Free@files:BASSMOD.dll stdcall delayload';
type
TProc = procedure(HandleW, msg, idEvent, TimeSys: LongWord);
const
EM_GETFIRSTVISIBLELINE = $CE; TestLine = 5;
var
TimerID: LongWord;
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 OnTimer(HandleW, msg, idEvent, TimeSys: LongWord);
var
CurrLine: integer;
begin
CurrLine:= SendMessage(WizardForm.LicenseMemo.Handle, EM_GETFIRSTVISIBLELINE, 0, 0);
If CurrLine >= TestLine then
begin
WizardForm.LicenseAcceptedRadio.Enabled:= True;
KillTimer(0, TimerID);
end;
end;
procedure InitializeWizard();
var
Name1: string;
begin
ExtractTemporaryFile('BASSMOD.dll');
ExtractTemporaryFile('music.xm');
WizardForm.LicenseAcceptedRadio.Enabled:= False;
if not BASSMOD_Init(-1,44100,0)
then
begin
MsgBox('BASSMOD не смогла инициализироваться, проигрывание музыки невозможно.', mbError, MB_OK)
BASSMOD_Free;
end
else
Name1:=ExpandConstant('{tmp}\music.xm');
if BASSMOD_MusicLoad(FALSE, PChar(Name1), 0, 0, 4 or 512 or 32 or 1) then
BASSMOD_MusicPlay;
end;
procedure CurPageChanged(CurPageID: Integer);
var
pfunc: LongWord;
begin
if CurPageID = wpLicense then
begin
pfunc:= WrapTimerProc(@OnTimer, 4);
TimerID:= SetTimer(0, 0, 500, pfunc);
end else
KillTimer(0, TimerID);
end;
procedure DeInitializeSetup();
begin
BASSMOD_MusicStop;
BASSMOD_Free();
KillTimer(0, TimerID);
end;
1. Проигрывание трекерной музыки XM., MOD и т.п. - если можно ещё добавить кнопки пауза - воспроизведение или просто выключить музыку?
2. Заставить пользователя "читать" )) Лицензионного соглашение - пока пользователь до конца не прокрутит ползунок вниз всего текста + пока не пройдёт определённое время - кнопка Принять соглашение и Далее не будут активны!
Если можно "адаптировать" этот код под Юникод-версию, помогите, пожалуйста, или предложите, пожалуйста свой вариант для выполнения этих задач на Юникод-версии + сторонние библиотеки приложите, если они потребуются.
Спасибо!
Последнее редактирование: