Delphi-PRAXiS
Seite 2 von 4     12 34      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Zugriffsverletzung bei Adresse 00000000 bei TImage (https://www.delphipraxis.net/127762-zugriffsverletzung-bei-adresse-00000000-bei-timage.html)

SuperSeb 18. Jan 2009 18:12

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...

himitsu 18. Jan 2009 18:15

Re: Zugriffsverletzung bei Adresse 00000000 bei TImage
 
muß man TImage nicht beim .Create einen Owner übergeben?
Zitat:

Zitat von SuperSeb
@DeddyH: O, stimmt. Tut mir Leid, hab oben das falsch geschrieben. Ist natürlich im Original-Code richtig mit Parameter.

und welches Objekt hast du da als Owner übergeben?

SuperSeb 18. Jan 2009 18:26

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.

DeddyH 18. Jan 2009 18:29

Re: Zugriffsverletzung bei Adresse 00000000 bei TImage
 
Dann zeig doch mal die relevanten Quellcode-Stellen, bevor wir hier weiter in einer Blackbox herumstochern.

3_of_8 18. Jan 2009 18:31

Re: Zugriffsverletzung bei Adresse 00000000 bei TImage
 
Gibst du das Bild auch wieder irgendwann frei?

DeddyH 18. Jan 2009 18:33

Re: Zugriffsverletzung bei Adresse 00000000 bei TImage
 
Nur im Destruktor, hat er weiter oben gesagt.

SuperSeb 18. Jan 2009 18:47

Re: Zugriffsverletzung bei Adresse 00000000 bei TImage
 
@ 3_of_8:

Zitat:

[...] einmal im destructor.

@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

3_of_8 18. Jan 2009 18:49

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.

SuperSeb 18. Jan 2009 18:58

Re: Zugriffsverletzung bei Adresse 00000000 bei TImage
 
Danke für deine Antwort.

Habe jetzt folgendes im Konstruktor stehn:

Delphi-Quellcode:
//...
Bild := TImage.Create(nil);
//...
...aber es kracht immer noch. Diemal sagt er (mal etwas konkreter): Exception der Klasse EInvalidPointer Meldung: "Ungültige Zeigeroperation"

Hmmm... Mist.

Was nu?

:glaskugel:

mkinzler 18. Jan 2009 19:01

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.
Seite 2 von 4     12 34      

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