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

📄 mainfm.~pas

📁 在delphi提供的控件基础上
💻 ~PAS
字号:
unit MainFM;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, MPlayer, StdCtrls, Buttons, ComCtrls, ExtCtrls, Menus;

type
  TMainForm = class(TForm)
    MPlayer: TMediaPlayer;
    SBtnPlay: TSpeedButton;
    SBtnStop: TSpeedButton;
    SBtnPause: TSpeedButton;
    SBtnOpenFile: TSpeedButton;
    TBLength: TTrackBar;
    DgOpen: TOpenDialog;
    StatusBar: TStatusBar;
    Timer: TTimer;
    MainMenu: TMainMenu;
    MIMedia: TMenuItem;
    MIAVI: TMenuItem;
    MIDAT: TMenuItem;
    MIWav: TMenuItem;
    MIMID: TMenuItem;
    MIAll: TMenuItem;
    N1: TMenuItem;
    MIAutoRewind: TMenuItem;
    procedure SBtnPlayClick(Sender: TObject);
    procedure SBtnStopClick(Sender: TObject);
    procedure SBtnOpenFileClick(Sender: TObject);
    procedure SBtnPauseClick(Sender: TObject);
    procedure TimerTimer(Sender: TObject);
    procedure TBLengthChange(Sender: TObject);
    procedure MPlayerNotify(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure MIAVIClick(Sender: TObject);
    procedure MIDATClick(Sender: TObject);
    procedure MIWavClick(Sender: TObject);
    procedure MIMIDClick(Sender: TObject);
    procedure MIAllClick(Sender: TObject);
    procedure MIAutoRewindClick(Sender: TObject);
  private
    { Private declarations }
  public
    procedure SetStrLen(var str:String; len:integer);
    function IntToStrTime(data:Longint):string;
    procedure SetButtons(Starting:boolean);
    procedure ClearMICheck;
    { Public declarations }
  end;

var
  MainForm: TMainForm;

implementation

{$R *.dfm}


procedure TMainForm.SetStrLen(var str:String; len:integer);
var tmp:string;
    i,j:integer;
begin
   SetLength(tmp,len);
   for i:=1 to len do
      tmp[i]:='0';
   j:=len;
   for i:=Length(str) downto 1 do
   begin
       tmp[j]:=str[i];
       dec(j);
       if j=0 then break;
   end;
   str:=tmp;
end;

function TMainForm.IntToStrTime(data:Longint):string;
var Hours,Minutes,Seconds:Integer;
    HourStr,MinuteStr,SecondStr:String;
begin
     Seconds:=data mod 60;  //秒
     Minutes:=data div 60;  //分
     Hours:=Minutes div 60; //小时
     Minutes:=Minutes - Hours * 60; //重新设置分

     SecondStr:=IntToStr(Seconds);
     MinuteStr:=IntToStr(Minutes);
     HourStr:=IntToStr(Hours);

     SetStrLen(SecondStr,2);
     SetStrLen(MinuteStr,2);
     SetStrLen(HourStr,2);

     Result:=HourStr+':'+MinuteStr+':'+SecondStr;
end;

procedure TMainForm.SetButtons(Starting:boolean);
begin
    if Starting then   //要开始
    begin
        SBtnPlay.Enabled:=True;
        SBtnPause.Enabled:=False;
        SBtnStop.Enabled:=False;
        SBtnOpenFile.Enabled:=True;
        TBLength.Enabled:=False;
        Timer.Enabled:=False;
    end
    else     //已经开始
    begin
        SBtnPlay.Enabled:=False;
        SBtnPause.Enabled:=True;
        SBtnStop.Enabled:=True;
        SBtnOpenFile.Enabled:=False;
        TBLength.Enabled:=True;
        Timer.Enabled:=True;
    end;
end;

procedure TMainForm.ClearMICheck;
begin
    MIAVI.Checked:=False;
    MIDAT.Checked:=False;
    MIWAV.Checked:=False;
    MIMID.Checked:=False;
    MIALL.Checked:=False;
end;


procedure TMainForm.SBtnPlayClick(Sender: TObject);
begin
    MPlayer.Play;
    SetButtons(False);
    StatusBar.Panels[0].Text:='已播放: '+IntToStrTime(TBLength.Position);
    StatusBar.Panels[2].Text:='正在播放';
end;

procedure TMainForm.SBtnStopClick(Sender: TObject);
begin
    MPlayer.Stop;
    SetButtons(True);
    TBLength.Position:=0;
    StatusBar.Panels[0].Text:='已播放: 00:00:00';
    StatusBar.Panels[2].Text:='已停止';
end;

procedure TMainForm.SBtnOpenFileClick(Sender: TObject);
begin
   MPlayer.Close;
   if DgOpen.Execute then
   begin
      With MPlayer do
      begin
          FileName:=DgOpen.FileName;
          try
            Open;

            Self.Caption:='媒体播放器 - '+DgOpen.FileName;
            TimeFormat:=tfMilliseconds;
            TBLength.Min:=0;
            TBLength.Max:=Length div 1000; //以秒为单位
            TBLength.Frequency:=TBLength.Max div 50;
            TBLength.Position:=0;

            SetButtons(True);

            StatusBar.Panels[0].Text:='';
            StatusBar.Panels[1].Text:='曲目: '+IntToStrTime(TBLength.Max);
            StatusBar.Panels[2].Text:='已打开';
          except
            ShowMessage('文件格式错误!');
          end;
       end;
   end;
end;

procedure TMainForm.SBtnPauseClick(Sender: TObject);
begin
    MPlayer.Pause;
    SetButtons(True);
    TBLength.Enabled:=True;
    StatusBar.Panels[2].Text:='已暂停';
end;

procedure TMainForm.TimerTimer(Sender: TObject);
begin
    if MPlayer.Mode = mpPlaying then
    begin
        TBLength.Position:=MPlayer.Position div 1000;
        StatusBar.Panels[0].Text:='已播放: '+IntToStrTime(TBLength.Position);
    end

    else
    if (MPlayer.Mode = mpStopped)	and (MIAutoRewind.Checked = True) then
        MPlayer.Play;

end;

procedure TMainForm.TBLengthChange(Sender: TObject);
begin
  if Abs((MPlayer.Position div 1000)-TBLength.Position) >=1 then
  begin
    if MPlayer.Mode=mpPlaying then
    begin
            MPlayer.Pause;
            Timer.Enabled:=False;
            MPlayer.Position:=TBLength.Position*1000;
            MPlayer.Play;
            Timer.Enabled:=True;
    end
    else
            MPlayer.Position:=TBLength.Position*1000;
     StatusBar.Panels[0].Text:='已播放: '+IntToStrTime(TBLength.Position);
  end;  
end;

procedure TMainForm.MPlayerNotify(Sender: TObject);
begin
    if MPlayer.Mode=mpStopped then
    begin
        MPlayer.Rewind;
        TBLength.Position:=0;
        SetButtons(True);
        StatusBar.Panels[0].Text:='已播放: 00:00:00';
    end;
end;

procedure TMainForm.FormCreate(Sender: TObject);
begin
    SetButtons(True);
    SBtnPlay.Enabled:=False;
    DgOpen.FilterIndex:=5;
    MPlayer.DeviceType:=dtAutoSelect;	
end;

procedure TMainForm.MIAVIClick(Sender: TObject);
begin
    MPlayer.DeviceType:=dtAVIVideo;
    DgOpen.FilterIndex:=1;
    ClearMICheck;
    MIAVI.Checked:=True;
end;

procedure TMainForm.MIDATClick(Sender: TObject);
begin
    MPlayer.DeviceType:=dtDAT;
    DgOpen.FilterIndex:=2;
    ClearMICheck;
    MIDAT.Checked:=True;
end;

procedure TMainForm.MIWavClick(Sender: TObject);
begin
    MPlayer.DeviceType:=dtWaveAudio;
    DgOpen.FilterIndex:=3;
    ClearMICheck;
    MIWAV.Checked:=True;
end;

procedure TMainForm.MIMIDClick(Sender: TObject);
begin
    MPlayer.DeviceType:=dtAutoSelect;
    DgOpen.FilterIndex:=4;
    ClearMICheck;
    MIMID.Checked:=True;
end;

procedure TMainForm.MIAllClick(Sender: TObject);
begin
    MPlayer.DeviceType:=dtAutoSelect;
    DgOpen.FilterIndex:=5;
    ClearMICheck;
    MIALL.Checked:=True;
end;

procedure TMainForm.MIAutoRewindClick(Sender: TObject);
begin
    MIAutoRewind.Checked:=not MIAutoRewind.Checked;
    MPlayer.AutoRewind:=MIAutoRewind.Checked;

end;

end.

⌨️ 快捷键说明

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