Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi referenz auf ein object abspeichern? (https://www.delphipraxis.net/55610-referenz-auf-ein-object-abspeichern.html)

richard_boderich 24. Okt 2005 10:38


referenz auf ein object abspeichern?
 
hallo leute,

ich moechte die referenz auf ein object abspeichern, in einem array, oder in einer stringlist. ist so etwas moeglich? und wie kann ich das bewerkstelligen? theoretisch muesste es doch reichen, einen pointer auf das object abzuspeichern oder?

Gruß Richard

Aenogym 24. Okt 2005 10:45

Re: referenz auf ein object abspeichern?
 
Zitat:

Zitat von richard_boderich
theoretisch muesste es doch reichen, einen pointer auf das object abzuspeichern oder?

genau ;)

ich organisiere mir meine objekte für solche fälle schlicht und einfach in einer TObjectList.
ich erstelle das objekt und gebe es einfach der funktion TObjectList.Add(),
das tolle an der objectList ist, dass sie die enthaltenen objekte automatisch freigibt, wenn diese gelöscht oder die liste selbst freigegeben werden.

Delphi-Quellcode:
var tempObject: TObject;
begin
  tempObject := TObject.Create();
  //...tempobject wie gewünscht initialisieren
  myObjectList.Add(tempObject);

  //wenn ich's nciht mehr brauche, lösche ich das objekt mit dem definierten index
  myObjectList.delete(0);
end;
aenogym

edit: in einer stringList kannst du weiterhin auch noch die funktion AddObject() aufrufen ;)

Jens Schumann 24. Okt 2005 10:50

Re: referenz auf ein object abspeichern?
 
Delphi-Quellcode:
var tempObject: TObject;
begin
  tempObject := TObject.Create();
  //...tempobject wie gewünscht initialisieren
  myObjectList.Add(tempObject);

  //wenn ich's nciht mehr brauche, lösche ich das objekt mit dem definierten index
  myObjectList.delete(0);
end;
Achtung Achtung das reicht nicht aus.
hier wird nur die Referenz gelöscht. Der Speicher aber bleibt belegt!!!
Delphi-Quellcode:
myObjectList.delete(0);
Vorher unbedingt Speicher freigeben
Delphi-Quellcode:
TObject(myObjectList[0]).Free;
myObjectList.delete(0);

Sanchez 24. Okt 2005 10:57

Re: referenz auf ein object abspeichern?
 
@Jens: :tongue: stimmt nur bedingt. :mrgreen:
Die OH sagt dazu.
Zitat:

TObjectList verwaltet eine Liste der (eigenen) Objekte.

Unit

Contnrs

Beschreibung

Mit TObjectList können Sie eine Liste von Objekten speichern und verwalten. Die Komponente stellt Eigenschaften und Methoden für das Hinzufügen, Löschen, Umsortieren, Suchen, Zugreifen und Sortieren von Objekten zur Verfügung. Ist die Eigenschaft OwnsObjects auf True gesetzt (Voreinstellung), verwaltet TObjectList den Speicher seiner Objekte, das heißt, ein Objekt wird freigegeben, wenn sein Index neu zugewiesen wird, wenn es mit der Methode Delete, Remove oder Clear aus der Liste entfernt wird oder wenn die Instanz TObjectList selbst aufgelöst wird.
..daher ist das nicht nötig, solange OwnsObjects nicht mit false initialisiert wird.

grüße, daniel

Aenogym 24. Okt 2005 10:58

Re: referenz auf ein object abspeichern?
 
Zitat:

Zitat von Jens Schumann
hier wird nur die Referenz gelöscht. Der Speicher aber bleibt belegt!!!

nein:

Zitat:

Zitat von Aenogym
das tolle an der objectList ist, dass sie die enthaltenen objekte automatisch freigibt, wenn diese gelöscht oder die liste selbst freigegeben werden.

;)

richard_boderich 24. Okt 2005 11:11

Re: referenz auf ein object abspeichern?
 
ok jungen, erstmal danke fuer eure antworten, aber das meint ich gar nicht.

ich habe im stringgrid bestimmte ausgaben, die werte des objects darstellen. jetzt will ich aber eine funktion implementieren,
das wenn ich auf die ensprechende zeile mit der rechten maustaste klicke, nicht nur die zeile mit den werten geloescht wird,
sondern auch das object selber. und dazu brauch ich doch die objectreferenz.

richard

Aenogym 24. Okt 2005 11:15

Re: referenz auf ein object abspeichern?
 
Zitat:

Zitat von richard_boderich
ok jungen, erstmal danke fuer eure antworten, aber das meint ich gar nicht.

ich habe im stringgrid bestimmte ausgaben, die werte des objects darstellen. jetzt will ich aber eine funktion implementieren,
das wenn ich auf die ensprechende zeile mit der rechten maustaste klicke, nicht nur die zeile mit den werten geloescht wird,
sondern auch das object selber. und dazu brauch ich doch die objectreferenz.

richard

im stringGrid werden die zeilen doch als StringList gespeichert, oder?
da könntest du doch TStringList.AddObject() verwenden, um deine objekte mit den strings zu verknüpfen.

Treffnix 24. Okt 2005 11:32

Re: referenz auf ein object abspeichern?
 
TStringGrid hat sogar ein eigenes Property Objects. Da kannst du für jedes Feld einzeln ein Objekt reinhauen. Oder du nimmst z.B. immer das erste Feld, wenn du nur eins pro Zeile brauchst...

richard_boderich 24. Okt 2005 11:44

Re: referenz auf ein object abspeichern?
 
ja aber mein object is doch visuell, und ich will es aber nicht im stringgrid dargestellt haben? oder mach ich da einen denkfehler?

richard

Treffnix 24. Okt 2005 12:01

Re: referenz auf ein object abspeichern?
 
Zitat:

Zitat von richard_boderich
ja aber mein object is doch visuell, und ich will es aber nicht im stringgrid dargestellt haben? oder mach ich da einen denkfehler?

richard

Jap, machst du. ;)

Das Objekt wird nicht im Grid dargestellt ( ausser, du willst es so ). Du speicherst nur die Referenz auf das Objekt. Parent, Owner etc. bleiben die alten.


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:56 Uhr.
Seite 1 von 2  1 2      

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-2025 by Thomas Breitkreuz