Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi dynamische TStringList(en) (https://www.delphipraxis.net/53848-dynamische-tstringlist-en.html)

alcaeus 24. Sep 2005 09:30

Re: dynamische TStringList(en)
 
Zitat:

Zitat von bttb930
Was ist das denn für ein Gehacke???

Das "Gehacke" sind Templates, falls du damit noch nicht vertraut bist.

Zitat:

Zitat von bttb930
Und ist das hilfreich um einem Anfänger ein Problem zu erklären? Sicher nicht.

Das will ich nicht beurteilen, es ist jedenfalls einer der moeglichen Loesungswege. Der Vorteil ist, dass ich mir jede Menge Tipparbeit erspare, indem ich nicht TList nochmal ableiten und dort alle Typen anpassen muss (Das Beispiel von Grishnak enthaelt ja nur das notwaendigste).

Und ob man einem Anfaenger zumutet, TList neu zu schreiben und alle Typen auszutauschen, oder ob man ihn 5 Zeilen fuer die Templates schreiben laesst, macht wohl auch keinen Unterschied mehr :roll:

Greetz
alcaeus

Grishnak 24. Sep 2005 09:35

Re: dynamische TStringList(en)
 
Zitat:

Zitat von TheAn00bis
Zur TList-Variante: Das reicht doch, wenn ich die Liste ganz zum Schluß freigebe?

Natürlich kannst du die Destroy-Methode eines von TList abgeleiteten Objektes überschreiben, aber wenn du während der Laufzeit etwas aus der Liste entfernst (per 'Delete' oder 'Extract'), dann musst du ebenfalls dafür sorgen, dass das Objekt selbst auch gelöscht wird. D.h. du musst diese Methoden (wenn du sie benutzt) ebenfalls überschreiben.

Christian Seehase 24. Sep 2005 12:31

Re: dynamische TStringList(en)
 
Moin TheAn00bis,

Zitat:

Zitat von TheAn00bis
Zur TList-Variante: Das reicht doch, wenn ich die Liste ganz zum Schluß freigebe?

solange Du dabei nicht vergisst, auch die in der Liste enthaltenen Objekte wieder freizugeben.
Dass passiert nämlich nicht automatisch.

Muetze1 24. Sep 2005 20:05

Re: dynamische TStringList(en)
 
Zitat:

Zitat von Grishnak
Zitat:

Zitat von TheAn00bis
Zur TList-Variante: Das reicht doch, wenn ich die Liste ganz zum Schluß freigebe?

Natürlich kannst du die Destroy-Methode eines von TList abgeleiteten Objektes überschreiben, aber wenn du während der Laufzeit etwas aus der Liste entfernst (per 'Delete' oder 'Extract'), dann musst du ebenfalls dafür sorgen, dass das Objekt selbst auch gelöscht wird. D.h. du musst diese Methoden (wenn du sie benutzt) ebenfalls überschreiben.

Noch besser: er überschreibt die protected Methode Notify und macht auf der lnDeleted Action eine Freigabe des Objektes. Der Destructor macht nämlich ein Clear und somit kommen alle Objekte am Notify vorbei...

TheAn00bis 25. Sep 2005 15:29

Re: dynamische TStringList(en)
 
Zitat:

Zitat von Christian Seehase
Moin TheAn00bis,

Zitat:

Zitat von TheAn00bis
Zur TList-Variante: Das reicht doch, wenn ich die Liste ganz zum Schluß freigebe?

solange Du dabei nicht vergisst, auch die in der Liste enthaltenen Objekte wieder freizugeben.
Dass passiert nämlich nicht automatisch.

Die würden bis zum runterfahren drin bleiben? Ist ja verrückt...

Zitat:

Zitat von Muetze1
Noch besser: er überschreibt die protected Methode Notify und macht auf der lnDeleted Action eine Freigabe des Objektes. Der Destructor macht nämlich ein Clear und somit kommen alle Objekte am Notify vorbei...

?!

Hab jetzt die TList-Variante genommen und bin sehr zufrieden! :)

Christian Seehase 25. Sep 2005 16:02

Re: dynamische TStringList(en)
 
Moin TheAn00bis,

Zitat:

Zitat von TheAn00bis
Die würden bis zum runterfahren drin bleiben? Ist ja verrückt...

beim Beenden des Programmes würde der Speicher, i.d.R., auch aufgeräumt werden, aber es ist empfehlenswert die belegten Resourcen selber aufzuräumen, allein schon, damit man das nicht mal welche vergisst, die nicht durch das Programmende freigegeben werden.

TheAn00bis 27. Sep 2005 16:07

Re: dynamische TStringList(en)
 
Ein Problem hätte ich doch noch:

Ich hab jetzt eine KartenListeListe, die viele KartenListen enthällt. Alles Typ TList.

Die KartenListen enthalten Pointer auf viele TKarten. Eine Funktion von TKarte ist beispielsweise
"test". Ihr Ergebnis ist vom Typ String.

Wie weise ich jetzt einer Variable den Wert dieser Funktion zu?

Beispielsweise nehme ich aus KartenListeListe die erste KartenListe und daraus die zweite Karte (und davon eben die Funktion "Test").


Ich habe nur einige Ideen und die scheinen alle absolut nicht zu funktionieren.

malo 27. Sep 2005 16:13

Re: dynamische TStringList(en)
 
Delphi-Quellcode:
procedure a;
var s: string;
begin
  s := KartenListeListe1.KartenListe1.Karte2.Test;
end;
Wenn du mehrere Funktionen der entsprechenden Klasse benutzen willst, kannst du es auch so machen:

Delphi-Quellcode:
procedure a;
var s: string;
begin
  with KartenListeListe1.KartenListe1.Karte2 do
  begin
    s := Test;
  end;
end;

TheAn00bis 27. Sep 2005 17:23

Re: dynamische TStringList(en)
 
Danke, aber die Listen in KartenListeListe werden dynamisch erstellt und haben alle den selben Namen. (oder!?) Jedenfalls erstelle ich die so:

Delphi-Quellcode:

KartenListeListe:=TList.Create;

for i:=1 to 5 do
   begin
      KartenListe:=TList.Create;
      KartenListeListe.Add(KartenListe);
   end;

for i:=1 to 5 do
   begin
      Karten:=TKArte.Create;
      TList(KartenListeListe[i]).add(Karte);
   end;
Jetzt will ich aus jeder Karte davon den string auslesen können. Wie komme ich jetzt an den string einer beliebigen Karte? (wäre schön mit Variable für die Nummer der KartenListe und der Karte)

Khabarakh 27. Sep 2005 17:42

Re: dynamische TStringList(en)
 
Zitat:

Danke, aber die Listen in KartenListeListe werden dynamisch erstellt und haben alle den selben Namen. (oder!?)
Name? Instanzen habe keinen Namen, nur eine eindeutige Speicheradresse. Die Name-Property der VCL-Controls wird von Delphi lediglich zum Benennen des Feldes benutzt (und manchmal zur Identifizieren der Instanzen - dafür sind aber eigentlich Arrays und Listen da).
Delphi-Quellcode:
TKarte(TList(KartenListeListe[i]).Items[ii]).Test
Aber lass mich raten: die zwei Listen stellen ein zweidimensionales Array von Kartenteilen dar? Dann würde ich alcaeus' ObjetList-Template auf zwei Indizes umschreiben, das wird dir die Arbeit erheblich erleichtern.


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:02 Uhr.
Seite 2 von 3     12 3      

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