14. maj 2005 - 22:23Der er
10 kommentarer og 1 løsning
Min dejlige playlist
Jeg har et lille problem, som egentlig burde være nemt at løse... Men lyt:
Når jeg sætter min mediaplayer til at spille, så spiller den lystigt hele min playlist, der er bare lige én ting... Når den er færdig med sidste item i min listbox (playlist), så kommer den med en fejlmeddelelse om at listen er 'out of bounds'.
Kan jeg fjerne denne fejl? Eller måske ligefrem få den til at afspille min playlists item nummer 1 når hele listen er spillet igennem.
Her følger den procedure, der får min mediaplayer til at gå videre til næste item i playlisten hver gang en sang er færdig:
procedure TForm1.Timer4Timer(Sender: TObject); begin if mediaplayer1.Position >= mediaplayer1.Length then begin Nummer := listbox1.ItemIndex; Nummer := Nummer +1; Mediaplayer1.filename := Listbox1.Items.Strings[Nummer]; Mediaplayer1.open; Mediaplayer1.play; Label8.caption := Copy(ExtractFileName(mediaPlayer1.Filename), 0, Length(ExtractFileName(mediaPlayer1.Filename))-Length(ExtractFileExt(mediaPlayer1.Filename))); form2.TrackBar1.MinValue := 0; form2.TrackBar1.Position := 0; form2.TrackBar1.MaxValue := MediaPlayer1.Length; TrackBar1.MinValue := 0; TrackBar1.Position := 0; TrackBar1.MaxValue := MediaPlayer1.Length;
På det sted den er placeret virker det som om at du tæller op før at du begynder at afspille dit nummer. Det virkers specielt suspekt at du i slutningen har endnu en implicit optælling med:
ListBox1.Selected[nummer+1] := True;
Alt i alt så virker det som om at du aldrig nogen sinde får spillet det allerførste nummer i listen og at du i slutningen prøver at spille nummeret som kommer "lige efter det sidste nummer". Dette stemmer også pænt overens med din fejlmeddelelse.
Eller denne her - hvis altså optællingen skal ske før resten af koden:
procedure TForm1.Timer4Timer(Sender: TObject); begin if mediaplayer1.Position >= mediaplayer1.Length then begin Nummer := listbox1.ItemIndex; Nummer := Nummer + 1;
procedure TForm1.Timer4Timer(Sender: TObject); begin if mediaplayer1.Position >= mediaplayer1.Length then begin Nummer := listbox1.ItemIndex; Nummer := Nummer + 1;
if (Number < Listbox1.Items.Length) then begin ListBox1.Selected[Nummer] := True;
hmm... beklager at jeg sier det, men hvorfor alle disse LANGE svarene?
hvis du hadde gjort deg sikker på at Nummer måtte være mindre enn ListBox1.Items.Count hadde det funket med en gang:
if not (Nummer < Listbox1.Items.Count) then //Hvis Nummer er "Out of bounds" så... Nummer:= 0; //gjør nummer til 0 (starter på første i listen igjen
sett in dette mellom: Nummer := Nummer +1; og: Mediaplayer1.filename := Listbox1.Items.Strings[Nummer];
Slik: Nummer := Nummer +1; if not (Nummer < Listbox1.Items.Count) then //Hvis Nummer er "Out of bounds" så... Nummer:= 0; //gjør nummer til 0 (starter på første i listen igjen Mediaplayer1.filename := Listbox1.Items.Strings[Nummer];
på denne måten er du også sikret mot feil som kan gjøre Nummer større enn ListBox1.Items.Count
derfor vil jeg advare "hatecaps" mot hans måte, siden den er både uprofesjonell og kan føre til feil (selv om det er UTROLIG sjeldent)
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.