unit Unit1;interfaceuses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Buttons, MPlayer, ExtCtrls, Tabs;
const IsAvi=0;//定义操作常量
      IsWav   = 1;
      IsMidi  = 2;
      IsOthers= 3;
      IsCD    = 4;
type
  TMSFRec=Record//定义CD显示信息记录类型
  Tracks:Byte;
  Minutes:Byte;
  Seconds:Byte;
  Frames:Byte;
  end;
  TMainForm = class(TForm)
  DisPlayPanel: TPanel;
  Edit1: TEdit;
  Label1: TLabel;
  LoadBitBtn: TBitBtn;
  CloseBitBtn: TBitBtn;
  MediaPlayer1: TMediaPlayer;
    TabSet1: TTabSet;
    Label2: TLabel;
    Timer1: TTimer;
    OpenDialog1: TOpenDialog;    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;
    SpeedButton15: TSpeedButton;
    SpeedButton16: TSpeedButton;
    SpeedButton17: TSpeedButton;
    SpeedButton18: TSpeedButton;
    SpeedButton19: TSpeedButton;
    SpeedButton20: TSpeedButton;
    SpeedButton21: TSpeedButton;
    SpeedButton22: TSpeedButton;
    SpeedButton23: TSpeedButton;
    SpeedButton24: TSpeedButton;
    SpeedButton25: TSpeedButton;  procedure CloseBitBtnClick(Sender:TObject);
  procedure FormCreate(Sender:TObject);
  procedure Timer1Time(Sender:TObject);
  procedure SpeedButton1Click(Sender:TObject);
  procedure TabSet1Change(Sender:TObject;NewTab:Integer;var AllowChange:Boolean);
  procedure LoadBitBtnClick(Sender:TObject);
  procedure FormDestroy(Sender:TObject);
  private
    { Private declarations }
  public
    { Public declarations }
    CDTracksArray:Array[1..25] of TSpeedButton;//定义曲目按钮数组
    CDPosition:Longint;
    procedure InitCDTracksArrayData;
  end;var
  MainForm: TMainForm;implementation{$R *.dfm}procedure TMainForm.InitCDTracksArrayData;
var
i:Integer;
begin
  CDTracksArray[1]:=SpeedButton1;
  CDTracksArray[2]:=SpeedButton2;
  CDTracksArray[3]:=SpeedButton3;
  CDTracksArray[4]:=SpeedButton4;
  CDTracksArray[5]:=SpeedButton5;
  CDTracksArray[6]:=SpeedButton6;
  CDTracksArray[7]:=SpeedButton7;
  CDTracksArray[8]:=SpeedButton8;
  CDTracksArray[9]:=SpeedButton9;
  CDTracksArray[10]:=SpeedButton10;
  CDTracksArray[11]:=SpeedButton11;
  CDTracksArray[12]:=SpeedButton12;
  CDTracksArray[13]:=SpeedButton13;
  CDTracksArray[14]:=SpeedButton14;
  CDTracksArray[15]:=SpeedButton15;
  CDTracksArray[16]:=SpeedButton16;
  CDTracksArray[17]:=SpeedButton17;
  CDTracksArray[18]:=SpeedButton18;
  CDTracksArray[19]:=SpeedButton19;
  CDTracksArray[20]:=SpeedButton20;
  CDTracksArray[21]:=SpeedButton21;
  CDTracksArray[22]:=SpeedButton22;
  CDTracksArray[23]:=SpeedButton23;
  CDTracksArray[24]:=SpeedButton24;
  CDTracksArray[25]:=SpeedButton25;
for i:=1 to 25 do//不可见按钮
  begin
    CDTracksArray[i].Visible:=False;
  end;
end;procedure TMainForm.CloseBitBtnClick(Sender:TObject);
begin
  if MediaPlayer1.Mode=mpPlaying then
  MediaPlayer1.Close;
  Close;
end;procedure TMainForm.FormCreate(Sender:TObject);
begin
  InitCDTracksArrayData;//初始化数祖
  //设置打开媒体文件类型
  OpenDialog1.Filter:=
  'AVI(*.avi)|*.avi|Wave(*.wav)|*.wav|Midi(*.mid)|*.mid|Other(*.*)|*.*';
end;
//定时显示CD播放信息
procedure TMainForm.Timer1Time(Sender:TObject);
begin
  case TabSet1.TabIndex of
    isCD://是CD,则显示当前播放信息
       begin
        if MediaPlayer1.Tag<>-1 then
           begin
           CDPosition:=MediaPlayer1.Position;
           with TMSFRec(CDPosition) do
             begin
               DisPlayPanel.Caption:='曲目:'+IntToStr(Tracks)+',时间:'+IntToStr(Minutes)+':'+IntToStr(Seconds);
             end;
            end;
        end;
IsWav,IsMidi,IsAvi,IsOthers://其他,则不显示
begin
end;
end;
end;procedure TMainForm.SpeedButton1Click(Sender:TObject);
var
  i:Integer;
  a:Integer;
  NotCDFlag:Boolean;
begin
  for i:=1 to MediaPlayer1.Tracks do
    if (Sender As TSpeedButton)=CDTracksArray[i] then//是当前按钮,则播放当前曲目
      a:=i;
           DisplayPanel.Caption:='请稍等...';
           Edit1.Text:='播放CD音乐';
           MediaPlayer1.DeviceType:=dtCDAudio;
           MediaPlayer1.FileName:='';
           NotCDFlag:=False;
             try
               MediaPlayer1.Open;
               MediaPlayer1.Next;
               MediaPlayer1.Rewind;
             except
               NotCDFlag:=True;
             end;
