Внешний вид сайта:

Управление файлами CD

Статья объясняет некоторые принципы использования MediaPlayer с файлами компакт-диска. Создаем новый проект, помещаем на форму TMediaPlayer, TTrackBar, TOpenDialog, TTimer, 2 TLabel и 5 TButton.

Пишем код:

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

Комментарии

Нет комментариев. Ваш будет первым!