Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi TObjectList-Template wiedermal (https://www.delphipraxis.net/69930-tobjectlist-template-wiedermal.html)

webcss 22. Mai 2006 14:29


TObjectList-Template wiedermal
 
Hallo zusammen,

kann mir jemand hierzu mal ein Beispiel geben. Irgenwie blicke ich das auf Basis der Ausführungen in diesem Beitrag nicht... :gruebel: :wall:

Danke schon mal vorab.

jfheins 22. Mai 2006 16:45

Re: TObjectList-Template wiedermal
 
Das ist ein Template (siehe auch: Links in dem Thread) damit kannst du erreichen, dass du eine TObjectList hast, die genau für dein spezifisches Objekt passt. Also im Grunde keine TObjectList sondern eine TAnythingList ;)

Das wird realisiert, indem die ganze Implementation in einer seperaten Unit steht, und dort dann eine _TList oder so deklariert wird, die genau für den Typ _TItem zugeschnitten ist. Dann kanst du das einfach so machen:
Delphi-Quellcode:
_TItem = TDeineCooleKlasse;
{include template}
TDeineCooleListe = _TList
dann hast du also eine Liste die exakt auf deine Klasse passt und kannst dir die Typecasts sparen - verstanden ?


(alles schematisch vereinfacht :zwinker: )

alcaeus 22. Mai 2006 16:49

Re: TObjectList-Template wiedermal
 
Moin,

hier hab ich mal ein KISS-Beispiel gepostet, wie man damit umgeht ;)

Was genau verstehst du denn nicht? Wozu es gut ist? Wie man es verwendet? Was denn? :stupid:

Greetz
alcaeus

webcss 22. Mai 2006 17:42

Re: TObjectList-Template wiedermal
 
Zitat:

Zitat von alcaeus
Was genau verstehst du denn nicht? Wozu es gut ist? Wie man es verwendet? Was denn? :stupid:

Wozu es gut ist weis ich. Die Verwendung moacht mir Kopfschmerzen. :wall:
Ich fasse mal zusammen:
1. Ich definiere eine auf TObject basierende Klasse, eben das was ich in die Liste packen will.
2. referenziere ich mein Object so: _LIST_ITEM_ = TMyItemClass;
3. referenziere ich meine dazugehörige Liste von _LIST_;

Das ganze natürlich mit den Defines und Includes vorneweg.

So weit, so gut. Meine Fragen:

1. Wie siehts aus, wenn ich mehrere Listen mit ihrem jeweils anderen Object benötige?
2. Kann ich in meiner eigenen Liste neue Funktionalität ergänzen, ohne das Template zu ändern?
3. Kann ich eine auf dem Template basierende Klasse weiter beerben:
- Eigene Liste mit weiteren Methoden erstellen und dann
- diese beliebig instanziieren und jeweils unterschiedliche Objecte zuweisen?
- Instanziierte Objekte ablegen?

Das raff ich einfach nicht.
Kann mich darüber jemand aufklären? :warn:

jfheins 22. Mai 2006 17:54

Re: TObjectList-Template wiedermal
 
Ganz kurz, weil ich jetzt weg muss:

Zitat:

Zitat von webcss
1. Wie siehts aus, wenn ich mehrere Listen mit ihrem jeweils anderen Object benötige?

Jede Liste in eine seperate Unit packen.
Zitat:

2. Kann ich in meiner eigenen Liste neue Funktionalität ergänzen, ohne das Template zu ändern?
Ja, erst templaten, und dann statt TMyList = _List eine Klasse ableiten wie TMyList = class(_List) ... end;
Zitat:

3. Kann ich eine auf dem Template basierende Klasse weiter beerben:
- Eigene Liste mit weiteren Methoden erstellen und dann
- diese beliebig instanziieren und jeweils unterschiedliche Objecte zuweisen?
- Instanziierte Objekte ablegen?
Afaik: Ja.

webcss 23. Mai 2006 14:51

Re: TObjectList-Template wiedermal
 
So, soweit hab ich's jetzt gerafft :-D Manchmal sieht man eben den Wald vor lauter Bäumen nicht.

Jetzt hab ich allerdings noch eine Frage:

Ich habe auf Basis des Template eine Klasse abgeleitet, von der ich nun weitere Klassen ableiten will (Mit erweiterten Objekten).
Jetzt bekommen ich allerdings Probleme, wenn ich in der abgeleiteten Klasse den neuhinzugekommen Object-Feldern einen Wert zuweisen will: Undefinierter Bezeichner.
Delphi-Quellcode:
...
Items[Index].Name := Query.Fields.AsString[1];
...
Wie muß ich ableiten, damit ich auf die erweiterten Felder zugreifen kann? Oder sollte ich mir ein eigenes Template schreiben, von dem aus ich dann ableite?

Danke schon mal,
Gruß Clemens


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:21 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