Управление файлами 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
Комментарии