Newsgroup: it.comp.lang.delphi
Titolo: Tmediaplayer

utilizzando un mediaplayer come faccio a far cambiare il nome del file 
quando premo il tasto next?non c'è nessun'evento che mi permette di 
impostare una funzione.c'è solo l'evento onclick,ma nn mi fa scegliere 
un singolo pulsante. grazie!
--- posted by geoForum on 
http://www.delphiedintorni.it

grazie!
	Ciao
	MassimoB
 
---------------------------
http://www.massimobeschi.it/


http://www.massimobeschi.it/downloads.asp?azione=scheda&idDownLoad=28
Ho guardato questo esempio e non mi piace molto perchè utilizza un timer 
per vedere la fine della riproduzione del file in corso. Io, in un 
applicazione simile, ho usato i pulsanti di TMediaPlayer (perchè 
aggiungerne altri?) e poi monitorizzo l'evento OnNotify in questo modo:
procedure TFrmPlayer.mp3playerNotify(Sender: TObject);
begin
  with Sender as TMediaPlayer do
  begin
    // alla fine di un brano il modo è ancora Playing
    //(anche se in realtà è stopped) e quindi bisogna controllare la
    //posizione per sapere quando passare al brano successivo
    if (Mode= mplayer.mpPlaying) and 
       (abs(mp3player.Position - mp3player.Length)<200) then
    begin
      mp3player.stop;
      //SelBranoSuccessivo; procedura che carica il brano successivo
      PlayRunTime;
    end; 
    { Note we must reset the Notify property to True }
    { so that we are notified the next time the }
    { mode changes }
    Notify := True;
  end;
Il problema è che lo stato dei pulsanti non si sistema e quindi sono 
stato costretto ad introdurre la procedura PlayRunTime che disabilita 
l'auto abilitazione dei pulsanti (che sbaglia lasciando il play come 
unico tasto attivo mentre è in play, quando dovrebbe essere attiva la 
pausa e lo stop) così definta:
procedure TFrmPlayer.PlayRunTime;
begin
  mp3player.Play;
  mp3player.AutoEnable:= false;
  mp3player.EnabledButtons:=[btStop,btPause,mplayer.btNext];
end;
quindi se si fa clic su un pulsante di TMediaPlayer riabilito 
l'autoenable di TMediaPlayer. Su clic dei pulsanti controllo anche il 
clic sullo STop e su Next con cui faccio avanzare al brano successivo la 
riproduzione. Ecco il codice:
procedure TFrmPlayer.mp3playerClick(Sender: TObject; Button: TMPBtnType;  
var DoDefault: Boolean);
begin
  //quest'istruzione serve per riabilitare l'AutoEnable dei pulsanti
  //disabilitato dal metodo PlayRunTime per correggere gli errori di
  //abilitazione; una volta fatto click sul controllo bisogna riabilitarlo
  //per renderlo di nuovo automatico
  mp3player.AutoEnable:=true;
  if Button = mplayer.btNext then
    //SelBranoSuccessivo; procedura che carica il brano successivo
  if Button = mplayer.btStop then
    mp3player.Position:=0;
end;
Con una sola procedura in più (la PlayRunTime) utilizzo solo il 
componente TMediaPlayer e non uso il timer.
Ciao, Mario


Ciao, Mario


200ms?
Ciao Massimo
     non avevo capito, leggendo il tuo precedente messaggio, che avevi 
scritto proprio tu l'esempio che indicavi: non volevo criticare quello 
che hai fatto (anche perchè ogni applicazione, come dici tu stesso, ha le 
proprie condizioni da rispettare), ma solo mostrare come avevo affrontato 
io la cosa e l'ho fatto confrontandomi con l'esempio che avevi scritto tu.
     I 200msec sono un numero preso a caso: non troppo grande e nemmeno 
troppo piccolo per creare un intorno sulla fine, che assicuri di capire 
quando si è arrivati in fondo al brano in riproduzione; semplicemente 
controllo quando la posizione attuale dista dalla fine per meno di 
200msec; tutto quà.
Per quanto riguarda i pulsanti: non credo che possano cambiare il loro 
aspetto se non modificando il componente.


aspetto se non modificando il componente.
penso anche io.
