[ Mythbuster @ 12.04.2009. 15:48 ] @
napravio sam player koji moze da pusta samo po jednu pesmu, a ne znam da napravim playlistu, pa ako bi neko mogao da mi posalje kod i da mke uputi koje komponente da koristim u pravljenju...
a i sto se tice ovog mog, imam problem, jer dugme Stop kada pritisnem, pesma se samo pauzira, kao da sam stisnuo Pause...kod za dugme stop mi je samo
Code:

procedure TForm1.BitBtn2Click(Sender: TObject);
begin
 mp1.Stop;
end;


za pokazivanje dokle je stiglo koristim Gauge komponentu...
[ savkic @ 13.04.2009. 13:57 ] @
> napravio sam player koji moze da pusta samo po jednu pesmu, a ne znam da napravim playlistu, pa ako bi neko mogao da mi posalje kod i
> da mke uputi koje komponente da koristim u pravljenju...

Pre nekoliko dana je bilo slično pitanje (maturski rad), on je koristio ListBox. Ako ti treba vizuelni prikaz playliste onda je ListBox sasvim adekvatan. Ali pretpostavljam da tebe više muči kako kada se završi jedna pesma da se pređe na narednu? Treba ti jedan integer properti koji će čuvati indeks (u ListBoxu) trenutne pesme, kada MP javi da je pesma završena, povećaš indeks za jedan, vidiš koja je to pesma iz ListBoxa i pustiš je.

> a i sto se tice ovog mog, imam problem, jer dugme Stop kada pritisnem, pesma se samo pauzira, kao da sam stisnuo Pause...

Postavi i Position na 0.
[ bojan21 @ 14.04.2009. 00:41 ] @
Citat:
savkic:
> a i sto se tice ovog mog, imam problem, jer dugme Stop kada pritisnem, pesma se samo pauzira, kao da sam stisnuo Pause...

Postavi i Position na 0.


Kod mene se cuje neki iritirajuci zvuk pre ponovnog pustanja pesme (posle stiskanja Play), ukoliko postavim Position na 0. Ne znam do cega je, na drugom kompjuteru (sa XPom) nemam tih problema :|.
[ Mythbuster @ 14.04.2009. 15:14 ] @
ja nemam tih problema, hvala Bogu, uspelo mi je sve lepo...
Bojane, da li si ti uspeo da odradis playlistu za tvoj program, posto meni nesto ne ide, a bio bih ti zahvalan ako bi mi poslao kod, bosto sam u skripcu s vremenom, pa ne mogu da pokusavam i eksperimentisem...
[ bojan21 @ 14.04.2009. 19:43 ] @
Ne pravim nikakav program, samo sam isprobavao kako radi kontrola . Ne znam sta je problem sa playlistom, napisacu sad neki sample pa cu da okacim.

edit: Evo okacio sam, nisam stigao da stavim komentare, pitaj za sve sto ti nije jasno.

[Ovu poruku je menjao bojan21 dana 14.04.2009. u 23:19 GMT+1]
[ bojan21 @ 16.04.2009. 02:26 ] @
Ako budes koristio TMediaPlayer kontrolu, samo da ti napomenem da neke muzicke datoteke jednostavno nece da reprodukuje (dok iste datoteke normalno 'prolaze' u audio plejeru). Zbog cega se to desava stvarno ne znam, mada je sigurno do formata samog fajla.
[ Mythbuster @ 19.04.2009. 16:47 ] @
bojane, nisam siguran da li si slucajno to prevideo,ali tvoj program po zavrsetku pesme ne pusta odma sledecu pesmu, nego rucno moram da kliknem na NEXT, pa onda na PLAY, kako bi prebacilo na sledecu pesmu...
Da li bi mogao da ponovo bacis pogleda na kod, i da mi kazes sta bi trebalo da izmenim?
Unapred hvala !!!
[ bojan21 @ 19.04.2009. 19:58 ] @
Nisam imao vremena da proveravam, sigurno je problem u Notify proceduri. Evo resio sam to preko Timer-a, valjda ce da radi, nisam testirao. A Notify metodu slobodno obrisi.
[ Mythbuster @ 20.04.2009. 12:07 ] @
a kada napravim da moj program bude providan , koristeci AlphaBlend funkciju

Code:

AlphaBlend:= true;
AlphaBlend:= 90;


ono mi kaze da ne moze tako jer je to promenljiva tipa int64, a ne boolean...
kod prosle verzije programa, bez playliste, to mi je bez problema radilo bez prethodnog navodjenja bilo kakve promenjive, pa ne znam sta je u pitanju...

P.S. sada normalno radi ono menjanje pesama, pomocu Timera... :)
[ bojan21 @ 20.04.2009. 16:38 ] @
Pa iz ovog tvog koda sledi da je AlphaBlend svosjtvo ujedno i "boolean" i "integer" tipa.
Ovako napisi:
Code:

AlphaBlend:= true; //ovo aktivira providnost
AlphaBlendValue:= 90; //a ovo je nivo providnosti
[ Mythbuster @ 21.04.2009. 12:14 ] @
ok, radi i to...:)
imam jos jedan problem...
naime, ja hocu da prevedem program i na engleski, a posto imam dve forme u programu ne mogu da isprogramiram da mi se na klik na dugme iz prve forme i dugmici iz druge forme prevedu na engleski...
za prvu formu nema problema, sve radi

Code:

button2.caption:= 'next';


ali posto imam vise dugmica u drugoj formi, i treba mi da prevedem samo 17. dugme (koje nemam u prvoj formi), pokusao sam sa:

Code:

button17.caption:= 'back';


ali mi prijavljuje da to dugme ne postoji u prvoj formi (kao sto i ne postoji), pa ne znam kako to da izvedem...
[ bojan21 @ 22.04.2009. 01:07 ] @
Otvori kod prve forme (ona forma na kojoj se nalazi dugme za promenu jezika) i u uses listu dodaj 'Unit2' (naravno, unit2 zameni sa imenom unit-a druge forme ako je drugacije, bez apostrofa). Na taj nacin omogucavas kodu iz Unit1 (Form1) da vidi kod iz Unit2 (Form2), samim tim i dugme na drugoj formi.

I onda pises:

Code:

procedure TForm1.Button1Click(Sender: TObject); //Button1 je dugme za menjanje jezika
begin
button2.Caption:= 'next';  //dugme na prvoj formi
Form2.Button17.Caption:= 'back'; //dugme na drugoj formi
end;


[ Mythbuster @ 22.04.2009. 15:42 ] @
i taj problem je resen...
procitao sam na forumu da su mnogi imali problema sa tim da na klik menjaju deo pesme (ne znam kako se to zove, ali pretpostavljam da znasda mislim na onu traku po kojoj ide pokazivac dokle je stiglo), pa me zanima da li si to uspeo da uradis (ili bar mislis da znas kako bi to uradio)...
ja kao pokazivac koristim Gauge komponentu.
[ bojan21 @ 22.04.2009. 23:17 ] @
Nemoj Gauge kontrolu da koristis, nema MouseClick i MouseDown event. Umesto nje mozes ProgressBar da stavis na formu.Dodao sam par linija koda koji omogucavaju da klikom na progressBar promenis MediaPlayer.Position:

Code:

procedure TForm1.ProgressBar1MouseDown(Sender: TObject;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
Timer1.Enabled:= false;
MediaPlayer1.Pause;
ProgressBar1.Position:= Round(x/ProgressBar1.ClientWidth*ProgressBar1.Max);
MediaPlayer1.Position:= ProgressBar1.Position;
MediaPlayer1.Play;
Timer1.Enabled:= true;
end;


I jos ove dve linije na Button6.Click (to je dugme next):
Code:

procedure TForm1.Button6Click(Sender: TObject);
begin
//pre ovog ide neki kod, ali necu da ga prepisujem, sve je u primeru
ProgressBar1.Max:= MediaPlayer1.Length;
ProgressBar1.Position:= 0;

Button3.Click; //ovo nisam menjao, samo sam ostavio da vidis gde sam ubacio gornje dve linije


Imas u attachmentu izmenjenu aplikaciju.
[ savkic @ 23.04.2009. 02:03 ] @
> Nemoj Gauge kontrolu da koristis, nema MouseClick i MouseDown event. Umesto nje mozes ProgressBar da stavis na formu.Dodao sam par linija
> koda koji omogucavaju da klikom na progressBar promenis MediaPlayer.Position:

Prava kontrola za tu svrhu je TTrackBar.
[ bojan21 @ 23.04.2009. 13:00 ] @
U tom slucaju bi morao sam da pise Mouse properties-e, ne verujem da bi se snasao.
[ savkic @ 23.04.2009. 13:46 ] @
> U tom slucaju bi morao sam da pise Mouse properties-e, ne verujem da bi se snasao.

Nisam te ovde shvatio. On je do sada koristio Gauge a ti si prebacio na ProgressBar i napisao primer, ništa teže ne bi bilo da se Gauge zameni sa TTrackBarom i napiše primer.
[ bojan21 @ 23.04.2009. 14:59 ] @
Gauge, isto kao i TrackBar nema Mouse event-e u dizajneru (OnMouseMove, OnMouseDown, OnMouseUp), dok ProgressBar to ima. Nije meni nikakav problem da dodam par svojstava TrackBar-u koja bi omogucila 'hvatanje' ovih event-a, ali mislim da Mythbuster ne bi shvatio o cemu se radi.
Nadam se da je sad jasnije.
[ tkaranovic @ 23.04.2009. 16:19 ] @
Moglo je i ovako da radi:

Code:

procedure TForm1.NotifyProc(Sender: TObject);
const
  ModeStr: array[TMPModes] of string = ('Not ready', 'Stopped', 'Playing', 'Recording', 'Seeking', 'Paused', 'Open');
begin
   with Sender as TMediaPlayer do
   begin
     Form1.Caption := ModeStr[Mode];
     case Mode of
       mpStopped: if not stopFlag then Button6.Click;
       mpPlaying: if Position = Length then Stop;
                                  //ili Position := 0;
     end;
     Notify := True;
   end;
end;


[ savkic @ 24.04.2009. 00:27 ] @
> Gauge, isto kao i TrackBar nema Mouse event-e u dizajneru (OnMouseMove, OnMouseDown, OnMouseUp), dok ProgressBar to ima.

Tačno je to ali nije ni bitno jer ti eventi nisu potrebni. Sve što treba za upotrebu TTrackBara su Max i Position propertiji i OnChange event i dobija se funkcionalan slider za pesmu.
[ Mythbuster @ 24.04.2009. 00:32 ] @
ae savkicu, ubaci malo koda, moze?..
samo kod za taj deo...
[ bojan21 @ 24.04.2009. 01:45 ] @
Evo dok g. Savkic ne ubaci kod, pogledaj ovaj link (post koji je napisao DragonSlayer):

http://www.experts-exchange.co...i/Q_20375967.html?qid=20375967

Trebalo bi da radi, deluje sve ok . Mada, obrati paznju na komentar .

edit: kad odavde kliknes na link, ne mozes da pristupis postu (dok iz googla mozes), tako da evo koda koji je napisao:

Code:

DragonSlayer:
Here you go

1. Button1 has Caption that says "Play"
2. Checkbox1 has Text that says "Sync with Trackbar"
3. MediaPlayer1 has Visible set to False, and in this simple demo I've loaded in a file as well (was using an RMI file in the Windows' Media folder)
4. Timer1 has Interval set to 1000 and Enabled set to False


procedure TForm1.Button1Click(Sender: TObject);
begin
  MediaPlayer1.TimeFormat := tfMilliseconds;
  TrackBar1.Frequency := 5000;
  TrackBar1.Max := MediaPlayer1.Length;
  MediaPlayer1.Play;
end;

procedure TForm1.TrackBar1Change(Sender: TObject);
var
  LastChecked: Boolean;
begin
  LastChecked := CheckBox1.Checked;
  if CheckBox1.Checked then
    CheckBox1.Checked := False;
  MediaPlayer1.Stop;
  MediaPlayer1.Position := TrackBar1.Position;
  if CheckBox1.Checked <> LastChecked then
    CheckBox1.Checked := LastChecked;
  MediaPlayer1.Play;
end;

procedure TForm1.CheckBox1Click(Sender: TObject);
begin
  Timer1.Enabled := CheckBox1.Checked;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  TrackBar1.OnChange := nil; // this is to prevent the checkbox from becoming unchecked
  TrackBar1.Position := MediaPlayer1.Position;
  TrackBar1.OnChange := TrackBar1Change;
end;



Do not however, that using the original trackbar is not such a good solution, because when you are dragging the thumb slider (before releasing), the OnChange event still gets fired and so the MediaPlayer will try changing Position all the time (slooooow).

Perhaps you would also like to find some free trackbar components on the Net that you can use, which will only respond to OnChange when you release the mouse.

Do have fun with the code :)
[ tkaranovic @ 25.04.2009. 05:36 ] @
Hteo sam već neko vreme da napravim plejer i nisam se uspeo nakaniti a pošto je
bojan21 poslao zgodan kod za plejer uzeo sam da ga prilagodim svojim potrebama.
Zbog toga se zahvaljujem. Probaću (nisam do sada to radio) da stavim uz poruku
taj kod koji sam prilagodio svojim potrebama.


Inače za one koji neće pogledati kod koji šaljem kratko ovde:

