AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi TImages, deren Pointer in einer TList stehen, frei geben
Thema durchsuchen
Ansicht
Themen-Optionen

TImages, deren Pointer in einer TList stehen, frei geben

Ein Thema von idontwantaname · begonnen am 28. Apr 2005 · letzter Beitrag vom 28. Apr 2005
Antwort Antwort
Benutzerbild von idontwantaname
idontwantaname

Registriert seit: 31. Aug 2004
Ort: Traiskirchen
575 Beiträge
 
Turbo Delphi für Win32
 
#1

TImages, deren Pointer in einer TList stehen, frei geben

  Alt 28. Apr 2005, 14:09
Hallo

Ich habe ein Problem, und zwar folgendes: Ich erstelle dynamisch mehrere TImage-Objekte und speichere diese mit folgendem Code in eine TList:
Delphi-Quellcode:
MyImage: TImage;
Images: TList;
{...}
MyImage := TImage.Create( Form1 );
MyImage.Parent := Form1;
{...}
Images.Add( @MyImage );
Nun möchte ich diese Images wieder freigeben und so hab ich versucht, dies so zu lösen:
Delphi-Quellcode:
procedure TForm1.FormDestroy(Sender: TObject);
var
  i: Integer;
  MyImage: ^TImage;
begin
  for i := 0 to Images.Count - 1 do
  begin
    MyImage := Images.Items[i];
    MyImage^.Free;
  end;

  Images.Free;
end;
Leider gibt es beim schließen des Programms eine AV
Kann mir jemand helfen und erklären, wo der Fehler in diesem Code ist ??
Oliver Hanappi
Besucht meine neue Homepage: http://oli.hux.de
  Mit Zitat antworten Zitat
Benutzerbild von Khabarakh
Khabarakh

Registriert seit: 18. Aug 2004
Ort: Brackenheim VS08 Pro
2.876 Beiträge
 
#2

Re: TImages, deren Pointer in einer TList stehen, frei geben

  Alt 28. Apr 2005, 14:16
Wie schon oft gesagt, Objektreferenzen (also z.B. Image: TImage) sind schon selbst Pointer. Delphi nimmt dir schon die meiste Arbeit ab, mit ^TImage hast du einen Pointer auf einen Pointer auf deine Klasse.
Nimm am besten gleich Delphi-Referenz durchsuchenTObjectList .
Sebastian
Moderator in der EE
  Mit Zitat antworten Zitat
Benutzerbild von idontwantaname
idontwantaname

Registriert seit: 31. Aug 2004
Ort: Traiskirchen
575 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: TImages, deren Pointer in einer TList stehen, frei geben

  Alt 28. Apr 2005, 14:24
so, ich hab jetzt eine TObjectList genommen, und füge die Images mit
Images.Add( MyImage ); ein, und gebe die Objekte auch wieder mit
Delphi-Quellcode:
for i := 0 to Images.Count do
  Images.Items[i].Free;
wieder frei, nur bekomme ich immer noch eine AV
Oliver Hanappi
Besucht meine neue Homepage: http://oli.hux.de
  Mit Zitat antworten Zitat
teebee

Registriert seit: 17. Jan 2003
Ort: Köln
460 Beiträge
 
Delphi 6 Professional
 
#4

Re: TImages, deren Pointer in einer TList stehen, frei geben

  Alt 28. Apr 2005, 14:27
Ist die Eigenschaft OwnsObject der ObjectList gesetzt? Dann sezte sie auf False, dann übernimmt die Liste die Freigabe nicht selbst.

Edit: Oder gib einfach nicht selbst frei...

Gruß, teebee
  Mit Zitat antworten Zitat
Benutzerbild von idontwantaname
idontwantaname

Registriert seit: 31. Aug 2004
Ort: Traiskirchen
575 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: TImages, deren Pointer in einer TList stehen, frei geben

  Alt 28. Apr 2005, 14:32
oh, das macht eine TObjectList selber ??
na, dann ist das problem gelöst
Oliver Hanappi
Besucht meine neue Homepage: http://oli.hux.de
  Mit Zitat antworten Zitat
Benutzerbild von Khabarakh
Khabarakh

Registriert seit: 18. Aug 2004
Ort: Brackenheim VS08 Pro
2.876 Beiträge
 
#6

Re: TImages, deren Pointer in einer TList stehen, frei geben

  Alt 28. Apr 2005, 14:38
Zur ursprünglichen Frage:
Nach unten zählen!
Delphi-Quellcode:
for i := Images.Count - 1 downto 0 do
  Images.Delete(i);
Sebastian
Moderator in der EE
  Mit Zitat antworten Zitat
Benutzerbild von idontwantaname
idontwantaname

Registriert seit: 31. Aug 2004
Ort: Traiskirchen
575 Beiträge
 
Turbo Delphi für Win32
 
#7

Re: TImages, deren Pointer in einer TList stehen, frei geben

  Alt 28. Apr 2005, 14:43
okay,
nochmals danke
Oliver Hanappi
Besucht meine neue Homepage: http://oli.hux.de
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.105 Beiträge
 
Delphi 11 Alexandria
 
#8

Re: TImages, deren Pointer in einer TList stehen, frei geben

  Alt 28. Apr 2005, 15:43
Moin idontwantaname,

wenn Du dir Objekte so erzeugst

MyImage := TImage.Create( Form1 ); nämlich mit Angabe eines Owners (in diesem Falle Form1), brauchst Du diese nicht selber freizugeben.
Dies geschieht automatisch, wenn der Owner freigeben wird.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Benutzerbild von sECuRE
sECuRE

Registriert seit: 10. Apr 2003
Ort: Heidelberg
360 Beiträge
 
Delphi 7 Professional
 
#9

Re: TImages, deren Pointer in einer TList stehen, frei geben

  Alt 28. Apr 2005, 16:06
Hi,

alternativ zum nach unten zählen kann man es auch so lösen:
Delphi-Quellcode:
while (Images.Count > 0) do
  Images.Items[0].Free;
cu
  Mit Zitat antworten Zitat
Benutzerbild von idontwantaname
idontwantaname

Registriert seit: 31. Aug 2004
Ort: Traiskirchen
575 Beiträge
 
Turbo Delphi für Win32
 
#10

Re: TImages, deren Pointer in einer TList stehen, frei geben

  Alt 28. Apr 2005, 17:07
Zitat von Christian Seehase:
Moin idontwantaname,

wenn Du dir Objekte so erzeugst

MyImage := TImage.Create( Form1 ); nämlich mit Angabe eines Owners (in diesem Falle Form1), brauchst Du diese nicht selber freizugeben.
Dies geschieht automatisch, wenn der Owner freigeben wird.
auch gut, dann hat sich die sache ja ziemlich einfach erledigt
Oliver Hanappi
Besucht meine neue Homepage: http://oli.hux.de
  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 05:20 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