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

📄 mainfrm.pas

📁 本光盘是《Delphi 7应用教程》一书的配套光盘
💻 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 + -