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: