![]() |
Re: Zugriffsverletzung bei Adresse 00000000 bei TImage
@DeddyH: O, stimmt. Tut mir Leid, hab oben das falsch geschrieben. Ist natürlich im Original-Code richtig mit Parameter.
@3_of_8: Bin dran... |
Re: Zugriffsverletzung bei Adresse 00000000 bei TImage
muß man TImage nicht beim .Create einen Owner übergeben?
Zitat:
|
Re: Zugriffsverletzung bei Adresse 00000000 bei TImage
@3_of_8: Also, bin jetzt Zeile für Zeile durchgesprungen - läuft ohne Probleme. Der Fehler tritt erst auf, wenn man die Form schließt.
@himitsu: Also den AOwner habe ich durchgeschleift, d.h. das ist der des Klassen-Konstructors. Wahrscheinlich liegt hier der Hase im Pfeffer. Beim Erzeugen eines Objekts hatte ich dem Constructor schon mal Application mitgegeben, dann auch mal den eigenen Objektnamen. Es machte bisher keinen Unterschied und funktionierte Einwandfrei - habe auch schon gegooglet, aber so richtig schlau geworden, wo der Unterschied liegt, bin ich nicht. Vielleicht sollte ich noch dazu sagen (jetzt werde ich wahrscheinlich gesteinigt), dass ich das Objekt unter initialization instanziere, denn wenn ich das erst bei FormCreate einbaue (habs mal getestet), kommt ein schöner Fehler. |
Re: Zugriffsverletzung bei Adresse 00000000 bei TImage
Dann zeig doch mal die relevanten Quellcode-Stellen, bevor wir hier weiter in einer Blackbox herumstochern.
|
Re: Zugriffsverletzung bei Adresse 00000000 bei TImage
Gibst du das Bild auch wieder irgendwann frei?
|
Re: Zugriffsverletzung bei Adresse 00000000 bei TImage
Nur im Destruktor, hat er weiter oben gesagt.
|
Re: Zugriffsverletzung bei Adresse 00000000 bei TImage
@ 3_of_8:
Zitat:
@DeddyH: bitteschön:
Delphi-Quellcode:
initialization
Klasse := TKlasse.Create(Klasse); //Ob das wohl so stimmt??? end.
Delphi-Quellcode:
//Klassendefinition habt ihr ja schon oben
constructor TKlasse.Create(AOwner: TComponent); var begin inherited Create(AOwner); Bild := TImage.Create(AOwner); with Bild do begin Parent := Self; Transparent := true; //usw. - alles, was man hier tun will, geht, ohne dass es beim Schließen einen Fehler erzeugt end; end; destructor TKlasse.Destroy; begin Bild.Free; //da wirds gekillt end; Wenn ich jetzt in irgendwelche "hauseigenen" Prozeduren (z.B. wie oben procedure TKlasse.MachWas;) z.B. Bild.Top := 5; reinschreibe, dann gibts beim Schließen n Fehler Was mich ja am Meisten fuchst, ist, dass - wenn ich die Passage aus der Prozedur rausnehme - sowohl "Bild" als auch das andere TImage-Objekt funktioniert |
Re: Zugriffsverletzung bei Adresse 00000000 bei TImage
Okay. Du übergibst also dem Image einen Owner und gibst das Image frei, wenn deine Klasse freigegeben wird. Jetzt wird der Owner selbst freigegeben und hat noch das Image, um das er sich ja kümmern soll, und versucht es freizugeben. Was passiert, wenn man ein bereits freigegebenes Objekt nochmal freigeben will? Richtig, es kracht. :mrgreen:
Also: Übergib nil als Owner. |
Re: Zugriffsverletzung bei Adresse 00000000 bei TImage
Danke für deine Antwort.
Habe jetzt folgendes im Konstruktor stehn:
Delphi-Quellcode:
...aber es kracht immer noch. Diemal sagt er (mal etwas konkreter): Exception der Klasse EInvalidPointer Meldung: "Ungültige Zeigeroperation"
//...
Bild := TImage.Create(nil); //... Hmmm... Mist. Was nu? :glaskugel: |
Re: Zugriffsverletzung bei Adresse 00000000 bei TImage
Hast du mal durch schrittweises Ausführen im Debugger versucht herauszufinden in welcher Zeile der Fehler auftritt?
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:05 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