Button 如何在Inno设置中设置停止和暂停/恢复/播放音乐按钮

Button 如何在Inno设置中设置停止和暂停/恢复/播放音乐按钮,button,inno-setup,playback,pause,Button,Inno Setup,Playback,Pause,我想在所有页面的左下角创建两个彼此相邻的按钮,就像重新加载一样 第一个按钮显示暂停和恢复命令(如果单击暂停,按钮将自动切换到恢复) 另一个按钮显示停止命令(如果我单击停止,下一个按钮将自动切换到从开始播放) 此代码只是添加了暂停/恢复/从开始播放*按钮和停止按钮 问题是:如果我按下“停止”按钮,音乐将永久停止,播放表单开始按钮将永远不会出现。 [设置] AppName=低音音频项目 AppVersion=1.0 DefaultDirName={pf}\Bass音频项目 [档案] 资料来源:Bas

我想在所有页面的左下角创建两个彼此相邻的按钮,就像重新加载一样

第一个按钮显示暂停和恢复命令(如果单击暂停,按钮将自动切换到恢复)

另一个按钮显示停止命令(如果我单击停止,下一个按钮将自动切换到从开始播放)

此代码只是添加了暂停/恢复/从开始播放*按钮和停止按钮

问题是:如果我按下“停止”按钮,音乐将永久停止,播放表单开始按钮将永远不会出现。

[设置]
AppName=低音音频项目
AppVersion=1.0
DefaultDirName={pf}\Bass音频项目
[档案]
资料来源:Bass.dll;标志:dontcopy
资料来源:AudioFile.mp3;标志:dontcopy
[守则]
常数
低音采样环路=4;
低音\激活\停止=0;
低音_激活_播放=1;
低音_激活_暂停=2;
低音激活暂停=3;
BASS_UNICODE=8000000美元;
低音配置语音流=5;
常数
#ifndef UNICODE
EncodingFlag=0;
#否则
EncodingFlag=BASS_UNICODE;
#恩迪夫
类型
HSTREAM=DWORD;
函数BASS_Init(设备:LongInt;频率,标志:DWORD;
win:HWND;clsid:Cardinal):BOOL;
外部低音_Init@files:bass.dll stdcall';
函数BASS_StreamCreateFile(mem:BOOL;f:string;offset1:DWORD;
偏移量2:DWORD;长度1:DWORD;长度2:DWORD;标志:DWORD):hs流;
外部低音_StreamCreateFile@files:bass.dll stdcall';
功能启动:BOOL;
外部低音_Start@files:bass.dll stdcall';
功能低音暂停:BOOL;
外部低音_Pause@files:bass.dll stdcall';
函数BASS_Stop():布尔值;
外部低音_Stop@files:BASS.dll stdcall delayload';
功能BASS_ChannelPlay(手柄:DWORD;重启:BOOL):BOOL;
外部低音_ChannelPlay@files:bass.dll stdcall';
函数BASS_SetConfig(选项:DWORD;值:DWORD):BOOL;
外部低音_SetConfig@files:bass.dll stdcall';
功能BASS_ChannelIsActive(句柄:DWORD):DWORD;
外部低音_ChannelIsActive@files:bass.dll stdcall';
无低音功能:BOOL;
外部低音_Free@files:bass.dll stdcall';
变量
声流:HSTREAM;
暂停暂停播放按钮:TNewButton;
停止按钮:t新按钮;
程序恢复按钮单击(发件人:ToObject);向前地
程序PauseButtonClick(发送方:ToObject);
开始
如果你停下来
开始
PauseResumePlayButton.标题:='Resume';
PauseResumePlayButton.OnClick:=@ResumeButton单击;
结束;
结束;
程序恢复按钮单击(发件人:ToObject);
开始
如果你开始的话
开始
PauseResumePlayButton。标题:=“暂停”;
PauseResumePlayButton.OnClick:=@PauseButtonClick;
结束;
结束;
程序播放按钮点击(发送方:ToObject);
开始
如果你开始的话
开始
PauseResumePlayButton。标题:=“暂停”;
PauseResumePlayButton.OnClick:=@PauseButtonClick;
结束;
结束;
程序停止按钮单击(发送方:ToObject);
开始
如果你停下来
开始
暂停暂停播放按钮。标题:=“播放”;
PauseResumePlayButton.OnClick:=@PlayButtonClick;
结束;
开始
自由低音;
结束;
结束;
过程初始化Wizard();
开始
提取临时文件('AudioFile.mp3');
如果BASS_Init(-144100,0,0,0)那么
开始
声音流:=
BASS_流文件(
False,ExpandConstant({tmp}\AudioFile.mp3'),0,0,0,0,
编码标志或低音(采样循环);
BASS_SetConfig(BASS_CONFIG_GVOL_STREAM,2500);
低音/通道播放(声音流,假);
StopButton:=TNewButton.Create(WizardForm);
StopButton.Parent:=WizardForm;
停止按钮。左:=
WizardForm.ClientWidth-
WizardForm.CancelButton.Left-WizardForm.CancelButton.Width;
StopButton.Top:=WizardForm.CancelButton.Top;
StopButton.Width:=WizardForm.CancelButton.Width;
StopButton.Height:=WizardForm.CancelButton.Height;
停止按钮。标题:=“停止”;
StopButton.OnClick:=@StopButton单击;
PauseResumePlayButton:=TNewButton.Create(WizardForm);
PauseResumePlayButton.Parent:=向导窗体;
暂停暂停播放按钮。左侧:=
WizardForm.ClientWidth-
WizardForm.NextButton.Left-WizardForm.NextButton.Width;
PauseResumePlayButton.Top:=WizardForm.CancelButton.Top;
PauseResumePlayButton.Width:=WizardForm.CancelButton.Width;
PauseResumePlayButton.Height:=WizardForm.CancelButton.Height;
PauseResumePlayButton。标题:=“暂停”;
PauseResumePlayButton.OnClick:=@PauseButtonClick;
结束;
结束;
程序去初始化设置;
开始
自由低音;
结束;

使用单个
OnClick
处理程序来实现这一点不是一个好主意

根据需要动态更改
OnClick
处理程序,以获得更直观的代码:

const
低音采样环路=4;
低音\激活\停止=0;
低音_激活_播放=1;
低音_激活_暂停=2;
低音激活暂停=3;
BASS_UNICODE=8000000美元;
低音配置语音流=5;
常数
#ifndef UNICODE
EncodingFlag=0;
#否则
EncodingFlag=BASS_UNICODE;
#恩迪夫
类型
HSTREAM=DWORD;
函数BASS_Init(设备:LongInt;频率,标志:DWORD;
win:HWND;clsid:Cardinal):布尔;
外部低音_Init@files:bass.dll stdcall';
函数BASS_StreamCreateFile(mem:Boolean;f:string;offset1:DWORD;
偏移量2:DWORD;长度1:DWORD;长度2:DWORD;标志:DWORD):hs流;
外部低音_StreamCreateFile@files:bass.dll stdcall';
函数BASS_ChannelPlay(句柄:DWORD;重新启动:布尔):布尔;
外部低音_ChannelPlay@files:bass.dll stdcall';
函数BASS_ChannelPause(句柄:DWORD):布尔值;
外部低音_ChannelPause@files:bass.dll stdcall';
函数BASS_SetConfig(选项:DWORD;值:DWORD):布尔值;
外部低音_SetConfig@files:bass.dll stdcall';
功能BASS_ChannelIsActive(句柄:DWORD):DWORD;
外部低音_ChannelIsActive@files:bass.dll stdcall';
变量
声流:HSTREAM;
暂停暂停播放按钮:TNewButton;
停止按钮:t新按钮;
程序恢复按钮单击(发送
function BASS_ChannelPlay(handle: DWORD; restart: Boolean): Boolean;
  external 'BASS_ChannelPlay@files:bass.dll stdcall';
function BASS_ChannelPause(handle: DWORD): Boolean;
  external 'BASS_ChannelPause@files:bass.dll stdcall';
function BASS_ChannelIsActive(handle: DWORD): DWORD;
  external 'BASS_ChannelIsActive@files:bass.dll stdcall';

procedure MusicButtonOnClick(Sender: TObject);
begin
  if (BASS_ChannelIsActive(SoundStream) = 3)
 then
  BASS_ChannelPlay(SoundStream, False)
 else
  BASS_ChannelPause(SoundStream) 
end;
  YourButtonName.OnClick := @MusicButtonOnClick;