TImage Bild wieder löschen

chris4712

Erfahrenes Mitglied
Hallo!

Ich möchte eine Art Animation machen. Soll heißen: Man klickt auf ein Bild, und es wird ein anders geladen.

Hab mir dazu eine TImage Komponente genommen.
Außerdem eine TImageList, in der ich die beiden Bilder habe.

Wenn die TImage Komponente noch kein Bild enthält, kann ich das aus der TImageList laden.

Wenn aber die TImage Komponente schon ein Bild hat, geht dies nicht mehr.

Frage: Wie bekomme ich das Bild wieder aus der TImageKomponente

Gruß

Christian
 
Wie das geht, hängt davon ab, wie deine Aufgabenstellung ist. Die Lösung auf deine Frage findet sich, wie das ja fast immer so ist, in der Delphi-Hilfe.
 
Hallo, löschen kannst du das Bild aus der Timage so

image1.Picture := nil

danach kannst du ein neues reinladen.
 
Code:
image1.Picture := nil
Das löscht nichts, das setzt nur den Zeiger auf 0 und die Referenz auf den Speicher ist futsch. Das ist eigentlich etwas, was man immer vermeiden will!

Zum korrekten Freigeben eines Objektes sollte man in Delphi IMMER die Free-Methode verwenden.

-Gawayn
 
Zuletzt bearbeitet:
ja so wie ich das mitbekommen habe will er eben nicht das Objet sondern das Bild aus der TImage löschen. Also wenn du ne bessere Idee hast dann lass sie uns wissen.
Es ist nicht sonderlich hilfreich zu sagen man soll in die Hilfe schauen wenn man nicht weis wonach man zu suchen hat.
 
ja so wie ich das mitbekommen habe will er eben nicht das Objet sondern das Bild aus der TImage löschen.
Aber das Bild belegt doch Speicher! Wenn man den Zeiger einfach auf 0 setzt, kann dieser Speicher nicht mehr freigegeben werden. Wenn ich das Bild entfernen will, ohne das Objekt freizugeben, könnte ich z.B. seine Dimensionen auf je 0 setzen. Damit wäre aller Bildspeicher freigegeben, das Objekt (also das TPicture) jedoch wäre noch da.

Außerdem: Es geht hier um ein TImage. Wenn ich das TPicture freigebe, ist das Bild weg, das TImage jedoch noch da.

Es ist nicht sonderlich hilfreich zu sagen man soll in die Hilfe schauen wenn man nicht weis wonach man zu suchen hat.
Natürlich weiß man, wonach man zu suchen hat, nämlich nach der Klasse, um die es geht. Wenn man ein Problem mit TPicture hat, dann sucht man nach TPicture, wenn man ein Problem mit TImageList hat, dann sucht man danach. Und folgt den Links. Das ist elementar.

-Gawayn
 
Zuletzt bearbeitet:
Ist doch egal wenn man den Speicher nicht freigibt. Er will das Bild ja vlt auch nochmal verwenden ;) Und wenn er es dann versuchen würde(wenn es freigegeben ist), dann gibts nen hübschen Zugriffsfehler, und keiner weiß warum....
Es ist ja noch in der ImageList, also is gar nix futsch.
Davon mal abgesehen, gibt Delphi doch eh allen Speicher beim beendebn des Programmes wieder frei.
 
Ist doch egal wenn man den Speicher nicht freigibt. Er will das Bild ja vlt auch nochmal verwenden Und wenn er es dann versuchen würde(wenn es freigegeben ist), dann gibts nen hübschen Zugriffsfehler, und keiner weiß warum....
Es ist ja noch in der ImageList, also is gar nix futsch.
Also, ich glaube, hier herrscht grade ein wenig Konfusion.

Davon mal abgesehen, gibt Delphi doch eh allen Speicher beim beendebn des Programmes wieder frei.
Tja, das macht Delphi aber nicht deswegen, damit man den Speicher nicht mehr freigeben braucht, sondern damit die vom Programmierer *vergessenen* Objekte auch noch ihren Destruktor-Aufruf kriegen. Es handelt sich dabei um eine Präventionsmaßnahme. Wenn du so programmierst, wie du's hier vorschlägst, kannst du ausschließlich für deine eigenen Belange programmieren, im Team wird das nix.

-Gawayn
 
Wird im Team nur was, wenn jeder davon weiß :)

Also ist es schneller die Destruktoren nicht selbst aufzurufen. Die werdn eh nochma aufgerufen :p
mein ich abr nur als scherz, mit dem nicht aufrufen. sollte man nat machen.
will nur dass die leute nicht gleich angst kriegen, wenn sies mal vergessen :p
 

Neue Beiträge

Zurück