Адаптация кода под Юникод-версию

Александр85

Новичок
Здравствуйте!
Кто может "адаптировать" код,, что представлен ниже или предложить свой вариант для Юникод-версии 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;
В этом коде всего 2 задачи:
1. Проигрывание трекерной музыки XM., MOD и т.п. - если можно ещё добавить кнопки пауза - воспроизведение или просто выключить музыку?
2. Заставить пользователя "читать" )) Лицензионного соглашение - пока пользователь до конца не прокрутит ползунок вниз всего текста + пока не пройдёт определённое время - кнопка Принять соглашение и Далее не будут активны!

Если можно "адаптировать" этот код под Юникод-версию, помогите, пожалуйста, или предложите, пожалуйста свой вариант для выполнения этих задач на Юникод-версии + сторонние библиотеки приложите, если они потребуются.
Спасибо!
 
Последнее редактирование:

Crachlow

Старожил
Спасибо заработало!
А как добавить в этот код - управление музыкой, хотя бы кнопкой-значком вкл/выкл, типа:

Это в Code после функций
var
MusicButton: TButton;
///******************************************
procedure MusicButtonOnClick(Sender: TObject);
begin
if MusicButton.Caption = 'S' then
begin
MusicButton.Caption := 'P';
BASSMOD_MusicStop;
end else
begin
MusicButton.Caption := 'S';
BASSMOD_MusicPlay;
end;
end;
///*******************************************
Это в InitializeWizard
///**************************************
MusicButton := TButton.Create(WizardForm);
with MusicButton do
begin
Left := WizardForm.ClientWidth - WizardForm.CancelButton.Left - WizardForm.CancelButton.Width;
Top := WizardForm.CancelButton.Top;
Width := WizardForm.CancelButton.Height;
Height := WizardForm.CancelButton.Height;
Caption := 'S';
Hint := 'Вкл.Выкл. музыку';
ShowHint := True;
OnClick := @MusicButtonOnClick;
Parent := WizardForm;
///*****************************************
 
Сверху