if NotCDFlag then//没有CD显示提示信息
  begin
  MediaPlayer1.EnabledButtons:=[];
  Edit1.Text:='请装上CD唱片';
  ShowMEssage('不能打开CD,请装上CD盘片!');
  end
else//有CD则开始播放
  begin
    //可见按钮
    MediaPlayer1.EnabledButtons:=[btPause,btStop,btNext,btPrev,btEject];
    MediaPlayer1.TimeFormat:=tfTMSF;//时间格式
      with TMSFRec(CDPosition) do//第一个曲目开始播放位置
        begin
          Tracks:=1;
          Minutes:=0;
          Seconds:=1;
        end;
      MediaPlayer1.Position:=CDPosition;
      MediaPlayer1.Play;//播放
      if MediaPlayer1.Mode<>mpPlaying then//不在播放状态,曲目按钮不可见
         begin
          MediaPlayer1.Tag:=-1;
          DisPlayPanel.Caption:='没有音乐可以播放!';
          for i:=1 to 25 do
            CDTracksArray[i].Visible:=False;
         end
       else
         begin
         Label2.Visible:=True;
         MediaPlayer1.Tag:=0;
         LoadBitBtn.Enabled:=False;
         for i:=1 to mediaPlayer1.Tracks do
           CDTracksArray[i].Visible:=True;
         end;
      end;
end;
procedure TMainForm.TabSet1Change(Sender:TObject;NewTab:Integer;var AllowChange:Boolean);var
i:Integer;
NotCDFlag:Boolean;
begin
MediaPlayer1.Tag:=0;
if MediaPlayer1.Mode=mpPlaying then
MediaPlayer1.Close;
MediaPlayer1.EnabledButtons:=[];
LoadBitBtn.Enabled:=True;
case NewTab of
  IsCD:
    begin
      DisplayPanel.Caption:='请稍等...';
      Edit1.Text:='播放CD音乐'
      MediaPlayer1.DeviceType:=dtCDAudio;
      MediaPlayer1.FileName:='';
      NotCDFlag:=False;
      try
        MediaPlayer1.open;
        MediaPlayer1.Next;
        MediaPlayer1.Rewind;
      except
        NotCDFlag:=True;
    end;
    if notcdflag then
    begin
    MediaPlayer1.EnabledButtons:=[];
    Edit1.Text:='请装上CD盘片!';
    ShowMessage('不能打开CD,请装上CD盘片!');
    end
    else
      begin
      MediaPlayer1.EnabledButtons:=[btPause,btStop,btNext,btPrev,btEject];
      MediaPlayer1.TimeFormat:=tfTMSF;
        with TMSFRec(CDPosition) do
          begin
            Tracks:=1;
            Minutes:=0;
            Seconds:=1;
          end;
       MediaPlayer1.Position:=CDPosition;
       MediaPlayer1.Play;
       if MediaPlayer1.Mode<>mpPlaying then
         begin
           MediaPlayer1.Tag:=-1;
           DisPlayPanel.Caption:='没有音乐可以播放';
           for i:=1 to 25 do
             CDTracksArray[i].Visible:=False;
           end
         else
           begin
             Label2.Visible:=True;
             MediaPlayer1.Tag:=0
             LoadBitBtn.Enabled:=False;
             for i:=1 to MediaPlayer1.Tracks do
               CDTracksArray[i].Visible:=True;
             end;
         end;
end;
IsAvi,IsWav,IsMidi,IsOthers:
  begin
    DisPlayPanel.Caption:='播放区...';
    Edit1.Text:='请打开文件...';
    with MediaPlayer1 do
      begin
        DeviceType:=dtAutoSelect;
        Close;
      end;
  end;
end;
end;

解决方案 »

  1.   

    procedure TMainForm.LoadBitBtnClick(Sender:TObject);
    var
      CDLoadFlag:Boolean;
    begin
      case TabSet1.TabIndex of
        IsCD:
         begin
         CDLoadFlag:=True;
         TabSet1Change(Sender,TabSet1.TabIndex,CDLoadFlag);
         end;
      Isavi,IsWav,IsMidi,IsOthers:
        begin
        OpenDialog1.FilterIndex:=TabSet1.TabIndex+1;
        if OpenDialog1.Execute then
          begin
            with MediaPlayer1 do
              begin
                FileName:=OpenDialog1.FileName;
                Edit1.Text:=ExtractFileName(OpenDialog1.FileName);
                AutoEnable:=True;
                Open;
                DisPlayRect:=Rect(2,2,0,0);
                DisPlayPanel.Caption:='请播放...';
                end;
            end;
          end;
        end;
     end;procedure TMainForm.FormDestroy(Sender:TObject);
    begin
       MediaPlayer1.Close;
    end;end.以上是代码。错误的地方在这行MediaPlayer1.DeviceType:=dtCDAudio;或者大家直接复制这些代码运行一下帮我看看吧!
    我是初学的,希望大家多多指教。
    另外想询问一下,如何在delphi代码编辑里面能够显示行数。就好像dw一样的那样的功能。
    谢谢大家了
      

  2.   

    这两句后两加上;分号就可以通过了。Edit1.Text:='播放CD音乐'MediaPlayer1.Tag:=0