AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Einzelne Objekte einer TObjectlist überschreiben/freigeben
Thema durchsuchen
Ansicht
Themen-Optionen

Einzelne Objekte einer TObjectlist überschreiben/freigeben

Ein Thema von smudo · begonnen am 31. Mai 2006 · letzter Beitrag vom 31. Mai 2006
Antwort Antwort
smudo

Registriert seit: 6. Sep 2005
Ort: Cottbus
362 Beiträge
 
Delphi XE2 Professional
 
#1

Einzelne Objekte einer TObjectlist überschreiben/freigeben

  Alt 31. Mai 2006, 10:00
Hallo,

Ich nutze eine Objectliste zum abspeichern von Records:
Delphi-Quellcode:
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);
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.
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
Speicherverwaltung Objectlisten
versucht, das Problem zu klären, bin aber nicht weitergekommen.

Schon mal Danke im Voraus für eure Anregungen

René
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#2

Re: Einzelne Objekte einer TObjectlist überschreiben/freigeb

  Alt 31. Mai 2006, 10:10
Hallo René,

interessanter scheint mir die Prozedur SetActiveObject() zu sein. Ist die ObjectList Owner der gespeicherten Objekte?

Grüße vom marabu
  Mit Zitat antworten Zitat
Hawkeye219

Registriert seit: 18. Feb 2006
Ort: Stolberg
2.227 Beiträge
 
Delphi 2010 Professional
 
#3

Re: Einzelne Objekte einer TObjectlist überschreiben/freigeb

  Alt 31. Mai 2006, 10:23
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
  Mit Zitat antworten Zitat
smudo

Registriert seit: 6. Sep 2005
Ort: Cottbus
362 Beiträge
 
Delphi XE2 Professional
 
#4

Re: Einzelne Objekte einer TObjectlist überschreiben/freigeb

  Alt 31. Mai 2006, 10:31
Delphi-Quellcode:
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;
Ganz am Anfang weise ich der Liste Nil zu
FObjectList.Add(Nil); und das lässt sich auch noch getrost überschreiben.
  Mit Zitat antworten Zitat
smudo

Registriert seit: 6. Sep 2005
Ort: Cottbus
362 Beiträge
 
Delphi XE2 Professional
 
#5

Re: Einzelne Objekte einer TObjectlist überschreiben/freigeb

  Alt 31. Mai 2006, 10:46
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é
  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 22:22 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