📄 mainfm.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
if MPlayer.AutoRewind then
begin
MPlayer.Rewind;
MPlayer.Play;
end;
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 + -