Управление файлами CD
Пишем код:
unit uMain;
interface
uses
Windows, mmsystem, ExtCtrls, Dialogs, StdCtrls,
ComCtrls, Controls, MPlayer, Classes, Forms, SysUtils;
type
TForm1 = class(TForm)
MediaPlayer1: TMediaPlayer;
TrackBar1: TTrackBar;
TimeCode: TLabel;
OpenDialog1: TOpenDialog;
btnOpenFile: TButton;
btnPlay: TButton;
btnStop: TButton;
btnNext: TButton;
Button4: TButton;
Timer1: TTimer;
lblTrack: TLabel;
procedure btnOpenFileClick(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure btnPlayClick(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure TimeCodeClick(Sender: TObject);
procedure btnStopClick(Sender: TObject);
procedure TrackBar1Change(Sender: TObject);
procedure btnNextClick(Sender: TObject);
procedure Button4Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
VarTime, VarRem: String;
SetNewPos: Boolean;
trk: integer;
implementation
{$R *.DFM}
Этот файл не содержит ничего специального. Здесь используются собственные кнопки для Проигрывания, Останова и т.д. При всем этом, Вы получаете больше управления при использовании собственных кнопок.
procedure TForm1.btnOpenFileClick(Sender: TObject);
begin
if OpenDialog1.Execute then begin
MediaPlayer1.Close;
trk := StrToint(Copy(OpenDialog1.FileName, 9, Pos(
'.', OpenDialog1.FileName)-9));
MediaPlayer1.FileName := OpenDialog1.FileName;
MediaPlayer1.Open;
end;
end;
Как только мы найдем файл для проигрывания, мы будем хранить номер дорожки в переменной trk. Нам это нужно, чтобы можно было переходить к следующей дорожке или предыдущей. Для этого нужно назначить имя файла свойству FileName у MediaPlayer.
procedure TForm1.FormDestroy(Sender: TObject);
begin
MediaPlayer1.Close;
end;
Здесь будем устанавливать TrackBar:
procedure TForm1.btnPlayClick(Sender: TObject);
begin
TimeCode.Caption := '00:00';
MediaPlayer1.Open;
MediaPlayer1.TimeFormat := tfTMSF;
MediaPlayer1.Position := trk;
MediaPlayer1.Play;
Timer1.Enabled := True;
TrackBar1.Max :=
(MCI_MSF_Minute(MediaPlayer1.TrackLength[trk]) * 60) +
MCI_MSF_Second(MediaPlayer1.TrackLength[trk]);
lblTrack.Caption := 'Track: ' + InttoStr(trk);
end;
Теперь, работа таймера для обновления TrackBar:
procedure TForm1.Timer1Timer(Sender: TObject);
var
Min, Sec: Word;
Time_Elap: Integer;
begin
MediaPlayer1.TimeFormat := tfTMSF;
if SetNewPos = False then begin
TrackBar1.Position :=
(MCI_TMSF_MINUTE(MediaPlayer1.Position) * 60) +
MCI_TMSF_SECOND(MediaPlayer1.Position);
end;
With MediaPlayer1 do begin
Min := MCI_TMSF_MINUTE(Position);
Sec := MCI_TMSF_SECOND(Position);
if varTime = 'Elapsed' then begin
//Показываем прошедшее время
time_elap := (min * 60) + sec;
time_elap := TrackBar1.Max - time_elap;
varRem := '-' + Format('%.2d:%.2d',
[(Time_Elap div 60), (time_elap - 60*(Time_Elap div 60))]);
TimeCode.Caption := VarRem;
end else
Timecode.Caption := Format('%.2d:%.2d', [Min, Sec]);
If TrackBar1.Position = TrackBar1.Max then
btnNext.Click;
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
SetNewPos := False;
varTime := 'TimeLeft';
end;
procedure TForm1.TimeCodeClick(Sender: TObject);
begin
if VarTime = 'TimeLeft' then
VarTime := 'Elapsed'
else
VarTime := 'TimeLeft';
end;
procedure TForm1.btnStopClick(Sender: TObject);
begin
If MediaPlayer1.Mode <> mpStopped then
MediaPlayer1.Stop;
Timer1.Enabled := False;
end;
Далее обновляем TrackBar и позицию песни:
procedure TForm1.TrackBar1Change(Sender: TObject);
begin
if csLButtonDown in TrackBar1.ControlState then
begin
SetNewPos := True;
Exit;
end;
if SetNewPos then begin
MediaPlayer1.Pause;
MediaPlayer1.TimeFormat := tfTMSF;
MediaPlayer1.Position := mci_Make_TMSF(trk, (
TrackBar1.Position div 60),
TrackBar1.Position mod 60), 0);
MediaPlayer1.Play;
SetNewPos := False;
end;
end;
procedure TForm1.btnNextClick(Sender: TObject);
begin
if trk + 1 > MediaPlayer1.Tracks then
trk := 1
else
trk := trk + 1;
btnPlay.Click;
end;
procedure TForm1.Button4Click(Sender: TObject);
begin
if trk - 1 <= 0 then
trk := MediaPlayer1.Tracks
else
trk := trk - 1;
btnPlay.Click;
end;
end.
Автор: Douglas Tietjen
Комментарии