📄 mp3.pas
字号:
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 + -