Einzelnen Beitrag anzeigen

onkeldave

Registriert seit: 27. Okt 2009
25 Beiträge
 
#1

EStringListError aufgetreten (delphi7)

  Alt 27. Okt 2009, 20:12
Guten Abend

Ich möchte euch mein 1. Projekt vorstellen einen MP3 Player.
Er funktioniert auch soweit.


Delphi-Quellcode:
unit test_u;
interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, MPlayer, ShellApi, mmsystem;

type
  TForm1 = class(TForm)
    MediaPlayer1: TMediaPlayer;
    Button1: TButton;
    ListBox1: TListBox;
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure ListBox1Click(Sender: TObject);
    procedure MediaPlayer1Notify(Sender: TObject);

  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
    Procedure AddToPlayList(s:string);
    procedure PlayFile(songNumber: integer); // deklaration von playfile ändern, hier das 1. mal
    Procedure WMDropFiles (Var aMsg: tMessage); message WM_DROPFILES;
  end;

var
  Form1: TForm1;
  playList: TStringList;
  CurrentSong: integer = -1; // neue globale variable um uns das aktuelle lied zu merken

implementation

{$R *.dfm}

Procedure TForm1.WMDropFiles (Var aMsg: tMessage);
Var
  Idx, Size, FileCount: Integer;
  Filename: pChar;
Begin
  Inherited;
  FileCount := DragQueryFile (aMsg.WParam, $FFFFFFFF, nil, 255);
  For Idx := 0 To FileCount -1 Do Begin
    Size := DragQueryFile (aMsg.WParam, Idx, nil, 0) + 1;
    Filename := StrAlloc (Size);
    If DragQueryFile (aMsg.WParam, Idx, Filename, Size) = 1 Then { nothing }
    else AddToPlayList (pChar (Filename));
    StrDispose (Filename);
  End;
  DragFinish (aMsg.WParam);
End;

Procedure TForm1.AddToPlayList(s:string);
begin
   playList.Add(s);
   ListBox1.Items.Add(extractfilename(s));
end;



procedure TForm1.Button1Click(Sender: TObject);
begin
  mediaplayer1.FileName := 'C:\Users\Dave\Desktop\testut\01 Die, All Right!.wma';
  mediaplayer1.Open;
  mediaplayer1.play;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
   DragAcceptFiles (Handle, True); // drag und drop akzeptieren
   playList := TStringList.Create;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
   playList.Free;
end;

procedure TForm1.PlayFile(songNumber: integer); // deklaration von playfile ändern, hier das 2. mal
begin
   if fileexists(Playlist.Strings[songNumber]) then begin
     CurrentSong := songNumber;
     mediaplayer1.Close;
     mediaplayer1.FileName := Playlist.Strings[songNumber];
     mediaplayer1.Open;
     mediaplayer1.play;
   end;
end;

procedure TForm1.ListBox1Click(Sender: TObject);
var i : integer;
begin
  for i := 0 to listbox1.Count do
    if listbox1.Selected[i] then break;
  { nun haben wir in i die nummer der selektierten Zeile
    da Listbox und Playlist eine identische Reihe der Einträge und gleiche Sortierung
    vorweisen, können wir mit dem erhaltenen index den richtigen Eintrag der Playlist
    auslesen. }

  PlayFile(i);


end;

procedure TForm1.MediaPlayer1Notify(Sender: TObject); // unser neues Notify-Event
begin
   if mediaplayer1.Position = mediaplayer1.Length then begin
   // position = gesamtlänge, bedeutet dass das lied beendet wurde
     Listbox1.Selected[currentSong] := false; // das gerade gespielte lied de-selektieren
     inc(currentSong); // aktuellen song um eines erhöhen
     if currentSong < Playlist.Count -1 then { alles passt, songindex im rahmen}
     else currentsong := 0; {ende der liste erreicht, setze aktuelles lied auf anfang}
     PlayFile(CurrentSong);
     Listbox1.Selected[currentSong] := true; // das aktuelle lied selektieren
   end;


end;


end.


das erste lied läuft und sobalt das 2 starten sollte kommt diese Fehlermeldung

Fehlermeldung
Im Projekt unit.exe ist eine Exception der Klasse EStringListError aufgetreten. Meldung: ' Listenindex überschreitet das Maximum (1)'. Prozess wurde angehalten. Mit einzelne Anweisung oder Start fortsetzen.


und hier bei dem letzten end; würd der fehler gefunden
Delphi-Quellcode:
procedure TForm1.ListBox1Click(Sender: TObject);
var i : integer;
begin
  for i := 0 to listbox1.Count do
    if listbox1.Selected[i] then break;
  { nun haben wir in i die nummer der selektierten Zeile
    da Listbox und Playlist eine identische Reihe der Einträge und gleiche Sortierung
    vorweisen, können wir mit dem erhaltenen index den richtigen Eintrag der Playlist
    auslesen. }

  PlayFile(i);


end;
Ich hoffe mir kann einer Helfen

ich habe so zimlich überall nachgeschaut und irgendwie nichts gefunden
Miniaturansicht angehängter Grafiken
mprplayer_204.png  
  Mit Zitat antworten Zitat