![]() |
Einzelne Objekte einer TObjectlist überschreiben/freigeben
Hallo,
Ich nutze eine Objectliste zum abspeichern von Records:
Delphi-Quellcode:
ActiveObject ist eine Property der Klasse TSaveObjectList, welche das übergebene Objekt an der aktuellen Position in einer TObjectlist speichert. Das funktioniert auch gut, solange an der Position in der ObjectListe noch nichts gespeichert war.
RSaveRec=Record
s:String; i:Integer; b:Boolean; end; PSaveRec=^RSaveRec; function TForm1.GetObject: PSaveRec; begin New(Result); Result.s:=edS.Text; Result.i:=seI.Value; Result.b:=chkb.Checked; end; SaveObjectList.ActiveObject:=TObject(GetObject); Möchte ich aber ein Objekt überschreiben, kommt es zu einer Zugriffsverletzung. Wie kann ich ein einzelnes Object aus einer Objectliste freigeben bzw. überschreiben, ohne das Object selbst zu kennen? ich habe mit diesem Thread ![]() versucht, das Problem zu klären, bin aber nicht weitergekommen. Schon mal Danke im Voraus für eure Anregungen René |
Re: Einzelne Objekte einer TObjectlist überschreiben/freigeb
Hallo René,
interessanter scheint mir die Prozedur SetActiveObject() zu sein. Ist die ObjectList Owner der gespeicherten Objekte? Grüße vom marabu |
Re: Einzelne Objekte einer TObjectlist überschreiben/freigeb
Ist es eigentlich klug, einen Zeiger auf einen Record als TObject zu behandeln? Ich vermute, die TObjectList benutzt zur Freigabe des alten "Objekts" dessen Methode Free. Dein Record kann diese Methode aber nicht zur Verfügung stellen...
Gruß Hawkeye |
Re: Einzelne Objekte einer TObjectlist überschreiben/freigeb
Delphi-Quellcode:
Ganz am Anfang weise ich der Liste Nil zu
procedure TSaveObjectList.SetActiveObject(const aObject: TObject);
begin { if FObjectList[FPosition]<>Nil then FObjectList[FPosition].Free; //Vor dem Überschreiben freigeben? funktioniert nicht} FObjectList[FPosition]:=Nil; //Wenn schon gefüllt - krachts hier!!! FObjectList[FPosition]:=aObject; end;
Delphi-Quellcode:
und das lässt sich auch noch getrost überschreiben.
FObjectList.Add(Nil);
|
Re: Einzelne Objekte einer TObjectlist überschreiben/freigeb
Ok, mein schlauer Kollege K.L. wies mich darauf hin, dass man in einer ObjectListe nicht mit Records, sondern besser auch mit TObject-Klassen arbeiten sollte. Hab ich gemacht und es funktioniert.
Dank an marabu und Hawkeye219, der ja schon auf dieses Problem hingewiesen hat. René |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:24 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 by Thomas Breitkreuz