Einzelnen Beitrag anzeigen

David Martens

Registriert seit: 29. Sep 2003
205 Beiträge
 
Delphi XE Enterprise
 
#21

AW: Object dynamisch in einem Array erzeufen

  Alt 13. Okt 2010, 23:17
@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:
http://www.dummzeuch.de/delphi/objec...tsch.html] Dies ist eine Klasse mit einem Array, die beim Zugriff ueberprueft, ob der Index innerhalb der Arraygrenzen liegt.
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.

Geändert von David Martens (13. Okt 2010 um 23:20 Uhr)
  Mit Zitat antworten Zitat