Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Playlist: Wiederholungsproblem (https://www.delphipraxis.net/73291-playlist-wiederholungsproblem.html)

Nils_13 15. Jul 2006 11:05


Playlist: Wiederholungsproblem
 
Hi,

Ich habe in einer Playlist z.B. 2 Lieder. Wenn ich mir das erste Lied angehört habe, wird das darauffolgende Lied abgespielt. Wenn das darauffolgende Lied (in dem Fall, weil es 2 Lieder sind, das letzte Lied) soll wieder das erste Lied abgespielt werden. Ich kann hier natürlich nicht subtrahieren, da es ja auch z.B. 10 Lieder sein können. Bei folgendem Code funktioniert zwar alles, aber wenn ich das letzte Lied gehört habe, wird, anstelle von Sprung zur Startposition, das letzte Lied nochmal wiederholt:
Delphi-Quellcode:

TID3Tag = record
  ID     : string[3];
  Titel     : string[30];
  Artist     : string[30];
  Album     : string[30];
  Year     : string[4];
  Comment     : string[30];
  Genre     : Byte;
  FileName  : string;
end;

// ...

var filename : String;
    fFiles : Array of TID3Tag;
begin
  // ...
  if tb1.Position = tb1.Max - 1 then
  begin
    if lbList.ItemIndex = lbList.Items.Count then
    begin
      filename := fFiles[0].FileName;
    end else
    begin
      tb1.Max := GetSongLength;
      BASS_ChannelStop(chan);
      filename := fFiles[lbList.ItemIndex + 1].FileName;
      chan := BASS_StreamCreateFile(FALSE,pchar(filename),0,0,0);
      BASS_ChannelPlay(chan, False);
    end;
  end;
  // ...

Hawkeye219 15. Jul 2006 11:22

Re: Playlist: Wiederholungsproblem
 
Hallo Nils,

wenn lbList eine ListBox-Referenz ist, dann sollte die Bedingung in Zeile 20 niemals den Wert True annehmen. Der ItemIndex einer ListBox kann nur Werte im Bereich [-1..Items.Count-1] annehmen. Dies wird wahrscheinlich in Zeile 27 zum nächsten Fehler führen, weil du auf ein Element außerhalb des Felds fFiles zugreifst.

Den nächsten Index erhältst du so:

Delphi-Quellcode:
with lbList do
  if (Items.Count > 0) then
    ItemIndex := Succ(ItemIndex) mod Items.Count;
Gruß Hawkeye

Klaus01 15. Jul 2006 11:48

Re: Playlist: Wiederholungsproblem
 
Hallo Nils,

mach doch zwei Schleifen,

repeat

for i:=0 to lb.count -1 do
play title

until not never_ending_play

Grüße
Klaus


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:52 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz