⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mp3play.pas

📁 阅读器工具比较少,传一个上来,比较值得下载一看
💻 PAS
字号:
unit mp3play;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  ExtCtrls, Buttons, ComCtrls, StdCtrls, Registry, MPEGPLAYLib_TLB;

type
  Tf_mp3play = class(TForm)
    Sound_Panel: TPanel;
    Play: TSpeedButton;
    Stop: TSpeedButton;
    Eject: TSpeedButton;
    First: TSpeedButton;
    Last: TSpeedButton;
    TrackBar: TTrackBar;
    Open_Sound: TOpenDialog;
    BtnRepeat: TSpeedButton;
    BtnPlay: TSpeedButton;
    BtnPause: TSpeedButton;
    Sound_Name: TListBox;
    Current_Filename: TEdit;
    Cancel: TSpeedButton;
    procedure FormCreate(Sender: TObject);
    procedure EjectClick(Sender: TObject);
    procedure Mp3PlayActFrame(Sender: TObject; ActFrame: Integer);
    procedure Mp3PlayThreadEnded(Sender: TObject);
    procedure RegMp3;
    procedure FormDestroy(Sender: TObject);
    procedure Sound_PanelMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
    procedure CancelClick(Sender: TObject);
    procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
    procedure StopClick(Sender: TObject);
    procedure PlayClick(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure EnableBtn(Enable : Boolean);
    procedure FirstClick(Sender: TObject);
    procedure TrackBarChange(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
    Reg_ini : TRegIniFile;  //注册表变量
  end;

var
  f_mp3play: Tf_mp3play;

  //mp3变量
  kmp3play : TMp3Play;      //mp3控件
  existmp3 : Boolean;       //是否存在mp3控件
  Play_All_Flag : Boolean;  //能否播放其中一个MP3
  sound_number : integer;   //播放的mp3数目
  FirstBoot : Boolean;      //第一次启动标志
  state : (stPlay, stPause, stStop, stEject, stError);  //MP3播放器状态

implementation

uses main, setup;

{$R *.DFM}

procedure Tf_mp3play.FormCreate(Sender: TObject);
begin
  RegMp3;  //注册mp3控件
  try      //建立mp3控件
     kmp3play:=TMp3Play.Create(self);
     kmp3play.Top:=-300;
     kmp3play.Left:=-300;
     kmp3play.Parent:=f_mp3play;
     kmp3play.OnActFrame:=Mp3PlayActFrame;
     kmp3play.OnThreadEnded:=Mp3PlayThreadEnded;
     kmp3play.TabStop:=False;
     existmp3:=True;   //存在MP3控件
     state:=stEject;   //打开状态
  except
     existmp3:=False;  //不存在MP3控件
     state:=stError;   //错误状态
  end;

  //初始化MP3设置
  FirstBoot:=True;     //写标志:第一次启动
  sound_number:=0;     //mp3数目写0
  Play_All_Flag:=False;  //不能播放其中一个MP3

  //初始化按钮设置
  Sound_Panel.Enabled:=existmp3;
  f_main.pop_MP3.Enabled:=existmp3;
end;

procedure Tf_mp3play.FormShow(Sender: TObject);
begin
  if FirstBoot then
  begin
       FirstBoot:=False;  //写标志:不是第一次启动

       if (existmp3) and (Sound_Name.Items.Count>0) then
       begin  //调整状态
            //调整按钮
            EnableBtn(True);  //打开按钮

            //调整滚动条
            Current_Filename.Text:='1. '+Sound_Name.Items[0];
            kmp3play.Open(Sound_Name.Items[0],'');

            TrackBar.Position:=TrackBar.Min;
            TrackBar.Max:=kmp3play.FrameCount;
       end
       else
          EnableBtn(False);  //关闭按钮
  end;
end;

procedure Tf_mp3play.EjectClick(Sender: TObject);
var mp3Index : longint;
begin
  if Open_Sound.Execute then
  begin
       Sound_Name.Clear;
       for mp3Index:=1 to Open_Sound.Files.Count do  //添加背景音乐文件到列表框中
           Sound_Name.Items.Add(Open_Sound.Files.Strings[mp3Index-1]);

       //初始化状态
       if Sound_Name.Items.Count>0 then
       begin
            EnableBtn(True);          //打开按钮
            sound_number:=0;          //MP3曲目写0
            Play_All_Flag:=False;     //不能播放其中一个MP3
            state:=stEject;           //写状态:打开状态
            Mp3PlayThreadEnded(nil);  //播放MP3音乐
       end
       else
          EnableBtn(True);            //关闭按钮
  end;
end;

procedure Tf_mp3play.Mp3PlayThreadEnded(Sender: TObject);
var play_filename : string;  //播放的文件名
    error_flag : Boolean;    //错误标志
    main_visible : Boolean;  //主窗口是否显示
begin
  if (not existmp3) then exit;

  //建立mp3控件
  try
     kmp3play.Free;
     kmp3play:=TMp3Play.Create(self);
     kmp3play.Top:=-300;
     kmp3play.Left:=-300;
     kmp3play.Parent:=f_mp3play;
     kmp3play.OnActFrame:=Mp3PlayActFrame;
     kmp3play.OnThreadEnded:=Mp3PlayThreadEnded;
     kmp3play.TabStop:=False;
     existmp3:=True;   //存在MP3控件
  except
     existmp3:=False;  //不存在MP3控件
     state:=stError;   //错误状态
  end;

  if (not existmp3) then
  begin
       //初始化MP3设置
       Sound_Number:=0;       //MP3曲目写0
       Play_All_Flag:=False;  //不能播放其中一个MP3

       //关闭按钮
       EnableBtn(False);

       Sound_Panel.Enabled:=existmp3;
       f_main.pop_MP3.Enabled:=existmp3;

       exit;
  end;

  //判断状态
  if state=stStop then
  begin  //停止状态
       kmp3play.Close;             //关闭MP3
       state:=stEject;             //打开状态

       sound_number:=0;            //初始化播放数目
       Play.Glyph:=BtnPlay.Glyph;  //转换图标
       Play.Hint:=BtnPlay.Hint;    //转换Hint

       //调整滚动条
       Current_Filename.Text:='1. '+Sound_Name.Items[0];
       kmp3play.Open(Sound_Name.Items[0],'');

       TrackBar.Position:=TrackBar.Min;
       TrackBar.Max:=kmp3play.FrameCount;

       exit;
  end;

  //注册MP3
  main_visible:=f_mp3play.Visible;
  if not main_visible then
  begin  //处理窗口的显示
       f_mp3play.Left:=-f_mp3play.Left-f_mp3play.Width-100;
       f_mp3play.Visible:=True;
  end;

  kmp3play.Authorize('LightBringer','1441658209');  //注册

  if not main_visible then
  begin  //复原窗口的显示
       f_mp3play.Visible:=False;
       f_mp3play.Left:=-(f_mp3play.Left+f_mp3play.Width+100);
  end;

  error_flag:=False;  //写标志:没有错误

  inc(sound_number);  //mp3数目+1
  if sound_number>Sound_Name.Items.Count then
  begin  //超出音乐列表,判断是否重复播放
       if (BtnRepeat.Down) and (Play_All_Flag) then
       begin  //重复播放
            sound_number:=1;  //重复播放
       end
       else
       begin  //不重复播放
            sound_number:=0;  //初始化播放数目
            state:=stEject;   //打开状态

            Play.Glyph:=BtnPlay.Glyph;  //转换图标
            Play.Hint:=BtnPlay.Hint;    //转换Hint

            //调整滚动条
            TrackBar.Position:=TrackBar.Max;

            exit;  //退出播放
       end;
  end;

  //获取文件名,打开播放
  play_filename:=Sound_Name.Items[sound_number-1];
  Current_Filename.Text:=IntToStr(sound_number)+'. '+play_filename;
  if kmp3play.Open(play_filename,'')<>0 then error_flag:=True;
  if kmp3play.Play<>0 then error_flag:=True;

  //播放错误,则播放下一个
  if error_flag then
     Mp3PlayThreadEnded(nil)
  else
  begin
       Play_All_Flag:=True;         //能播放其中一个MP3

       Play.Glyph:=BtnPause.Glyph;  //转换图标
       Play.Hint:=BtnPause.Hint;    //转换Hint

       state:=stPlay;               //播放状态

       //调整滚动条
       TrackBar.Position:=TrackBar.Min;
       TrackBar.Max:=kmp3play.FrameCount;
  end;
end;

procedure Tf_mp3play.Mp3PlayActFrame(Sender: TObject; ActFrame: Integer);
begin
  TrackBar.Position:=ActFrame;
end;

procedure Tf_mp3play.FormDestroy(Sender: TObject);
begin
  //删除mp3控件
  kmp3play.Free;
end;

procedure Tf_mp3play.RegMp3;
var RegMp3Path : string;  //MP3注册路径
    RegMp3File : string;  //MP3文件路径
begin
  RegMp3Path:='CLSID\{3B00B10D-6EF0-11D1-A6AA-0020AFE4DE54}';
  RegMp3File:=f_main.Get_Filename_Path(ParamStr(0))+'talemp3.dat';
  Reg_ini := TRegIniFile.Create('');   //打开注册表
  Reg_ini.RootKey:=HKEY_CLASSES_ROOT;  //定义根目录

  //注册mp3控件
  //注册版本
  Reg_ini.WriteString(RegMp3Path,'','Tale Mp3Play Control');
  //注册Control
  Reg_ini.WriteString(RegMp3Path+'\Control','','');
  //注册InprocServer32
  Reg_ini.WriteString(RegMp3Path+'\InprocServer32','',RegMp3File);
  Reg_ini.WriteString(RegMp3Path+'\InprocServer32','ThreadingModel','Apartment');
  //注册MiscStatus
  Reg_ini.WriteString(RegMp3Path+'\MiscStatus','','0');
  Reg_ini.WriteString(RegMp3Path+'\MiscStatus\1','','131473');
  //注册ProgID
  Reg_ini.WriteString(RegMp3Path+'\ProgID','','Mp3Play.Mp3PlayCtrl.1');
  //注册PToolboxBitmap32
  Reg_ini.WriteString(RegMp3Path+'\PToolboxBitmap32','',RegMp3File+', 1');
  //注册ToolboxBitmap32
  Reg_ini.WriteString(RegMp3Path+'\ToolboxBitmap32','',RegMp3File+', 1');
  //注册TypeLib
  Reg_ini.WriteString(RegMp3Path+'\TypeLib','','{3B00B10A-6EF0-11D1-A6AA-0020AFE4DE54}');
  //注册Version
  Reg_ini.WriteString(RegMp3Path+'\Version','','1.0');

  Reg_ini.Free;  //关闭注册表
end;

procedure Tf_mp3play.Sound_PanelMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  if Button=mbLeft then
  begin
       ReleaseCapture;
       SendMessage(f_mp3play.Handle,WM_NCLBUTTONDOWN,HTCaption,0);
  end;
end;

procedure Tf_mp3play.CancelClick(Sender: TObject);
begin
  f_mp3play.Close;
end;

procedure Tf_mp3play.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
  if Key=27 then  //隐藏窗口  "Esc"
     f_mp3play.Close;
end;

procedure Tf_mp3play.StopClick(Sender: TObject);
begin
  if state in [stPlay,stPause,stEject] then
  begin
       state:=stStop;            //停止状态
       Mp3PlayThreadEnded(nil);  //停止播放
  end;
end;

procedure Tf_mp3play.PlayClick(Sender: TObject);
begin
  case state of
    stPlay:
      begin  //处于播放状态
           Play.Glyph:=BtnPlay.Glyph;  //转换图标
           Play.Hint:=BtnPlay.Hint;    //转换Hint

           kmp3play.Pause;
           state:=stPause;
      end;

    stPause:
      begin  //处于暂停状态
           Play.Glyph:=BtnPause.Glyph;  //转换图标
           Play.Hint:=BtnPause.Hint;    //转换Hint

           kmp3play.Play;
           state:=stPlay;
      end;

    else
      Mp3PlayThreadEnded(nil);

    end;
end;

procedure Tf_mp3play.EnableBtn(Enable : Boolean);
begin
  Play.Enabled:=Enable;
  Stop.Enabled:=Enable;
  First.Enabled:=Enable;
  Last.Enabled:=Enable;
  TrackBar.Enabled:=Enable;
end;

procedure Tf_mp3play.FirstClick(Sender: TObject);
begin
  Sound_Number:=Sound_Number+(Sender As TSpeedButton).Tag;
  if (Sound_Number<0) or (Sound_Number>Sound_Name.Items.Count) then Sound_Number:=0;
  Mp3PlayThreadEnded(nil);  //播放MP3音乐
end;

procedure Tf_mp3play.TrackBarChange(Sender: TObject);
begin
  if state<>stError then
     kmp3play.Seek(TrackBar.Position);
end;

end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -