论坛风格切换切换到宽版
  • 2998阅读
  • 2回复

怎样将关于按钮改为开启/关闭音乐按钮? [复制链接]

上一主题 下一主题
离线凌~叶
 

发帖
17
金钱
130
威望
13
只看楼主 倒序阅读 0 发表于: 2014-02-23
http://bbs.hanzify.org/read.php?tid=49620&hl=%E8%83%8C%E6%99%AF%E9%9F%B3%E4%B9%90

看了虎版的这个帖子基本上完美解决了播放音乐的问题,但是我想在一个按键上实现播放和关闭,我试了好久都不行,暂停了,就再也按不回来播放。

打开时候,按钮显示:关闭音乐。点击了关闭音乐,然后按钮显示:打开音乐。

不知道虎版有办法,在一个按钮上实行两个功能吗?

麻烦虎版了
离线gnatix

发帖
7696
金钱
-8279
威望
-828
只看该作者 1 发表于: 2014-02-23
[Code]
Type
  HSAMPLE = DWORD;
  HCHANNEL = DWORD;

var
  MusicSwitchLabel1: TNewStaticText;
  sample: HSAMPLE;
  channel: HCHANNEL;

// 以下是所调用的插件函数
function BASS_Init(device: Integer; freq, flags: DWORD; win: HWND; clsid: string): Boolean;
external 'BASS_Init@files:BASS.dll stdcall delayload';

procedure BASS_Free();
external 'BASS_Free@files:BASS.dll stdcall delayload';

function BASS_SampleLoad(mem: BOOL; f: PAnsiChar; offset, length, max, flags: DWORD): HSAMPLE;
external 'BASS_SampleLoad@files:BASS.dll stdcall delayload';

function BASS_ChannelPlay(handle: DWORD; restart: BOOL): BOOL;
external 'BASS_ChannelPlay@files:BASS.dll stdcall delayload';

function BASS_ChannelPause(handle: DWORD): BOOL;
external 'BASS_ChannelPause@files:BASS.dll stdcall delayload';

function BASS_SampleGetChannel(handle: HSAMPLE; onlynew: BOOL): HCHANNEL;
external 'BASS_SampleGetChannel@files:BASS.dll stdcall delayload';

procedure callplug(parentwnd: Integer; pluginname,funcname,param1,param2,param3,param4,param5,param6,param7,param8,param9,param10: PAnsiChar);
external 'callplug@files:callnsis.dll stdcall delayload';

// 以下是点击“关于”按钮后的响应函数
procedure AboutButtonOnClick(Sender: TObject);
begin
  MsgBox('这是你的信息。'#13#10'这是你的信息的第二行。', mbInformation, MB_OK);
end;

// 以下是点击“关闭音乐”按钮后的响应函数
procedure MusicSwitchLabel1OnClick(Sender: TObject);
begin
  if MusicSwitchLabel1.Caption = '关闭音乐' then
    begin
      BASS_ChannelPause(channel);
      MusicSwitchLabel1.Caption := '打开音乐';
    end
  else
    begin
      BASS_ChannelPlay(channel, false);
      MusicSwitchLabel1.Caption := '关闭音乐';
    end;
end;

// 安装向导初始化函数
procedure InitializeWizard();
var
  AboutButton: TButton;
  BGMusicFile, SplashFile: string;
begin
  // 创建“关于”按钮
  AboutButton := TButton.Create(WizardForm);
  AboutButton.Left := WizardForm.ClientWidth - WizardForm.CancelButton.Left - WizardForm.CancelButton.Width;
  AboutButton.Top := WizardForm.CancelButton.Top;
  AboutButton.Width := WizardForm.CancelButton.Width;
  AboutButton.Height := WizardForm.CancelButton.Height;
  AboutButton.Caption := '关于(&A)...';
  AboutButton.OnClick := @AboutButtonOnClick;
  AboutButton.Parent := WizardForm;

  // 创建文字标签作为“打开音乐”或“关闭音乐”按钮
  MusicSwitchLabel1 := TNewStaticText.Create(WizardForm);
  MusicSwitchLabel1.Left := AboutButton.Left + ScaleX(110);
  MusicSwitchLabel1.Top := WizardForm.CancelButton.Top + ScaleY(7);
  MusicSwitchLabel1.Width := ScaleX(50);
  MusicSwitchLabel1.Height := ScaleY(12);
  MusicSwitchLabel1.Font.Color := clBlue;
  MusicSwitchLabel1.Font.Style := [fsUnderline];
  MusicSwitchLabel1.Cursor := crHand;
  MusicSwitchLabel1.Caption := '关闭音乐';
  MusicSwitchLabel1.OnClick := @MusicSwitchLabel1OnClick;
  MusicSwitchLabel1.Parent := WizardForm;
  
  // 释放临时文件
  ExtractTemporaryFile('BASS.dll');
  ExtractTemporaryFile('CallNSIS.DLL');
  ExtractTemporaryFile('NewAdvSplash.DLL');
  ExtractTemporaryFile('mymusic.mp3');
  ExtractTemporaryFile('splash.gif');

  BGMusicFile := ExpandConstant('{tmp}\mymusic.mp3');
  SplashFile := ExpandConstant('{tmp}\splash.gif');

  // 播放背景音乐
  if not BASS_Init(-1,44100,0,0,'') then
    BASS_Free;
  sample := BASS_SampleLoad(false, PAnsiChar(BGMusicFile), 0, 0, 1, 4);
  if sample<>0 then
    begin
    channel:= BASS_SampleGetChannel(sample, false);
    BASS_ChannelPlay(channel, true);
    end;

  // 闪屏:显示时间 1600、淡入 800、淡出 500、透明颜色 -2 (表示 gif 图像本身透明)
  callplug(0,ExpandConstant('{tmp}\NewAdvSplash.dll'),'show','1600','800','500','-2',SplashFile,'','','','','');

  // 以下是安装向导初始化函数的其它代码
  // 请自己加上
end;

// 以下是其它 CODE 段代码
// 请自己加上
离线凌~叶

发帖
17
金钱
130
威望
13
只看该作者 2 发表于: 2014-02-24
回 1楼(gnatix) 的帖子
gnatix:Type  HSAMPLE = DWORD;  HCHANNEL = DWORD;....... (2014-02-23 23:39) 

感谢虎版啊。虎版这个if。我折腾了一下午就是搞不清楚写法。我怎么样才可以说基本的了解写法。才不会说怎么简单的小问题都搞不定