Oppure

Loading
17/03/09 10:30
giulyfer
Salve ragazzi!
Ho creato un lettore multimediale utilizzando l'oggetto Tmediaplayer.
Ma, invece che usare i bottoni predefeniti, ne utilizzerò alcuni creati da me.
Nella form ho inserito una Tlistview dove l'utente può selezionare tramite checkbox le tracce da ascoltare in sequenza.
Per riprodurle utilizzo un ciclo while:
//* i è la lunghezza dell'array canzoni che contiene le tracce da riprodurre

while i<c do
begin
tmediaplayer.open:=canzoni[i];
tmediaplayer.wait:=true;
tmediaplayer.play;
i:=i+1;
end;

Il wait consente di aspettare la fine di una traccia per poi riprudurre la successiva. Il problema è che questa proprietà blocca la form!
Comunque il ciclo non termina fino a che le tracce non sono state ovviamente tutte riprodotte(perchè non c'è un'altra condizione di uscita)!
Ho consultato la guida in linea di delphi e ci riporta alle proprietà Onnotify,Resume,Mode...

Potete gentilmente aiutarmi a trovare una soluzione per quella che sarà la mia tesina?
Grazie a tutti,
Giulia
aaa
17/03/09 17:55
Anonymous
Avevo anche io il tuo stesso problema... e dopo parecchio tempo perso sono giunto ad una conclusione un po' macchinosa ma che mi ha risolto il problema...

praticamente avevo una serie di canzoni da far suonare però una dopo l'altra.... esattamente come te....

per evitare che il programma si blocchi fintanto che non ha finito di suonare tutte le canzoni in lista io usavo un timer e gli facevo suonare una canzone alla volta

cioè

all'oggetto mediaplayer gli passavo una canzone

poi ho messo un timer che controllava secondo dopo secondo la posizione della canzone che veniva letta... in modo tale che quando il timer si accorgeva che la canzone era finita, allora passava all'oggetto mediaplayer la successiva canzone...

più o meno cosi:

mettiamo che nella listbox1 c'è l'elenco (completo di percorso) delle canzoni da far suonare ( quindi della serie "/cartella1/…;).

ora metti dentro al button1 questo codice
   mediaplayer1.DeviceType:=dtautoselect;
   mediaplayer1.FileName:=filelistbox1.Items[filelistbox1.itemindex];
   mediaplayer1.open;
   mediaplayer1.Wait:=false;
   mediaplayer1.Play;
   timer1.enabled:=true;


dentro a onformcreate metti:

filelistbox1.itemindex:=0;

e questo dentro al timer
var a:integer;
begin
 if mediaplayer1.length = mediaplayer1.Position then
 begin
 a:= filelistbox1.itemindex;
  filelistbox1.ItemIndex:=filelistbox1.ItemIndex+1;
  if filelistbox1.itemindex<>a then
  button1.click;
 else
  mediaplayer1.Stop;
  end;



il timer in fase di progettazione lo dovrai settare disabilitato all'inizio.. cosi ti parte solo da quando si clicca sul button1
aaa