Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Zugriffverletzung (https://www.delphipraxis.net/49179-zugriffverletzung.html)

Flips 6. Jul 2005 16:41


Zugriffverletzung
 
Hi @ all.

Habe folgendes Problem.
Hier der Code:
Delphi-Quellcode:
procedure TForm1.LoadPlayList(Filename:string);
  var
  list: TStringList;
  index: integer;
  Module: PFMusicModule;
  Stream: PFSoundStream;
  TracksCount: Integer;
begin
 list:=TStringList.Create;
 list.LoadFromFile(Filename);
 TracksCount:=ListBox1.ItemIndex;
 for index:=0 to list.Count-1 do
  begin
      Stream := nil;
      Module := FMUSIC_LoadSong(PChar(list[Index]));
      if Module = nil then
      begin
        Stream := FSOUND_Stream_Open(PChar(list[Index]), FSOUND_NORMAL or FSOUND_LOOP_NORMAL, 0, 0);
      end;

      if (Module = nil) and (Stream = nil) then
      begin
        Application.MessageBox(FMOD_ErrorString(FSOUND_GetError), 'Konnte Datei nicht laden', MB_OK or MB_ICONHAND);
        Continue;
      end;

      if Module <> nil then
      begin
        FMUSIC_SetMasterVolume(Module, 255);
        if (FMUSIC_GetType(Module) = FMUSIC_TYPE_MOD) or (FMUSIC_GetType(Module) = FMUSIC_TYPE_S3M) then
          FMUSIC_SetPanSeperation(Module, 0.15);
      end;

      Tracks[TracksCount].Module := Module;
      Tracks[TracksCount].Stream := Stream;
      Tracks[TracksCount].Playing := False;

//----Hier kommt der Fehler---------//
ListBox1.Items.Add(ExtractFileName(list[index]));
//---------------------------------//
  end;
 list.Free;
 end;
Dieser Code fügt eine Datei mit vielen Dateinamen in meine Playliste ein.
Der fMod Code ist nicht so wichtig.
Allerdings kommt es an der markierten Stelle immer zu einer Zugriffsverletzung.
Kann mir wer sagen warum?

MfG
Flips

Win32.API 6. Jul 2005 16:44

Re: Zugriffverletzung
 
Hi,

Delphi-Quellcode:
for index:=0 to list.Count-1 do
zu

Delphi-Quellcode:
for index:= 1 to list.Count-1 do
ämndern dann gehts.


Win32.API

Flips 6. Jul 2005 16:50

Re: Zugriffverletzung
 
danke für die schnelle Antwort, aber dann gehts nur wenn die Datei genau einen Eintrag hat.

Gina 6. Jul 2005 17:14

Re: Zugriffverletzung
 
Hallo,

ist index nicht ein reserviertes Wort?

Tritt der Fehler immer auf, oder nur, wenn der ausgewählte index nicht existiert?

Gina.

Flips 6. Jul 2005 17:27

Re: Zugriffverletzung
 
Zitat:

Zitat von Gina
ist index nicht ein reserviertes Wort?

Ja, habs aber schon mit anderen Varibalennamen probiert, geht auch nicht.

Zitat:

Zitat von Gina
Tritt der Fehler immer auf, oder nur, wenn der ausgewählte index nicht existiert?

Immer.

marabu 6. Jul 2005 17:57

Re: Zugriffverletzung
 
Hi Flips,

dein Code ist in Ordnung, insbesondere an der markierten Stelle. Allerdings macht die Initialisierung von TrackCount keinen Sinn. Auch die unveränderte Verwendung von TrackCount in der Schleife leuchtet mir nicht ein.

Grüße vom marabu

Flips 6. Jul 2005 18:06

Re: Zugriffverletzung
 
Komisch....
Ja, das TrackCount ist nur damit ich nicht überall ListBox1.ItemIndex; hinschreiben muss :p

Christian Seehase 6. Jul 2005 18:15

Re: Zugriffverletzung
 
Moin Flips,

nimm die Zeile in der der Fehler auftritt doch einmal "auseinander", also eine Stringvariable, die den Inhalt der Liste erhält, dann eine Zeile mit ExtractFilename, und schliesslich das Hinzufügen zur Listbox.

Hast Du übrigens, nachdem Du index durch etwas anderes ersetzt hast nur compiliert, oder das Projekt neu erzeugt?

100nF 6. Jul 2005 18:46

Re: Zugriffverletzung
 
hi,

probiers mal, indem du
Delphi-Quellcode:
ListBox1.Items.Add(ExtractFileName(list[index]));
durch
Delphi-Quellcode:
ListBox1.Items.Add(ExtractFileName(list.strings[index]));
ersetzt.

bin mir nicht sicher, aber es könnte funktionieren so...

Christian Seehase 6. Jul 2005 23:44

Re: Zugriffverletzung
 
Moin Urban,

es würde mich wundern, wenn das einen Unterschied macht, denn Du kannst die Schreibweise ohne .Strings verwenden, da diese Eigenschaft in der Klasse TStrings als default deklariert wurde, so dass der Compiler beides gleichwertig verarbeiten sollte.


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:36 Uhr.
Seite 1 von 2  1 2      

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