Difference between revisions of "TCollection/de"

From Lazarus wiki
Jump to navigationJump to search
m
m
Line 26: Line 26:
 
     bytAlter: byte;
 
     bytAlter: byte;
 
   public
 
   public
 +
    // überschreibt den von TCollection geerbten Construktor
 
     constructor Create(colCollection: TCollection); override;
 
     constructor Create(colCollection: TCollection); override;
 
     property Vorname: string read strVorname write strVorname;
 
     property Vorname: string read strVorname write strVorname;
Line 42: Line 43:
 
   public
 
   public
 
     constructor Create;
 
     constructor Create;
 +
    // Die Funktion hängt an das Objekt vom Typ TListe
 +
    // ein Objekt vom Typ TCollectionItem hinzu.
 
     function Add: TCollectionItem;
 
     function Add: TCollectionItem;
 
     property Items[index: integer]: TListItem read GetItems write SetItems;
 
     property Items[index: integer]: TListItem read GetItems write SetItems;
Line 55: Line 58:
 
function TListe.Add: TCollectionItem;
 
function TListe.Add: TCollectionItem;
 
begin
 
begin
   // Es können belibig viele unterschiedliche Unterelemente,
+
   // Es können beliebig viele Objekte vom Typ TCollectionItem,
   // die als TCollectionItem deklariert wurden angefügt werden
+
   // als Elemente angefügt werden.
 
   Result := TCollectionItem(inherited Add);
 
   Result := TCollectionItem(inherited Add);
 
end;
 
end;

Revision as of 18:23, 4 February 2014

Deutsch (de) English (en) français (fr) polski (pl)


Collections gehören zur objektorientierten Programmierung.
Collections sind Klassen und den Arrays ähnlich.

Erstellen der benötigten Klassen:

unit uCollections;

{$mode objfpc}{$H+}

interface

uses
  Classes;

type

  // TListItem
  // TListitem ist eine Unterelement von TListe
  TListItem = class(TCollectionItem)
  private
    strVorname: string;
    strNachname: string;
    bytAlter: byte;
  public
    // überschreibt den von TCollection geerbten Construktor
    constructor Create(colCollection: TCollection); override;
    property Vorname: string read strVorname write strVorname;
    property Nachname: string read strNachname write strNachname;
    property Alter: byte read bytAlter write bytAlter;
    //.. beliebige viele Properties können folgen
  end;


  // TListe
  // An TListe werden die Elemente von TListItem angehängt
  TListe = class(TCollection)
  private
    function GetItems(index: integer): TListItem;
    procedure SetItems(index: integer; Value: TListItem);
  public
    constructor Create;
    // Die Funktion hängt an das Objekt vom Typ TListe 
    // ein Objekt vom Typ TCollectionItem hinzu.
    function Add: TCollectionItem;
    property Items[index: integer]: TListItem read GetItems write SetItems;
  end;


implementation



// TListe

function TListe.Add: TCollectionItem;
begin
  // Es können beliebig viele Objekte vom Typ TCollectionItem,
  // als Elemente angefügt werden.
  Result := TCollectionItem(inherited Add);
end;

constructor TListe.Create;
begin
  inherited Create(TListItem);
end;

function TListe.GetItems(index: integer): TListItem;
begin
  Result := TListItem(inherited Items[Index]);
end;

procedure TListe.SetItems(index: integer; Value: TListItem);
begin
  Items[Index].Assign(Value);
end;



// TListItem

constructor TListItem.Create(colCollection: TCollection);
begin
  if assigned(colCollection) and (colCollection is TListe) then
    inherited Create(colCollection);
end;

end.


Das Objekt erstellen, füllen und auslesen:

procedure subVerarbeitung;
var
  Liste: TListe;
  strVorname: string;

begin
  
  ....
  
  // erstellt die Collection
  Liste := TListe.Create;
  
  ...
  
  // füllt die die Collection mit Daten
  Liste.Add;
  Liste.Items[Liste.Count-1].Vorname := 'Frida';     // ein String
  Liste.Items[Liste.Count-1].Nachname := 'Fritz';    // ein String
  Liste.Items[Liste.Count-1].Alter := 22;            // ein Byte

  Liste.Add;
  Liste.Items[Liste.Count-1].Vorname := 'Karl';     // ein String
  Liste.Items[Liste.Count-1].Nachname := 'Hamster'; // ein String
  Liste.Items[Liste.Count-1].Alter := 43;           // ein Byte
  
  ...
  
  // liest ein Element der Collection aus
  strVorname:= Liste.Items[0].Vorname;
  
  ...
  
  // gibt den von der Collection belegten Speicher wieder frei
  Liste.Free;
  
end;



--Olaf 16:21, 1 February 2014 (CET)