Вопрос Бегущая строка в Инсталляторе

Nemko

Дилетант
Модератор
А на начальную страницу можно вывести ТЫК )))
Можно заменив строчку if CurPageID = wpInstalling then begin на if CurPageID = wpWelcome then begin, но кнопка будет только на странице "Приветствие".
А чтобы кнопка была на всех страницах нужно вынуть её из процедуры CurPageChanged(CurPageID: Integer) и вставить в процедуру InitializeWizard().
 

Kotuy

Новичок
Nemko, Всё разобрался, но чутка не то. Мне надо что бы она не играла сразу при запуске установки, а играла когда сам чел вкл музыку
 

vint56

Ветеран
Проверенный
Kotuy, ты правильно перенес пример от Nemko
#include "botva2.iss"
#include "BASS.iss"

[Setup]
AppName=Bass
AppVerName=Bass
DefaultDirName={sd}\Bass

[Files]
Source: BASS_Files\*; DestDir: {tmp}; Flags: dontcopy
Source: {win}\help\*; DestDir: {app}\Files; Flags: external recursesubdirs
Source: music.mp3; DestDir: {tmp}; Flags: dontcopy

Код:
var
  ButtonSound: HWND;
procedure InitializeWizard();
begin
    ExtractTemporaryFile('BASS.dll');
    ExtractTemporaryFile('CallbackCtrl.dll');
    ExtractTemporaryFile('botva2.dll');
    ExtractTemporaryFile('Button.png');
    ExtractTemporaryFile('Music.mp3');
    BASS_Init('{tmp}\Music.mp3');
    _BASS_ChannelPlay(BASS_Cfg.Mp3Handle, True);
    ButtonSound:=BtnCreate(WizardForm.Handle,10,326,73,22, ExpandConstant('{tmp}\button.png'),0,False);
    BtnSetEvent(ButtonSound,BtnClickEventID,WrapBtnCallback(@BASS_OnOffClick,1));
    BtnSetText(ButtonSound,'Тык');
    BtnSetVisibility(ButtonSound,True);
    ImgApplyChanges(WizardForm.Handle);
end;

procedure CurPageChanged(CurPageID: Integer);
begin
  if CurPageID = wpInstalling then begin
  end
  else
  _BASS_ChannelPause(BASS_Cfg.Mp3Handle);
  if CurPageID = wpFinished then begin
  BtnSetVisibility(ButtonSound,False);
end;
end;

procedure DeinitializeSetup;
begin
    BASS_DeInit;
    gdipShutdown
end;
[/SPOILER]
 

vint56

Ветеран
Проверенный
Kotuy, при запуске установщика у нас появляется страница Welcome и сразу пауза
либо это
///////////////////////////////////////////////////////////////////////////////////
procedure CurPageChanged(CurPageID: Integer);
begin
if CurPageID = wpWelcome then
begin
if _BASS_ChannelPause(BASS_Cfg.Mp3Handle)then
end;
end;
///////////////////////////////////////////////////////////////////////////////////
либо так смотря как сделано у тебя
procedure CurPageChanged(CurPageID: Integer);
begin
Case CurPageID of
wpWelcome:
begin
_BASS_ChannelPause(BASS_Cfg.Mp3Handle);
end;
end;
end;
///////////////////////////////////////////////////////////////////////////////////
 

Kotuy

Новичок
Nemko, vint56, Благодарю за помощь.
vint56,
if _BASS_ChannelPause(BASS_Cfg.Mp3Handle)then
Вот эта строчка всё подправила.

Но возможно ли добавить такую паузу в стандартный скрипт музыки?

Код:
#include "botva2.iss"
#include "BASS_Module.iss"

[Setup]
AppName=BassExample
AppVerName=BassExample
DefaultDirName={pf}\BassExample

[Files]
Source: BASS_Files\*;  DestDir: {tmp}; Flags: dontcopy
Source: music.mp3;  DestDir: {tmp}; Flags: dontcopy

