Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Problem mit Komponente entfernen (https://www.delphipraxis.net/68692-problem-mit-komponente-entfernen.html)

tigerman33 4. Mai 2006 20:24

Re: Problem mit Komponente entfernen
 
Durch das
Delphi-Quellcode:
imgnew:=TImage.Create(self);
fühlt sich das Formular Form1 für das neue Image "verantwortlich". Da--wie bereits beschrieben--durch imgnew.Free der Instanzenzeiger nicht auf nil gesetzt wird, versucht deshalb das Form1, wenn es selbst freigegeben wird, imgnew erneut freizugeben. Und das funktioniert natürlich nicht.

Abhilfe wurde ja bereits beschrieben:
Delphi-Quellcode:
PopupMenu.PopupComponent.Free;
PopupMenu.PopupComponent := nil;

made in Germany 4. Mai 2006 20:33

Re: Problem mit Komponente entfernen
 
Hab ich versucht, funktioniert allerdings nicht

Hawkeye219 4. Mai 2006 20:37

Re: Problem mit Komponente entfernen
 
Durch

Delphi-Quellcode:
PopupMenu.PopupComponent := nil;
wird lediglich der Verweis in der Popupmenü-Komponente gelöscht, aber nicht die globale Variable imgnew. Wenn nun beim Schließen des Programms versucht wird, über

Delphi-Quellcode:
imgnew.Free;
eine Komponente freizugeben, die bereits über das Popupmenü gelöscht wurde, dann knallt es.

Ich würde in diesem Fall die globale Variable durch eine lokale Variable in der Prozedur Button1Click ersetzen. Die TImage-Komponenten erhalten ja einen Owner (self), somit werden nicht gelöschte Bilder automatisch von diesem Owner freigegeben.

Gruß Hawkeye

tigerman33 4. Mai 2006 20:39

Re: Problem mit Komponente entfernen
 
Okay, das war natürlich auch Blödsinn. Davon weiß natürlich Form1 immer noch nicht, dass die Komponente schon freigegeben ist. :oops:

Ich mag mich irren, aber eigentlich müsste Form1 beim Beenden das Image automatisch mit freigeben. Meine da mal was in der Hilfe gelesen zu haben... :stupid: Berichtigt mich wenn ich falsch liege. D.h. um das Free müsstest du dich in dem Fall gar nicht mehr kümmern.

Alternativ müsste eigentlich auch gehen:
Delphi-Quellcode:
imgnew := TImage.Create(nil);
anstelle von
Delphi-Quellcode:
imgnew := TImage.Create(self);

made in Germany 4. Mai 2006 20:47

Re: Problem mit Komponente entfernen
 
So, nun funktionierts! :thumb:

Danke für die Hilfe :!:


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:15 Uhr.
Seite 2 von 2     12   

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