@Jens01: Das hab ich auch schon festgestellt.
@alle: Diese Art des Templates ist leider nicht auf meinem Mist gewachsen. Ich hab das Ganze nur leicht abgewandelt.
@gangs-taas:
Zitat:
Da wird nur Bezug auf das obrige Beispiel genommen. Hier ein Link zum allgemeinen Thema Template
http://de.wikipedia.org/wiki/Template_(Programmierung)
Mehr Hilfe als in Posting 13 kann ich kaum geben, aber ich versuchs mal:
Hier der ENTSCHEIDENDE Teil:
Delphi-Quellcode:
unit u_FilterItemList;
/// /// 1. Anpassung ////// HIER ein sinnvoller Name für die Unit
interface
uses
Classes,
// Unit mit Klasse für _ITEM_TYPE_ (eine ganz normale Klasse)
u_FilterItem;
/// /// 2. Anpassung ////// HIER die Unit in dem das Objekt steht das die Liste soll
// Kompilerdirektive für das Template
{$DEFINE LIST_TEMPLATE_}
type
// Vorfahr der "Listklasse"
_LIST_ANCESTOR_ = TObject;
// Vorfahr der "Kontainerklasse", sollte ein Nachfahr von TList sein
_LIST_CONTAINER_ = TList;
// Typ des Items in der "Kontainerklasse" (z.B.: Pointer für TList, IInterface für TInterfaceList}
_LIST_CONTAINER_ITEM_TYPE_ = pointer;
// Item der typisierten Klasse, dieser Typ wird von der Klasse ausgegeben
_ITEM_TYPE_ = TFilterItem;
/// /// 3. Anpassung ////// HIER das Objekt das aus der Unit (siehe 2. Anpassung) in die Liste soll
// Verzeichnis: \Delphi\Komponenten\Templates nicht in Umgebungsvariablen vorhanden daher so:
// 1. Template-aufruf: erstellt den Kopf der _LIST_TEMPLATE_ Klasse anhand der oben gemachten Angaben
{$INCLUDE '..\Templates\t_TypedObjectList.pas'} /// /// 4. Anpassung ////// HIER den Pfad anpassen wenn das Template wo anders ist
type
// "Umbenennung" von _LIST_TEMPLATE_ und weitere spezielle Eigenschaften für die Klasse
TFilterItemList =
class(_LIST_TEMPLATE_)
/// /// 5. Anpassung ////// HIER der ListenKlasse deinen Namen geben
protected
// muss implementiert werden, falls die Items freigegeben werden müssen (destructor Aufruf)
procedure FreeItem(_Item: _ITEM_TYPE_);
override;
end;
implementation
// 2. Template-aufruf: implementiert die _LIST_TEMPLATE_ Klasse anhand der oben gemachten Angaben
{$INCLUDE '..\Templates\t_TypedObjectList.pas'} /// /// siehe 4. Anpassung
// Implementierung der speziellen Eigenschaften der Klasse
{ TFilterItemList } /// /// siehe 5. Anpassung
procedure TFilterItemList.FreeItem(_Item: _ITEM_TYPE_);
/// /// siehe 5. Anpassung
begin
_Item.Free;
inherited;
end;
end.
Alle entscheidenden Teile hab ich mit /// /// X. Anpassung bzw. /// /// siehe X. Anpassung markiert / zusätzlich kommentiert.