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

📄 mp3.pas

📁 使用MediaPlayer1播放的例子
💻 PAS
📖 第 1 页 / 共 2 页
字号:
unit mp3;

interface

uses
  Windows, Dialogs, Volumes, ImgList, Controls, ExtCtrls, StdCtrls, 
  ComCtrls, MPlayer, Buttons, Classes, Messages, SysUtils, Variants,
  Graphics, Forms, ShellAPI, Menus, jpeg;
const
  //Icon的ID标志
  ICON_ID= 1;
  //自定义的Icon事件消息
  MI_ICONEVENT= WM_USER+ 1;
type
  TMP3Player = class(TForm)
    StatusBar1: TStatusBar;
    MediaPlayer1: TMediaPlayer;
    Timer1: TTimer;
    MP3Open: TOpenDialog;
    Panel2: TPanel;
    Splitter1: TSplitter;
    ImageList1: TImageList;
    VolumeControl1: TVolumeControl;
    Panel4: TPanel;
    MusicList: TListBox;
    Panel3: TPanel;
    Timer2: TTimer;
    DirList: TListBox;
    SaveDialog1: TSaveDialog;
    Image1: TImage;
    BtnSave: TSpeedButton;
    BtnClear: TSpeedButton;
    BtnList: TSpeedButton;
    BtnOpen: TSpeedButton;
    LabelLoop: TLabel;
    BtnRandom: TSpeedButton;
    LabelRandom: TLabel;
    BtnLoop: TSpeedButton;
    Panel1: TPanel;
    Image2: TImage;
    Index: TLabel;
    Label2: TLabel;
    TrackBar2: TTrackBar;
    LabelTotal: TLabel;
    Label5: TLabel;
    LabelCurrent: TLabel;
    Label4: TLabel;
    BtnPlay: TSpeedButton;
    BtnStop: TSpeedButton;
    BtnPrevious: TSpeedButton;
    BtnNext: TSpeedButton;
    BtnBack: TSpeedButton;
    BtnStep: TSpeedButton;
    PopupMenu1: TPopupMenu;
    N1: TMenuItem;
    N2: TMenuItem;
    N3: TMenuItem;
    N4: TMenuItem;
    N5: TMenuItem;
    N6: TMenuItem;
    N7: TMenuItem;
    N8: TMenuItem;
    N9: TMenuItem;
    N10: TMenuItem;
    N11: TMenuItem;
    N12: TMenuItem;
    BtnDel: TSpeedButton;
    procedure BtnOpeClick(Sender: TObject);
    procedure BtnClearClick(Sender: TObject);
    procedure BtnPlayClick(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure BtnStopClick(Sender: TObject);
    procedure BtnNextClick(Sender: TObject);
    procedure BtnPreviousClick(Sender: TObject);
    procedure BtnStepClick(Sender: TObject);
    procedure MusicListDblClick(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure BtnBackClick(Sender: TObject);
    procedure Timer2Timer(Sender: TObject);
    procedure Splitter1Moved(Sender: TObject);
    procedure BtnRandomClick(Sender: TObject);
    procedure BtnLoopClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure DirListClick(Sender: TObject);
    procedure MusicListDragDrop(Sender, Source: TObject; X, Y: Integer);
    procedure MusicListDragOver(Sender, Source: TObject; X, Y: Integer;
      State: TDragState; var Accept: Boolean);
    procedure DragDropFiles(var msg:TMessage);message WM_DROPFILES;
    procedure MusicListClick(Sender: TObject);
    procedure MusicListKeyUp(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure BtnSaveClick(Sender: TObject);
    procedure BtnListClick(Sender: TObject);
    procedure N1Click(Sender: TObject);
    procedure N2Click(Sender: TObject);
    procedure N3Click(Sender: TObject);
    procedure N4Click(Sender: TObject);
    procedure N5Click(Sender: TObject);
    procedure N6Click(Sender: TObject);
    procedure N7Click(Sender: TObject);
    procedure N8Click(Sender: TObject);
    procedure N9Click(Sender: TObject);
    procedure N10Click(Sender: TObject);
    procedure N11Click(Sender: TObject);
    procedure N12Click(Sender: TObject);
    procedure BtnDelClick(Sender: TObject);
  private
    TrayIcon: TIcon;
    function MilliSecondsToString(Length: Integer):String;
    procedure InstallIcon;
    procedure UnInstallIcon;
    procedure IconOnClick(var message: TMessage);message MI_ICONEVENT;
    procedure DealMessage(var message: TMessage);message WM_SYSCOMMAND;
   // procedure FormDeActive()
    { Private declarations }
  public
    { Public declarations }
  end;

var
  MP3Player: TMP3Player;
  bPlay, bLoop: Boolean;
  EndPosition, TimeRecord: Integer;
  nSec, nMin: Integer;
  nTotalSeconds: Integer;
  LittleIcon: TNotifyIconData;
  Posx, Posy: Integer;

implementation

{$R *.dfm}

procedure TMP3Player.BtnOpeClick(Sender: TObject);
var
  nIndex, nCount,nCountList: Integer;
begin
  MP3Open.Filter:= '所有支持格式(*.mp3;*.wav;*.wma;*.mid;*.DAT;*.wmv;*.mpg;*.avi)|*.mp3;*.wav;*.wma;*.mid;*.DAT;*.wmv;*.avi|音频文件(*.mp3;*.wav;*.wma;*.mid)|*.mp3;*.wav;*.wma;*.mid|视频文件(*.dat;*.wmv;*.mpg)|*.dat;*.wmv|mp3格式(*.mp3)|*.mp3';
  MP3Open.Options:= [ofHideReadOnly,ofAllowMultiSelect,ofEnableSizing];
  nCount:= MusicList.Count;
  if (MP3Open.Execute) then
  begin
      nCountList:= MP3Open.Files.Count;
      for nIndex:= nCount to nCount+ nCountList -1 do
        DirList.Items.Add(MP3Open.Files[nIndex-nCount]);
    for nIndex:=nCount to DirList.Count- 1 do
      MusicList.Items.Add(ExtractFileName(DirList.Items[nIndex]));
    MusicList.ItemIndex:= 0;
    DirList.ItemIndex:= 0;
  end;
end;

procedure TMP3Player.BtnClearClick(Sender: TObject);
begin
  MusicList.Clear;
  DirList.Clear;
end;

procedure TMP3Player.BtnPlayClick(Sender: TObject);
var
  nCount, nIndex,nLoop: Integer;
  strExe: String;
  pTip: pChar;
begin
  nCount:= MusicList.Items.Count;
  nIndex:= MusicList.ItemIndex;
  if (nCount>0) then
  begin
    if ((MediaPlayer1.Mode<> mpPlaying)and(MediaPlayer1.Mode<> mpPaused)) then
      if nIndex>=0 then
      begin
        strExe:= LowerCase(ExtractFileExt(DirList.Items[nIndex]));
        if (not FileExists(DirList.Items[nIndex])) then
        begin
          MediaPlayer1.FileName:= '';
          if (MessageDlg('文件已不存在!'#13#10'是否从列表中删除?', mtInformation,[mbyes,mbno], 0)= mryes) then
          begin
            nIndex:= MusicList.ItemIndex;
            if nIndex= MusicList.Count- 1 then
            begin
              MusicList.Items.Delete(nIndex);
              DirList.Items.Delete(nIndex);
              MusicList.ItemIndex:= MusicList.Count- 1;
            end
            else
            begin
              MusicList.Items.Delete(nIndex);
              DirList.Items.Delete(nIndex);
              MusicList.ItemIndex:= nIndex;
            end;
          end;
        end
        else
        begin
          if ((strExe='.wmv')or(strExe= '.dat')or(strExe= '.mp3')or(strExe= '.wma')or(strExe= '.wav')or(strExe= '.mid')or(strExe='.mpg')) then
          begin
            MediaPlayer1.FileName:= DirList.Items[nIndex];
            MediaPlayer1.Open;
            MediaPlayer1.Next;
            EndPosition := MediaPlayer1.Position;
            MediaPlayer1.Rewind;
            nSec:= 0;
            nMin:= 0;
            LabelTotal.Caption:= MilliSecondsToString(EndPosition);
          end
          else
            BtnNext.Click;
        end;
      end
      else
        MediaPlayer1.FileName:= '';
    if (nCount>0)and(MediaPlayer1.FileName<>'') then
    begin
      Panel4.Enabled:= True;
      if bPlay then
      begin
        bplay:= False;
        BtnPlay.Hint:= '播放';
        N1.Caption:= '播放';
        N1.ImageIndex:= 1;
        BtnPlay.Glyph:= Nil;
        ImageList1.GetBitmap(1,BtnPlay.Glyph);
        MediaPlayer1.Pause;
      end
      else
      begin
        Timer1.Enabled:= True;
        Timer2.Enabled:= True;
        bPlay:= True;
        if (MediaPlayer1.Mode<> mpPlaying)and(MediaPlayer1.Mode<> mpPaused) then
        begin
          Index.Caption:= MusicList.Items[nIndex];
          Index.Left:= (Panel1.Width-Index.Width)div 2;
          MP3Player.Caption:= 'MP3Player---'+ Index.Caption;
        end;
        BtnPlay.Hint:= '暂停';
        N1.Caption:= '暂停';
        N1.ImageIndex:= 0;
        pTip:= pChar(MusicList.Items[nIndex]);
        for nLoop:= 0 to 63 do
          LittleIcon.szTip[nLoop]:= #0;
        for nLoop:= 0 to Length(MusicList.Items[nIndex])- 1 do
          LittleIcon.szTip[nLoop]:= pTip[nLoop];
        Shell_NotifyIcon(NIM_MODIFY,@LittleIcon);
        MusicList.Hint:= MusicList.Items[nIndex];
        BtnPlay.Glyph:= Nil;
        ImageList1.GetBitmap(0,BtnPlay.Glyph);
        MediaPlayer1.Play;
      end;
    end;
  end;
end;

procedure TMP3Player.FormShow(Sender: TObject);
begin
  ImageList1.GetBitmap(1,BtnPlay.Glyph);
  ImageList1.GetBitmap(2,BtnRandom.Glyph);
  ImageList1.GetBitmap(5,BtnLoop.Glyph);
  BtnLoop.Hint:= '循环';
  BtnRandom.Hint:= '随机';
  bLoop:= False;
  bPlay:= False;
  nSec:= 0;
  nMin:= 0;
end;

procedure TMP3Player.BtnStopClick(Sender: TObject);
begin
  Timer1.Enabled:= False;
  Timer2.Enabled:= False;
  Panel4.Enabled:= False;
  Panel4.Width:= 1;
  LabelCurrent.Caption:= '00:00';
  if (MediaPlayer1.Mode= mpPlaying)or(MediaPlayer1.Mode= mpPaused) then
  begin
    MP3Player.Caption:= 'MP3Player';
    Index.Caption:= '曲目';
    Index.Left:= (Panel1.Width- Index.Width)div 2;
    N1.Caption:= '播放';
    N1.ImageIndex:= 1;
    BtnPlay.Glyph:= Nil;
    ImageList1.GetBitmap(1,BtnPlay.Glyph);
    bPlay:= False;
    MediaPlayer1.Stop;
    LittleIcon.szTip:= '播放器--- Allen 制造';
    Shell_NotifyIcon(NIM_MODIFY,@LittleIcon);
  end;
end;

procedure TMP3Player.BtnNextClick(Sender: TObject);
var
  nIndex: Integer;
begin
  LabelCurrent.Caption:= '00:00';
  nIndex:= MusicList.ItemIndex;
  if MusicList.Count>0 then
    begin
    if nIndex>-1 then
    begin
      if (N7.ImageIndex= 3) then
      begin
        Randomize;
        MusicList.Selected[nIndex]:= False;
        MusicList.Selected[DirList.Count- 1-Random(DirList.Count)]:=True;
      end
      else
        if nIndex< DirList.Count- 1 then
        begin
          MusicList.Selected[nIndex]:= False;
          MusicList.Selected[nIndex+1]:= True;
        end
        else
          if bLoop then
          begin
            MusicList.Selected[nIndex]:= False;
            MusicList.Selected[0]:=True;
          end;
    end;
    if (MediaPlayer1.Mode= mpOpen) or (MediaPlayer1.Mode= mpPlaying) or
       (MediaPlayer1.Mode= mpPaused) or (MediaPlayer1.Mode= mpStopped) then
    begin
      MediaPlayer1.Stop;
      Timer1.Enabled:= False;
      Timer2.Enabled:= False;
      Panel4.Enabled:= False;
      bPlay:= False;
      BtnPlay.Click;
    end
    else
      BtnPlay.Click;
  end;
end;

procedure TMP3Player.BtnPreviousClick(Sender: TObject);
var
  nIndex: Integer;
begin
  nIndex:= MusicList.ItemIndex;
  if MusicList.Count>0 then
  begin
    if nIndex>-1 then
    begin
      if (N7.ImageIndex= 3) then
      begin
        Randomize;
        MusicList.Selected[nIndex]:= False;
        MusicList.Selected[Random(DirList.Count)]:= True;
      end
      else
        if MediaPlayer1.Position> 1000 then
          MediaPlayer1.StartPos:= 0
        else
        if nIndex> 0 then
        begin
          MusicList.Selected[nIndex]:= False;
          MusicList.Selected[nIndex- 1]:= True;
        end
        else
          if bLoop then
          begin
            MusicList.Selected[nIndex]:= False;
            MusicList.Selected[DirList.Count- 1]:= True;
          end;
    end;
    if (MediaPlayer1.Mode= mpOpen) or (MediaPlayer1.Mode= mpPlaying) or
       (MediaPlayer1.Mode= mpPaused) or (MediaPlayer1.Mode= mpStopped) then
    begin
      MediaPlayer1.Stop;
      Timer1.Enabled:= False;
      Timer2.Enabled:= False;
      Panel4.Enabled:= False;
      bPlay:= False;
      BtnPlay.Click;
    end
    else
      BtnPlay.Click;
  end;
end;

procedure TMP3Player.BtnStepClick(Sender: TObject);
var
  CurPosition: Integer;
begin
  if (MediaPlayer1.Mode= mpPlaying) or (MediaPlayer1.Mode= mpPaused) then
  begin
    CurPosition:= MediaPlayer1.Position;
    MediaPlayer1.Stop;
    MediaPlayer1.StartPos:= CurPosition+ 3000;
    MediaPlayer1.Play;
    if nSec+ 2> 59 then
    begin
      nSec:= (nSec + 2)mod 60;
      nMin:= nMin+ 1;
    end
    else
    begin
      nSec:= nSec+ 2;
    end;
  end;
end;

procedure TMP3Player.MusicListDblClick(Sender: TObject);
begin
  bPlay:= False;
  if (Panel4.Width> 1)then
    MediaPlayer1.Stop;
  BtnPlay.Click;
end;

procedure TMP3Player.Timer1Timer(Sender: TObject);
begin
  if Index.Left=Panel1.Width then
    Index.Left:= -Index.Width
  else
    Index.Left:= Index.Left+ 1;
  if MediaPlayer1.Position= EndPosition then
  begin
    Panel4.Width:= 1;
    BtnNext.Click;
  end;
  if MediaPlayer1.Mode= mpPlaying then
  begin
    Panel4.Width:= MediaPlayer1.Position* Panel2.Width div EndPosition;
  end;
end;

procedure TMP3Player.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  MediaPlayer1.Close;
  UnInstallIcon;

⌨️ 快捷键说明

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