[code]
procedure InitializeWizard();
begin
  ExtractTemporaryFile('BASS.dll');
  ExtractTemporaryFile('CallbackCtrl.dll');
  ExtractTemporaryFile('botva2.dll');
  ExtractTemporaryFile('MusicButton.png');
  ExtractTemporaryFile('Music.mp3');

  BASS_Init('{tmp}\Music.mp3') //Запускаем музыку
  //Можно добавить в инсталл несколько песен
  //BASS_Init(ExpandConstant('{tmp}\*'))        //Поиск по маске
  BASS_CreateOnOffButton(WizardForm, '{tmp}\MusicButton.png', 20, 320, 36, 36, 4) //Создаем кнопку вкл/выкл
end;

procedure DeinitializeSetup();
begin
  BASS_DeInit; //Освобождаем процесс
  gdipShutdown
end;
 
Последнее редактирование:

vint56

Ветеран
Проверенный
Kotuy, а что мешает добавить эту строчку она взята из стандартного модуля BASS_Module if _BASS_ChannelPause(BASS_Cfg.Mp3Handle)then и тогда тебе придется перерисовать кнопку только будет 1 косяк если вернутся на страницу привествия
либо это
///////////////////////////////////////////////////////////////////////////////////
procedure CurPageChanged(CurPageID: Integer);
begin
if CurPageID = wpWelcome then
begin
if _BASS_ChannelPause(BASS_Cfg.Mp3Handle)then
end;
end;
///////////////////////////////////////////////////////////////////////////////////
либо так смотря как сделано у тебя
procedure CurPageChanged(CurPageID: Integer);
begin
Case CurPageID of
wpWelcome:
begin
_BASS_ChannelPause(BASS_Cfg.Mp3Handle);
end;
end;
end;
///////////////////////////////////////////////////////////////////////////////////
 

Вложения

Kotuy

Новичок
vint56, Благодарю. Добавил в стандартный скрипт в низ строчку if _BASS_ChannelPause(BASS_Cfg.Mp3Handle)then и всё теперь работает. Кнопку переделать не проблема.

только будет 1 косяк если вернутся на страницу привествия
Что за косяк, не чего не изменилось вроде
 

nik1967

Old Men
Проверенный
Чего вы огород городите?
Код:
#include "botva2.iss"
#include "BASS_Module.iss"

[Setup]
AppName=BassExample
AppVerName=BassExample
DefaultDirName={pf}\BassExample

[Files]
Source: BASS_Files\*;  DestDir: {tmp}; Flags: dontcopy
Source: music.mp3;  DestDir: {tmp}; Flags: dontcopy

[code]
procedure InitializeWizard();
begin
  ExtractTemporaryFile('BASS.dll');
  ExtractTemporaryFile('CallbackCtrl.dll');
  ExtractTemporaryFile('botva2.dll');
  ExtractTemporaryFile('MusicButton.png');
  ExtractTemporaryFile('Music.mp3');

  BASS_Init('{tmp}\Music.mp3') //Запускаем музыку
  //Можно добавить в инсталл несколько песен
  //BASS_Init(ExpandConstant('{tmp}\*'))  //Поиск по маске
  BASS_CreateOnOffButton(WizardForm, '{tmp}\MusicButton.png', 20, 320, 36, 36, 4) //Создаем кнопку вкл/выкл
   _BASS_ChannelPause(BASS_Cfg.Mp3Handle);
end;

procedure DeinitializeSetup();
begin
  BASS_DeInit; //Освобождаем процесс
  gdipShutdown
end;
 
Последнее редактирование:

Kotuy

Новичок
Подскажите пожалуйста скрипт бегущей строки, или киньте ссылку на тему с ней (что то не нашёл не где её). Заранее благодарю
 

vint56

Ветеран
Проверенный
Kotuy, только я изменил innocallback.dll на CallbackCtrl.dll
Код:
="Пример От YURSHAT из скрипта S.T.A.L.K.E.R.: Тень Чернобыля"]
#define GameName "S.T.A.L.K.E.R.: Тень Чернобыля"

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

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

[Files]
Source: "InstallFiles\*"; Flags: dontcopy;

[ code]
type
  TTimerProc = procedure (h: Longword; msg: Longword; idevent: Longword; dwTime: Longword);
  TPercentsProc = function (h:hWnd;Msg,wParam,lParam:Longint):Longint;

const
  ARTitleTimerID       = 2;

var
GameNameLabel: TLabel;

function SetTimer(hWnd, nIDEvent, uElapse, lpTimerFunc: LongWord): LongWord; external 'SetTimer@user32.dll stdcall';
function KillTimer(hWnd, nIDEvent: LongWord): LongWord; external 'KillTimer@user32.dll stdcall';
function WrapTimerProc(callback:TTimerProc; paramcount:integer):LongWord; external 'wrapcallbackaddr@{tmp}\CallbackCtrl.dll stdcall delayload';

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

procedure GameName(h: Longword; msg: Longword; idevent: Longword; dwTime: Longword);
var
  str: string;
begin
  str:=GameNameLabel.Caption;
  GameNameLabel.Caption:=Copy(str,2,Length(str)-1)+Copy(str,1,1);
end;

procedure InitializeWizard();
begin
  GameNameLabel:= TLabel.Create(WizardForm);
  with GameNameLabel do begin
    Parent:= WizardForm;
    AutoSize:= False;
    SetBounds(ScaleX(15), ScaleY(325), ScaleX(555), ScaleY(20));
    Transparent:= True;
    Caption:= ExpandConstant('{#GameName}                                                                                                     ');
    Font.Color:=$008080;
    Font.Size:=13;
    Font.Style:= [fsBold];
  end;
  SetTimer(WizardForm.Handle,ARTitleTimerID,120,WrapTimerProc(@GameName,4));
end;

procedure DeinitializeSetup();
begin
  KillTimer(WizardForm.Handle,ARTitleTimerID);
end;
Код:
#ifndef IS_ENHANCED
  #error Enhanced edition of Inno Setup (restools) is required to compile this script
#endif

#define GameName "S.T.A.L.K.E.R.: Тень Чернобыля"

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

[code]
var
GameNameLabel: TLabel;
Timer        : LongWord;

function SetTimer(hWnd, nIDEvent, uElapse, lpTimerFunc: LongWord): LongWord; external 'SetTimer@user32.dll stdcall';
function KillTimer(hWnd, nIDEvent: LongWord): LongWord; external 'KillTimer@user32.dll stdcall';

procedure GameName(h: Longword; msg: Longword; idevent: Longword; dwTime: Longword);
var
  str: string;
begin
  str:=GameNameLabel.Caption;
  GameNameLabel.Caption:=Copy(str,2,Length(str)-1)+Copy(str,1,1);
end;

procedure InitializeWizard();
begin
  GameNameLabel:= TLabel.Create(WizardForm);
  with GameNameLabel do begin
    Parent:= WizardForm;
    AutoSize:= False;
    SetBounds(ScaleX(15), ScaleY(325), ScaleX(555), ScaleY(20));
    Transparent:= True;
    Caption:= ExpandConstant('{#GameName}                                                                                                     ');
    Font.Color:=$000000;
    Font.Size:=13;
    Font.Style:= [fsBold];
  end;
  Timer := SetTimer(WizardForm.Handle, 1, 150 , CallbackAddr('GameName'));
end;

procedure DeinitializeSetup();
begin
KillTimer(WizardForm.Handle, Timer);
end;
 
Последнее редактирование:

Kotuy

Новичок
vint56, Благодарю. Да и по первому примеру, всё работает по сути.
 
Сверху