Mp3 Player ima nebrojeno mnogo verzija, ali je zanimljiv kao primjer baratanja multimedijalnim sadržajem.
     Kao i dosad, prvo odredimo izgled. Dimenzije prozora 296 x 218. Caption : 'Mp3 Player'. BorderStyle je bsSingle, dugme za maksimizaciju isključeno, a Position, recimo, Default.
     Prva komponenta koju ćemo staviti na prozor je MediaPlayer ( tabla System ). Prilagodimo neke osobine:

Enabled False
Visible False

     Stavimo i tri labele:

Label1
Caption  
AutoSize False
Height 14
Width 210
Left 80
Top 0
Color clBlack
Font   
Color

clYellow
Label2
Caption Lista pjesama:
Height 30
Width 145
Left 0
Top 62
Label3
Caption 00:00     00:00
AutoSize False
Height 14
Width 80
Left 0
Top 0
Color clBlack
Font   
Color

clYellow

     Sljedeći je ListBox1.

Left 0
Top 76
Height 100
Width 290

     Prebacimo se iz Delphija u Image Editor. Tu nacrtajmo 5 bitmapa, recimo ovakvih:

     Vratimo se u Delphi i dodajmo 7 SpeedButton-a:

SpeedButton1
Caption Dodaj pjesmu
Left 0
Top 176
Height 18
Width 145
SpeedButton2
Left 0
Top 42
Height 20
Width 58
Glyph  izaberimo PRVU sliku od gore prikazanih 5
SpeedButton3
Left 58
Top 42
Height 20
Width 58
Glyph  izaberimo DRUGU sliku od gore prikazanih 5
SpeedButton4
Left 116
Top 42
Height 20
Width 58
Glyph  izaberimo TREĆU sliku od gore prikazanih 5
SpeedButton5
Left 174
Top 42
Height 20
Width 58
Glyph  izaberimo ČETVRTU sliku od gore prikazanih 5
SpeedButton6
Left 232
Top 42
Height 20
Width 58
Glyph  izaberimo PETU sliku od gore prikazanih 5
SpeedButton6
Caption Izbaci pjesmu
Left 145
Top 176
Height 18
Width 145

     Ubacimo i Timer ( tabla System; osobina Enabled - False ) i  OpenDialog ( tabla Dialogs; osobina Filter FilterName - 'Mp3 files', Filter - '*.mp3' ).
     Za kraj dodajmo i TrackBar1.

Left 0
Top 16
Height 20
Width 290
Enabled False
TickStyle tsNone

     Prije samog startanja programa, u Events tabli Object Inspectora kliknimo dvaput na OnClose i prilagodimo proceduru da izgleda ovako:

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  Timer1.Free;
end;

     Ovo se radi da Timer ne bi ostao aktivan i poslije isključivanja programa, što može dovesti do zastoja u radu računara, pa i do pada sistema.

     Zatim kreirajmo privatnu funkciju.

function TForm1.IzdvojiIme(S: String): String;
var
  i, k: Integer;
  T: String;
begin
  k := 0;
  T := '';
  for i := 1 to Length(S) do
    if S[i] = '\' then
      k := i;
  for i := (k + 1) to (Length(S) - 4) do
    T := T + S[i];
  IzdvojiIme := T;
end;

     Funkcija Length(S: String): String je funkcija koja za povratnu vrijednost vraća dužinu stringa. Funkcija IzdvojiIme(S: String): String služi za izdvajanje imena iz puta. Primjer:
     Od 'C:/Windows/pjesma.mp3' dobija se 'pjesma'.
     Kao privatne definišimo i:
    a: Array[1..300]of String;
    d: String;

     Prvo kreirajmo procedure u Events tabli Object Inspector-a za ListBox1:
          OnClick:

procedure TForm1.ListBox1Click(Sender: TObject);
begin
  MediaPlayer1.Enabled := True;
  TrackBar1.Enabled := True;
end;

      Sad pređimo na SpeedButton- e. Dvoklikom na  svaki od njih stvaramo procedure koje dopunjavamo do sljedećeg izgleda:

procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
  if OpenDialog1.Execute then
    begin
      a[ListBox1.Items.Count + 1] := OpenDialog1.FileName;
      ListBox1.Items.Add(IzdvojiIme(OpenDialog1.FileName));
    end;
end;

     Ovdje vidimo kako se to otvara neki file iz Delphija.

procedure TForm1.SpeedButton3Click(Sender: TObject);
var
  m, s: Integer;
  mi, se: String;
begin
  if MediaPlayer1.Enabled then
    begin
      MediaPlayer1.FileName := a[ListBox1.ItemIndex + 1];
      MediaPlayer1.Open;
      m := MediaPlayer1.Length;
      m := m - m mod 1000;
      m := m div 1000;
      s := m mod 60;
      m := m div 60;
      mi := IntToStr(m);
      if m < 10 then
        mi := '0' + mi;
      se := IntToStr(s);
      if s < 10 then
        se := '0' + se;
      d := mi + ':' + se + '     ';
      Label3.Caption := d + '00:00';
      TrackBar1.Position := 0;
      TrackBar1.Max := MediaPlayer1.Length;
      MediaPlayer1.Play;
      Label1.Caption := ListBox1.Items.Strings[ListBox1.ItemIndex];
      Timer1.Enabled := True;
    end
  else
    if ListBox1.Items.Count > 0 then
      begin
        ListBox1Click(Sender);
        SpeedButton3Click(Sender);
      end;
end;

     Primjećujemo funkciju IntToStr. Kao što je pomenuto u poglavlju Funkcije, postoje neke funkcije koje dolaze sa Delphijem. Ovo je jedna od njih i vrlo je korištena. Kao što joj i ime kaže, ona pretvara cijeli broj ( Integer ) u tekst ( String ).
     ListBox1 - OnDblClick ( na dvoklik ):

procedure TForm1.ListBox1DblClick(Sender: TObject);
var
  m, s: Integer;
  mi, se: String;
begin
  MediaPlayer1.Enabled := True;
  TrackBar1.Enabled := True;
  MediaPlayer1.FileName := a[ListBox1.ItemIndex + 1];
  MediaPlayer1.Open;
  Label1.Caption := ListBox1.Items.Strings[ListBox1.ItemIndex];
  m := MediaPlayer1.Length;
  m := m - m mod 1000;
  m := m div 1000;
  s := m mod 60;
  m := m div 60;
  mi := IntToStr(m);
  if m < 10 then
    mi := '0' + mi;
  se := IntToStr(s);
  if s < 10 then
    se := '0' + se;
  d := mi + ':' + se + '     ';
  Label3.Caption := d + '00:00';
  TrackBar1.Position := 0;
  TrackBar1.Max := MediaPlayer1.Length;
  SpeedButton3Click(Sender);
end;

     Ostatak SpeedButton-a:

procedure TForm1.SpeedButton2Click(Sender: TObject);
begin
  if MediaPlayer1.Enabled then
    if ListBox1.ItemIndex > 0 then
      begin
        ListBox1.ItemIndex := ListBox1.ItemIndex - 1;
        ListBox1Click(Sender);
        MediaPlayer1.Position := 0;
        TrackBar1.Position := 0;
        if Timer1.Enabled then
          SpeedButton3Click(Sender);
      end
    else
      begin
        ListBox1.ItemIndex := ListBox1.Items.Count - 1;
        ListBox1Click(Sender);
        MediaPlayer1.Position := 0;
        TrackBar1.Position := 0;
        if Timer1.Enabled then
          SpeedButton3Click(Sender);
      end;
end;

procedure TForm1.SpeedButton4Click(Sender: TObject);
begin
  if MediaPlayer1.Enabled then
    begin
      MediaPlayer1.Pause;
      Timer1.Enabled := False;
    end;
end;

procedure TForm1.SpeedButton5Click(Sender: TObject);
begin
  if MediaPlayer1.Enabled then
    begin
      MediaPlayer1.Stop;
      Label3.Caption := d + '00:00';
      Timer1.Enabled := False;
      TrackBar1.Position := 0;
    end;
end;

procedure TForm1.SpeedButton6Click(Sender: TObject);
begin
  if MediaPlayer1.Enabled then
    if ListBox1.ItemIndex < (ListBox1.Items.Count - 1) then
      begin
        ListBox1.ItemIndex := ListBox1.ItemIndex + 1;
        ListBox1Click(Sender);
        MediaPlayer1.Position := 0;
        TrackBar1.Position := 0;
        if Timer1.Enabled then
          SpeedButton3Click(Sender);
      end
    else
      begin
        ListBox1.ItemIndex := 0;
        ListBox1Click(Sender);
        MediaPlayer1.Position := 0;
        TrackBar1.Position := 0;
        if Timer1.Enabled then
          SpeedButton3Click(Sender);
      end;
end;

     Zatim dvaput kliknemo na Timer.

procedure TForm1.Timer1Timer(Sender: TObject);
var
  m, s: Integer;
  mi, se: String;
begin
  m := MediaPlayer1.Position;
  m := m - m mod 1000;
  m := m div 1000;
  s := m mod 60;
  m := m div 60;
  mi := IntToStr(m);
  if m < 10 then
    mi := '0' + mi;
  se := IntToStr(s);
  if s < 10 then
    se := '0' + se;
  Label3.Caption := d + mi + ':' + se;
  TrackBar1.Position := MediaPlayer1.Position;
  if MediaPlayer1.Position = MediaPlayer1.Length then
    SpeedButton6Click(Sender);
end;

     Za kraj ćemo kreirati proceduru koja će na pomjeranje TrackBar-a reagovati tako što će pomjeriti pjesmu na ono mjesto na koje smo pomjerili i TrackBar. U Events tabli Object Inspector-a za TrackBar1 kliknimo na OnChange.

procedure TForm1.TrackBar1Change(Sender: TObject);
begin
  if MediaPlayer1.Enabled then
    MediaPlayer1.Position := TrackBar1.Position;
  if Timer1.Enabled then
    MediaPlayer1.Play;
end;

     I to je to. A Mp3 Player bi trebao da izgleda ovako:


Download