Entwickler-Ecke

Grafische Benutzeroberflächen (VCL & FireMonkey) - Playlist im Mediaplayer


RainerT - Mi 06.08.03 15:36
Titel: Playlist im Mediaplayer
Ich habe in meinem Programm eine MediaPlayer-Komponente und ein Stringrid. In dem Stringgrid steht eine Liste von Dateinamen (MP3's) die soetwas wie eine Playlist darstellen.

Jetzt möchte ich bei jedem Klick auf den "Next"-Button des Mediaplayers die nächste Date aus der Liste abspiele, unabhängig davon, ob das abspielen der vorherigen schon beendet ist oder nicht.

Momentan sieht der Code dazu so aus:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
procedure TfrmMain.mdplyrMP3Click(Sender: TObject; Button: TMPBtnType; var DoDefault: Boolean);
var
   S1, S2 : String;
begin
   case Button of
      btNext : begin
                  mdplyrMP3.Stop;
                  mdplyrMP3.Tag := mdplyrMP3.Tag + 1;
                  mdplyrMP3.FileName := strgrdPlaylist.Cells[2, mdplyrMP3.Tag];
                  mdplyrMP3.Play;
                  S1 := mdplyrMP3.ErrorMessage;
                  s2 := S1;
               end;
   end;
end;


In "Tag" steht die Nummer des aktuellen Eintrags im Stringgrid. Also, dass zuweisen des neuen Dateinamens ist nicht das Problem, das funktioniert. Aber nach dem Aufruf von "Play" passiert nichts, obwohl die ErrorMessage sagt, es hätte geklappt.

Hape auch schon versucht, mit Open und Close vor dem wechsel die Komponente zu schliessen und vor dem Play zu öffnen. Funzt aber auch nicht.

Bin da echt ratlos...


Cyrus - Mi 06.08.03 16:04

hast
mdplyrMP3.open;
und
mdplyrMP3.close;

vergessen

Greetz Cyrus


RainerT - Mi 06.08.03 18:31

Hm. Ich habe den Code mal folgendermaßen geändert:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
procedure TfrmMain.mdplyrMP3Click(Sender: TObject; Button: TMPBtnType; var DoDefault: Boolean);
var
   S1, S2 : String;
begin
   case Button of
      btNext : begin
                  mdplyrMP3.Stop;
                  mdplyrMP3.Close;
                  mdplyrMP3.Tag := mdplyrMP3.Tag + 1;
                  mdplyrMP3.FileName := strgrdPlaylist.Cells[2, mdplyrMP3.Tag];
                  mdplyrMP3.Open;
                  mdplyrMP3.Play;
                  S1 := mdplyrMP3.ErrorMessage;
                  s2 := S1;
               end;
   end;
end;


Das ist in sofern besser, als dass er jetzt "weiß" welche Datei die nächste ist. Nur das "mdplyrMP3.Play" bleibt wirkungslos. Er spielt erst das nächste Lied, wenn ich wieder auf den Play-Button drücke...


RainerT - Mi 06.08.03 19:57

...ich hab's raus: Man muss noch "DoDefault" auf False setzen, damit man den Mediaplayer dazu bewegen kann, die Play-Methode aufzurufen wenn man den Next-Button klickt...

:autsch: