![]() |
EAccessViolation!!!! Finde den Fehler im Programm nicht!!!
Hallo ich bin gerade dabei ein Programm zu schreiben und eigentlich ist alles korrekt. Ich bin Programmzeile für Programmzeile mit Einzelanweisungen durchgegangen und nirgends kommt ein fehler. Erst nachdem die Procedure schon abgeschlossen ist tritt ein EAccessViolation auf: Meldung: 'Zugriffsverletzung bei Adresse 004032D5 in Modul AUfgabe2.exe. Lesen von Adresse 00001544. Prozess wurde angehalten. Mit einzelne Anweisung oder Start fortsetzen.
Der Fehler tritt genau dann auf wenn ich einen Button anklicke, der wiederum einige Objekte auf der Form löscht(freigibt) sich selber auch !!
Delphi-Quellcode:
Könnt ihr mir irgendwie helfen ich hab alles versucht aber ich kann den Fehler nicht finde..
procedure TReihenfolge.BedDelete(Sender: TObject);
var nummer:string;i:integer; lbl : TLabel; pic1,pic2:Timage; bitbut:Tbitbtn; begin nummer:=(Tbitbtn(sender).name[4]) ; bed1.Delete(strtoint(nummer)-1);// .componentindex-13); bed2.Delete(strtoint(nummer)-1);//(Tbitbtn(sender).componentindex-13); lbl := FindComponent('tex'+(nummer)) as TLabel ; lbl.free; pic1 := FindComponent('bi1'+(nummer)) as TImage ; pic1.free; pic2 := FindComponent('bi2'+(nummer)) as TImage ; pic2.free; Tbitbtn(sender).free; if (anzbed)>strtoint(nummer) then begin for i:=(strtoint(nummer)+1) to (anzbed) do begin lbl := FindComponent('tex'+inttostr(i)) as TLabel ; lbl.name:='tex'+inttostr(i-1); pic1 := FindComponent('bi1'+inttostr(i)) as TImage ; pic1.name:='bi1'+inttostr(i-1); pic2 := FindComponent('bi2'+inttostr(i)) as TImage ; pic2.name:='bi2'+inttostr(i-1); bitbut := FindComponent('but'+inttostr(i)) as TBitbtn ; bitbut.name:='but'+inttostr(i-1); end; end; anzbed:= anzbed-1; end; Mfg Andre |
Re: EAccessViolation!!!! Finde den Fehler im Programm nicht!
Hi,
also das Freigeben der Elemente ist nicht wirklich gut. Spätestens wenn das Formular zerstört wird, dann werden sie nochmal freigegeben, wenn sie nicht manuell erstellt wurden! Ich nehme mal an, direkt nach deiner Ereignisprozedur wird der Button wieder angesprochen, aber da isser schon weg... Warum schaltest du den Butten nicht einfach unsichtbar? |
Re: EAccessViolation!!!! Finde den Fehler im Programm nicht!
das Problem ist die Zeile:
Delphi-Quellcode:
Du killst den Button innerhalb des Eventhandlers und das darf man nicht.
Tbitbtn(sender).free;
Für Formulare verwendet man in diesem Falle die Methode .Release. Lies dazu mal: ![]() |
Re: EAccessViolation!!!! Finde den Fehler im Programm nicht!
der button wurde während der laufzeit erstellt und soll deswegen auch wieder gelöscht werden außerdem geht hiden nicht da andere buttons deren komponentennamen bekommen.
release geht leider nicht für buttons.. |
Re: EAccessViolation!!!! Finde den Fehler im Programm nicht!
Zitat:
Im angegeben Link wird gezeigt, wie man mit Window Messages arbeitet, um den Button zu löschen. Auch [TCustomForm].Release arbeitet intern mit Window Messages. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:03 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz