Einzelnen Beitrag anzeigen

NormanSteinmetz

Registriert seit: 21. Aug 2003
Ort: Oberhausen
9 Beiträge
 
#14

Re: Fehler beim beenden durch FormDestroy

  Alt 30. Aug 2003, 11:50
Hallo Woki,

Delphi schmeisst mir ja eine Debugger Meldung aus nur kann ich damit nicht wirklich etwas anfangen.

Ich weiss bzw habe eine Ahnung wo der Fehler liegt am beseten versuch ich es mal mit einem Teil des Quellcodes darzulegen.
Bisher hole ich mit vom Hauptformular was der Player ist Informationen über die Playlist in einem zweiten Formular. Dieses ist aktiv.

Delphi-Quellcode:
program Project1;

uses
  Forms,
  Unit1 in 'Unit1.pas{FORM_Player},
  Unit2 in 'Unit2.pas{FORM_Equalizer},
  Unit3 in 'Unit3.pas{FORM_INFO},
  Unit4 in 'Unit4.pas{FORM_Configuration},
  Unit5 in 'Unit5.pas{FORM_Playlist},
  Unit6 in 'Unit6.pas{form_library},
  Unit7 in 'Unit7.pas{Form_av},
  Unit8 in 'Unit8.pas{Form_minibrowser};

{$R *.res}

begin
  Application.Initialize;
  Application.Title := 'Nostrobos X - 301';
  Application.CreateForm(TFORM_Player, FORM_Player);
  Application.CreateForm(TFORM_Equalizer, FORM_Equalizer);
  Application.CreateForm(TFORM_INFO, FORM_INFO);
  Application.CreateForm(TFORM_Configuration, FORM_Configuration);
  Application.CreateForm(TFORM_Playlist, FORM_Playlist);
  Application.CreateForm(Tform_library, form_library);
  Application.CreateForm(TForm_av, Form_av);
  Application.CreateForm(TForm_minibrowser, Form_minibrowser);
  Application.Run;
end.
Da ich auf keines der anderen Formulare zugreife sind die erstmal unrellevant. Sie playlist ist nicht sichtbar, sie besteht auch bisher nur über drei Komponenten Drivecombobox, Directorylistbox und Filelistbox.

Wenn ich den Player nun starte sehe ich nur den Player sonst nichts, beende ich ihn sofort wieder ist alles in Ordnung, keine Fehlermeldung kein garnichts, so wie es sein soll.
Drücke ich aber jetzt auf Play, so holt er sich folgende Informationen von der Filelistbox: count, itemindex und items. Das sieht dann so aus:

Delphi-Quellcode:
  iniplaylistposition := form_playlist.FileListBox1.ItemIndex;
  if iniplaylistposition > -1 then
  begin
  idfilename := Form_playlist.FileListBox1.Items[iniplaylistposition];
  BASS_start;
  image_play.Visible := true;
  image_stop.Visible := false;
  chan := BASS_streamcreatefile(false, pchar(idfilename), 0, 0, 0);
  label_title.Caption := idfilename;
  Slider_position.Position := 0;
  BASS_Streamplay(chan, false, 0);
  spielmodus := 'progress';
Wird das Programm jetzt beendet und OnDestroy aufgerufen bekomme ich folgende Meldung:

Benachrichtigung über Debugger-Exception
Im Project Project1.exe ist eine Exception der Klasse EAccsessViolation aufgetreten. Meldung:
'Zugriffsverletzung bei Adresse 004972AF in Modul 'Project1.EXE'. Lesen von Adresse FFFFFFF'. Prozess wurde angehalten. Mit Einzelne Anweisung oder Start fortsetzen.

Die OnDestroy Prozedur ist nur im Hauptformular und in der Playlist ist nichts weiter als das was ich oben geschrieben habe. Während das Programm läuft bekomme ich keinen Fehler er tritt erst dann auf wenn ich das Programm beende. Es muss also etwas mit dem schliessen und freigeben der Formulare zu tun haben oder irre ich mich da?

MFG
Norman

[edit=Daniel B]Delphi-Tags eingefügt. Mfg, Daniel B[/edit]

ich habe gerade gesehen das folgende Zeile Makiert ist:
iniplaylistposition := form_playlist.FileListBox1.ItemIndex;
Fantasie kennt keine Grenzen
  Mit Zitat antworten Zitat