Može da se stavi Timer (ubr, pre ovde nego što bi trebao da zameni Notify metod):

procedure TForm1.TrackBar1Change(Sender: TObject);
begin
TimerPromene.Enabled := false;
TimerPromene.Enabled := true;
end;

> Do not however, that using the original trackbar is not such a good solution,
> because when you are dragging the thumb slider (before releasing),
> the OnChange event still gets fired and so the MediaPlayer will try
> changing Position all the time (slooooow).

Tako neće menjati Position sve vreme trajanja promena nego samo onog trenutka
kada nastupi "pauza" (odnosno istekne tajmerov interval) u događanju promena.
Ako se u TimerPromene stavi sekunda (stavio sam inaèe pola sekunde) onda će sve
promene kraće od te sekunde biti preskočene, jer æe se tajmerov interval
"resetovati" pre nego što uspe da istekne. Tek kada nastupi puza promena,
odnosno istekne interval od Timer sekunde, će se dogoditi i (kod u tajmeru)
promena. Ovo može da se vidi ili proba u kodu koji šaljem.

[ Mythbuster @ 25.04.2009. 14:39 ] @
ma ProgressBar je odradio svoje...
Iskoristio sam njega zato sto mi deluje kao najefikasnije i najlakse izvodivo resenje... Hvala Bojane
A mlo me nervira sto moj program nema ono da prikazuje koliko taje pesma i dokle je stiglo, pa da ne znate mozda kako bih i to mogao da resim?
[ bojan21 @ 25.04.2009. 18:03 ] @
Stavi negde na formu dva labela - jedan za ukupno trajanje drugi za trenutnu poziciju.

Ovo je kod za ukupno trajanje, stavi ga u metodu Button6Click (dugme Next), recimo na kraj (nikako pre otvranja nove pesme):
Code:

Label1.Caption:= IntToStr(MediaPlayer1.Length div 60000) + ':' + FormatFloat('0#', Round(MediaPlayer1.Length / 1000) mod 60);


Slicno i za trenutnu poziciju, ali ovo stavi u Timer1Timer metodu, moze na pocetak:
Code:

Label2.Caption:= IntToStr(MediaPlayer1.Position div 60000) + ':' + FormatFloat('0#', Round(MediaPlayer1.Position / 1000) mod 60);


Nisam isprobao kod, mada bi trebalo da radi. Koliko se secam Lengh i Position su dati u milisekundama pa moras da delis sa 1000
[ Mythbuster @ 26.04.2009. 11:47 ] @
ok, to je uspesno reseno...
a da li postoji neka mogucnost da se pesme iz playliste menjaju na klik, ili ne?
[ bojan21 @ 27.04.2009. 13:17 ] @
Naravno da postoji mogucnost, ali nemam vremena sad da otvaram Delphi. Probaj sam da dodjes do resenja, ako zapnes negde, probacu da ti odgovorim cim budem mogao.
[ tkaranovic @ 30.04.2009. 04:35 ] @
Citat:
Mythbuster:
ok, to je uspesno reseno... :D
a da li postoji neka mogucnost da se pesme iz playliste menjaju na klik, ili ne?



U kodu koji sam slao tkaranovic se startuje na dvoklik jer bi pre trebalo da startuje dvoklikom nego klikom. Nije isti kod, u odnosu na ono što je izvorno poslao bojan(21), ali se može videti kako bi to trebalo da radi. Tako je jednostavno napraviti (dvo)klik da prosto ne verujem da nemaš ideju kako bi to moglo da se uradi. Inače ima i startovanje sa tasterom enter.



Šaljem nastavak (završni) pisanja koda, koji sam prethodno slao tkaranovic, uz ovu poruku ali ne kao odgovor na gore citiranu poruku nego za sve one koji čitaju ili će čitati i(li) pretraživati (kasnije) ovu temu i koje zanima pitanja koja su ovde pokrenuta a i napisao sam da ću i sam koristiti.

Dakle uz poruku je kod u kojem se koristi TrackBar ali ne više sa onChange i tajmer promenama nego se pozicija pesme sada menja klikom miša ili navigacionim tasterima (kada je fokusiran TrackBar). Dodatak je ispis mp3 taga (id3 i/ili mp3). Pronašao sam na Internetu zgodan unit ID3Engine koji je pisao William Anthony (ko god on bio) i koji sam ipravio i doradio na par mesta. Mesta gde sam dopisivao i(li) prilagođavao označio sam sa: "//tkaranovic". Inače ID3Engine sam iskoristio samo za čitanje informacija a daje mogućnost i da se pišu.