Avatar billede kristofferb Nybegynder
14. maj 2005 - 22:23 Der 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;

ListBox1.Selected[nummer+1]:=True;
end;
end;
Avatar billede nielle Nybegynder
14. maj 2005 - 22:33 #1
Hvad er pointen med din optælling:

Nummer := Nummer + 1;

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.
Avatar billede nielle Nybegynder
14. maj 2005 - 22:35 #2
Måske virker dette bedre:

procedure TForm1.Timer4Timer(Sender: TObject);
begin
    if mediaplayer1.Position >= mediaplayer1.Length then
    begin
        Nummer := listbox1.ItemIndex;

        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;

        Nummer := Nummer + 1;
        ListBox1.Selected[Nummer] := True;
    end;
end;
Avatar billede nielle Nybegynder
14. maj 2005 - 22:37 #3
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;

        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;

        ListBox1.Selected[Nummer] := True;
    end;
end;
Avatar billede kristofferb Nybegynder
15. maj 2005 - 21:28 #4
Fint at du så det, men jeg har jo stadig problemet med, når min playlist er spillet færdig.

Er der nogen, der kan hjælpe med det?
Avatar billede nielle Nybegynder
15. maj 2005 - 22:34 #5
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;

            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;
        end;
    end;
end;
Avatar billede hatecaps Nybegynder
18. maj 2005 - 14:22 #6
Den her burde virke uden fejl og med uendelig løkke

procedure TForm1.Timer4Timer(Sender: TObject);
begin
  if mediaplayer1.Position >= mediaplayer1.Length then
  begin
    Nummer := listbox1.ItemIndex +1;
    if Nummer = listbox1.Items.Count then Nummer := 0;
    listbox1.ItemIndex := Nummer;
    Mediaplayer1.filename := Listbox1.Items[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;
  end;
end;

ha' det godt
hatecaps
Avatar billede kristofferb Nybegynder
21. maj 2005 - 10:30 #7
Tusind tak.
Smid et svar.
Avatar billede nielle Nybegynder
21. maj 2005 - 11:21 #8
Hvem?
Avatar billede kristofferb Nybegynder
21. maj 2005 - 11:24 #9
Hatecaps.
Avatar billede hatecaps Nybegynder
23. maj 2005 - 07:43 #10
rart at du fik det til at virke :)
Avatar billede thorin_deathrage Nybegynder
05. juni 2005 - 21:51 #11
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)
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester