Autor Beitrag
aisti5792
Hält's aus hier
Beiträge: 2



BeitragVerfasst: So 30.05.10 14:16 
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.

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1742
Erhaltene Danke: 72

Win7 x64, Ubuntu 11.10
Delphi 7 Personal, Lazarus/FPC 2.2.4, C, C++, C# (Visual Studio 2010), PHP, Java (Netbeans, Eclipse)
BeitragVerfasst: 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

_________________
Ich weiß nicht viel, lern aber dafür umso schneller^^
aisti5792 Threadstarter
Hält's aus hier
Beiträge: 2



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1742
Erhaltene Danke: 72

Win7 x64, Ubuntu 11.10
Delphi 7 Personal, Lazarus/FPC 2.2.4, C, C++, C# (Visual Studio 2010), PHP, Java (Netbeans, Eclipse)
BeitragVerfasst: 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:
  • für alle Units sichtbar
  • deklaration vor implementation
  • ABER: globale Variablen sollte man vermeiden

eine Klassen-Variable:
  • nur dür die aktuelle Unit sichtbar
  • deklaration nach implementation
  • ABER auch die sollte man nur gebrauchen wenn sie unbedingt notwendig sind.

eine Objekt-Variable
  • sichtbar für das Objekt in dem sie deklariert wurde
  • deklaration im private-Teil des Objekts (also bei dir unter TForm1 private)
  • --> das was du sucht


kleines Beispiel:
ausblenden volle Höhe 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 ans Herz legen, da werden die Grundlagen ausführlich erklärt ;)

MfG Bergmann

_________________
Ich weiß nicht viel, lern aber dafür umso schneller^^