AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi EAccessViolation!!!! Finde den Fehler im Programm nicht!!!
Thema durchsuchen
Ansicht
Themen-Optionen

EAccessViolation!!!! Finde den Fehler im Programm nicht!!!

Ein Thema von C0lumb0 · begonnen am 7. Nov 2006 · letzter Beitrag vom 7. Nov 2006
Antwort Antwort
C0lumb0

Registriert seit: 8. Mär 2006
7 Beiträge
 
#1

EAccessViolation!!!! Finde den Fehler im Programm nicht!!!

  Alt 7. Nov 2006, 13:53
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:
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;
Könnt ihr mir irgendwie helfen ich hab alles versucht aber ich kann den Fehler nicht finde..
Mfg Andre
  Mit Zitat antworten Zitat
NormanNG

Registriert seit: 1. Feb 2006
294 Beiträge
 
Delphi 2007 Professional
 
#2

Re: EAccessViolation!!!! Finde den Fehler im Programm nicht!

  Alt 7. Nov 2006, 15:04
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?
Gruß
Norman
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#3

Re: EAccessViolation!!!! Finde den Fehler im Programm nicht!

  Alt 7. Nov 2006, 15:33
das Problem ist die Zeile:
Tbitbtn(sender).free; Du killst den Button innerhalb des Eventhandlers und das darf man nicht.
Für Formulare verwendet man in diesem Falle die Methode .Release.
Lies dazu mal:
http://www.delphipraxis.net/internal...ct.php?t=29732
Andreas
  Mit Zitat antworten Zitat
C0lumb0

Registriert seit: 8. Mär 2006
7 Beiträge
 
#4

Re: EAccessViolation!!!! Finde den Fehler im Programm nicht!

  Alt 7. Nov 2006, 15:56
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..
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#5

Re: EAccessViolation!!!! Finde den Fehler im Programm nicht!

  Alt 7. Nov 2006, 16:00
Zitat von C0lumb0:
release geht leider nicht für buttons..
Richtig erkannt; sollte auch nur als weiteres Hintergrundwissen dienen.
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.
Andreas
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:01 Uhr.
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