Entwickler-Ecke

Multimedia / Grafik - automatisch weiterspielen in einer Playlist


aisti5792 - So 30.05.10 14:16
Titel: automatisch weiterspielen in einer Playlist
Hallo!

Ich bin gearde dabei das ich einen Mediaplayer mit Delphi programmiere und bisher läuft es sehr gut, doch ich sitze nun schon einige Stunden dabei, dass die Lieder in der Playlist automatisch fortgesetzt werden, aber ich scheitere immer wieder.

Hier ist der Code zur Listobx (meine Playlist), ich hoffe ihr habt einige Ideen wie ich das lösen könnte.


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
procedure TForm1.ListBox1Click(Sender: TObject);
var i: Integer;
begin
for i:=0 to listbox1.Items.Count -1 do
   begin
   if listbox1.Selected[i] then
   mediaplayer1.FileName:=listbox1.Items.Strings[i];
   mediaplayer1.Open;
   mediaplayer1.Play;
   Progressbar1.Max:=Mediaplayer1.Length;
   label2.Caption:=timetostr((mediaplayer1.TrackLength[1]/(3600000*24)));
   label4.Caption:=mediaplayer1.FileName;
   end;
end;



Danke.
lg Thomas :)

Moderiert von user profile iconNarses: Code- durch Delphi-Tags ersetzt


Bergmann89 - So 30.05.10 14:48

Hey,

speicher dir beim klicken auf die ListBox einfach den Index. Und wenn der Player das lied zu ende gespielt hat erhöhst du den INdex um 1 und spielst erneut ab (Dazu würde sich eine Prozedur anbieten: procedure PlayFile(Filename: String) oder so). Ob das Lied fertig gespielt wurde kannst du mit der Länge un der aktuellen Position des Tracks prüfen...

MfG Bergmann


aisti5792 - So 30.05.10 15:20

Danke für die schnelle Antwort.

Mit Hilfe eines Arrays kann ich den Index abspeichern, nur leider habe ich keine Idee wie ich das genau machen sollte. Ich weiß einfach nicht wie ich "i" abspeichern sollte, also den Titel der gerade gespielt wird.


Bergmann89 - So 30.05.10 22:46

Hey,

die schleife hab ich ganz übersehen, das is ziemlich unpraktich. An den Index, der grade geklickt wurde kommt man so: ListBox1.ItemIndex. Zum Speichern brauchst du eine Variable die auch außerhalb der Prozedur gültig ist, also entwerder

eine globale Variable:

eine Klassen-Variable:

eine Objekt-Variable


kleines Beispiel:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
type
  TForm1 = class(TForm)
    ListBox1: TListBox;
    MediaPlayer: TMediaPlayer;
    TimeProgressBar: TProgressBar;
    TimeLabel: TLabel;
    FileNameLabel: TLabel;
    procedure ListBox1Click(Sender: TObject);
  private
    CurrentTrackIndex: Integer;
    procedure PlayFile(Filename: String);
  public
    { Public declarations }
  end;


procedure TForm1.PlayFile(Filename: String);
begin
  MediaPlayer.FileName := Filename;
  MediaPlayer.Open;
  MediaPlayer.Play;
  TimeProgressBar.Max := Mediaplayer1.Length;
  TimeLabel.Caption := TimeToStr((MediaPlayer.TrackLength[1]/(3600000*24)));
  FilenameLabel.Caption := Filename;
end;

procedure TForm1.ListBox1Click(Sender: TObject);
begin
  CurrentTrackIndex := ListBox1.ItemIndex;
  PlayFile(ListBox1.Items[CurrentTrackIndex]);
end;
Außerdem solltest du dir angewöhnen, deinen Komponenten ordentliche Namen zu geben, sonst wird das schnell unübersichtlich. Außerdem bietet es sich an, eine TeilAktion wie z.B. das Abspielen einer Datei, in eine Prozedur auszulagern. Da du ja scheinbar auch noch nicht so lange dabei bist kann ich dir diesen Crashkurs [http://www.christian-stelzmann.de/artikel/crashkurs.htm] ans Herz legen, da werden die Grundlagen ausführlich erklärt ;)

MfG Bergmann