📄 mainfrm.pas
字号:
unit mainfrm;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ComCtrls, StdCtrls, ExtCtrls, Buttons, MPlayer,mmsystem;
type
TForm1 = class(TForm)
Panel1: TPanel;
Panel2: TPanel;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
Label6: TLabel;
Panel3: TPanel;
SpeedButton1: TSpeedButton;
SpeedButton2: TSpeedButton;
SpeedButton3: TSpeedButton;
SpeedButton4: TSpeedButton;
SpeedButton5: TSpeedButton;
SpeedButton6: TSpeedButton;
SpeedButton7: TSpeedButton;
SpeedButton8: TSpeedButton;
SpeedButton9: TSpeedButton;
SpeedButton10: TSpeedButton;
SpeedButton11: TSpeedButton;
SpeedButton12: TSpeedButton;
SpeedButton13: TSpeedButton;
SpeedButton14: TSpeedButton;
SpeedButton16: TSpeedButton;
SpeedButton17: TSpeedButton;
SpeedButton18: TSpeedButton;
SpeedButton19: TSpeedButton;
SpeedButton20: TSpeedButton;
SpeedButton21: TSpeedButton;
SpeedButton22: TSpeedButton;
SpeedButton23: TSpeedButton;
SpeedButton24: TSpeedButton;
SpeedButton25: TSpeedButton;
MediaPlayer1: TMediaPlayer;
Timer1: TTimer;
Label9: TLabel;
Label10: TLabel;
Label11: TLabel;
Label12: TLabel;
Label13: TLabel;
Label14: TLabel;
SpeedButton15: TSpeedButton;
procedure FormCreate(Sender: TObject);
procedure MediaPlayer1PostClick(Sender: TObject; Button: TMPBtnType);
procedure Timer1Timer(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure SpeedButton1Click(Sender: TObject);
procedure MediaPlayer1Click(Sender: TObject; Button: TMPBtnType;
var DoDefault: Boolean);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
oldtrack,currenttrack,m,s,totaltracks,totallengthm,totallengths:byte;
procedure GetCDTotals; forward;
procedure showtracknumber;
procedure showtracktime;
procedure showcurrenttime;
procedure showplayerstatus;
procedure adjustspeedbuttons;
procedure highlighttrackbutton;
function tracknumtostring(innum:byte):string;
implementation
const
numstrings :array[1..20] of string[10]=('1','2','3','4','5','6','7','8','9','10','11','12','13','14','15','16','17','18','19','20');
msformatstr='%dm %ds';
playbuttons:tbuttonset=[btpause,btstop,btnext,btprev];
stopbuttons:tbuttonset=[btplay,btnext,btprev];
{$R *.dfm}
procedure GetCDTotals;
var
TimeValue:LongInt;
begin
form1.mediaplayer1.timeFormat:=tfTMSF; // 设置时间格式
TimeValue:=form1.mediaplayer1.Length; // 获取C D长度
form1.Label5.Caption:=inttostr(timevalue);
TotalTracks:=mci_TMSF_Track(form1.mediaplayer1.Tracks); // 获取音轨数
TotalLengthM:=mci_msf_Minute(TimeValue); // 获取时间长度(分钟)
TotalLengthS:=mci_msf_Second(TimeValue); // 获取时间长度(秒)
form1.Label4.Caption:=TrackNumToString(TotalTracks);
form1.Label6.Caption:=Format(MSFormatStr,[TotalLengthM,TotalLengthS]);
{ 调整小按钮的数目}
AdjustSpeedButtons;
end;
//显示当前曲目号
procedure showtracknumber;
var
t:byte;
begin
t:=mci_TMSF_Track(form1.mediaplayer1.Position) ;
CurrentTrack:=t ;
form1.Label1.Caption:=tracknumtostring(t);
highlighttrackbutton;
end;
//显示当前曲目播放时间
procedure showtracktime;
var sec,min:byte;
len:longint;
begin
if currenttrack<>oldtrack then
begin
Len:=form1.mediaplayer1.TrackLength[mci_TMSF_Track(form1.mediaplayer1.Position)] ;
min:=mci_MSF_Minute(Len);
Sec:=mci_MSF_Second(Len) ;
form1.Label6.Caption:=Format(MSFormatStr,[Min,Sec]) ;
end;
OldTrack:=CurrentTrack ;
end;
procedure showcurrenttime;
begin
{ 当前音轨的分钟数}
m:=mci_TMSF_Minute(form1.mediaplayer1.Position);
{ 当前音轨的秒数}
s:=mci_TMSF_Second(form1.mediaplayer1.Position) ;
{ 刷新有关标签}
form1.Label2.Caption:=Format(MSFormatStr,[m,s]);
end;
//显示媒体播放器当前状态
procedure showplayerstatus;
begin
if form1.MediaPlayer1.EnabledButtons=playbuttons then
with form1.Label3 do
begin
case form1.MediaPlayer1.Mode of
mpnotready: caption:='ready';
mpstopped: caption:='stopped';
mpseeking: caption:='seeking';
mppaused: caption:='paused';
mpplaying: caption:='playing';
end;
end;
end;
//调整按钮属性
procedure adjustspeedbuttons;
var i:integer;
begin
for i:=0 to form1.Panel1.ControlCount-1 do
if form1.Panel1.Controls[i] is tspeedbutton then
with tspeedbutton(form1.Panel1.Controls[i]) do enabled:=tag<=totaltracks;
end;
procedure highlighttrackbutton;
var i:longint;
begin
for i:=0 to form1.ComponentCount-1 do
if form1.Components[i] is tspeedbutton then
if tspeedbutton(form1.Components[i]).Tag=currenttrack then
tspeedbutton(form1.Components[i]).font.color:=clred
else
tspeedbutton(form1.Components[i]).font.color:=clnavy;
end;
//将当前曲目转换成数字
function tracknumtostring(innum:byte):string;
begin
if (innum>high(numstrings)) or (innum<low(numstrings)) then
result:=inttostr(innum)
else
result:=numstrings[innum];
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
try form1.MediaPlayer1.Open;
if form1.MediaPlayer1.Mode=mpPlaying then
begin
label1.Caption:='Playing';
GetCDTotals; // 显示当前CD的总时间
ShowTrackNumber; // 显示当前音轨号
showTrackTime; // 显示当前音轨的时间
ShowCurrentTime; // 显示CD的当前位置(时间)
ShowPlayerStatus; // 刷新CDPlayer的状态
end
except
{ 如果出现异常,表示设备不能播放CD }
on EMCIDeviceError do
begin
MessageDlg('CD播放器初始化错误,程序退出?',
mtError,[mbOk],0);
Application.Terminate;
end;
end;
end;
//对快速按钮进行控制
procedure TForm1.MediaPlayer1PostClick(Sender: TObject;
Button: TMPBtnType);
begin
case button of
btplay:
begin
form1.MediaPlayer1.EnabledButtons:=playbuttons;
form1.Label3.Caption:='playing';
end;
btpause:
begin
form1.MediaPlayer1.EnabledButtons:=stopbuttons;
form1.Label3.Caption:='pause';
end;
btstop:
begin
form1.MediaPlayer1.Rewind;
form1.MediaPlayer1.EnabledButtons:=stopbuttons;
form1.Label1.Caption:='1';
form1.Label3.Caption:='stop';
end;
btnext,btprev:
begin
form1.MediaPlayer1.Play;
form1.MediaPlayer1.EnabledButtons:=playbuttons;
form1.Label3.Caption:='playing';
end;
end;
end;
//CD播放器进行实时显示
procedure TForm1.Timer1Timer(Sender: TObject);
begin
if form1.MediaPlayer1.EnabledButtons=playbuttons then
begin
form1.MediaPlayer1.TimeFormat:=tfmsf;
form1.MediaPlayer1.TimeFormat:=tftmsf;
showtracknumber;
showtracktime;
showcurrenttime;
end;
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
form1.MediaPlayer1.Close;//系统退出时关闭使用
end;
//设置快速按钮功能
procedure TForm1.SpeedButton1Click(Sender: TObject);
var track:integer;
begin
form1.MediaPlayer1.Stop;
Track:=(sender as tspeedbutton).tag;
form1.MediaPlayer1.StartPos:=form1.MediaPlayer1.TrackPosition[track];
form1.MediaPlayer1.Play;
form1.MediaPlayer1.EnabledButtons:=playbuttons;
form1.Label1.Caption:=inttostr(track);
form1.Label3.Caption:='playing';
end;
procedure TForm1.MediaPlayer1Click(Sender: TObject; Button: TMPBtnType;
var DoDefault: Boolean);
begin
GetCDTotals; // 显示当前C D的总时间
ShowTrackNumber; // 显示当前音轨号
showTrackTime; // 显示当前音轨的时间
ShowCurrentTime; // 显示C D的当前位置(时间)
ShowPlayerStatus; // 刷新C D P l a y e r的状态
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -