Difference between revisions of "TCollection/de"

From Free Pascal wiki
Jump to navigationJump to search
m
m
Line 89: Line 89:
 
</syntaxhighlight>
 
</syntaxhighlight>
 
<br>
 
<br>
Verwendung der Klassen:
+
Das Objekt erstellen, füllen und auslesen:
 
<syntaxhighlight>
 
<syntaxhighlight>
 
procedure subVerarbeitung;
 
procedure subVerarbeitung;
 
var
 
var
 
   Liste: TListe;
 
   Liste: TListe;
 +
  strVorname: string;
 +
 
begin
 
begin
 
    
 
    
 
   ....
 
   ....
 
    
 
    
 +
  // erstellt die Collection
 
   Liste := TListe.Create;
 
   Liste := TListe.Create;
 
    
 
    
 
   ...
 
   ...
 
    
 
    
 +
  // füllt die die Collection mit Daten
 
   Liste.Add;
 
   Liste.Add;
 
   Liste.Items[Liste.Count-1].Vorname := 'Frida';    // ein String
 
   Liste.Items[Liste.Count-1].Vorname := 'Frida';    // ein String
Line 114: Line 118:
 
   ...
 
   ...
 
    
 
    
 +
  // liest ein Element der Collection aus
 +
  strVorname:= Liste.Items[0].Vorname;
 +
 
 +
  ...
 +
 
 +
  // gibt den von der Collection belegten Speicher wieder frei
 
   Liste.Free;
 
   Liste.Free;
 
    
 
    

Revision as of 18:52, 3 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
    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;
    function Add: TCollectionItem;
    property Items[index: integer]: TListItem read GetItems write SetItems;
  end;


implementation



// TListe

function TListe.Add: TCollectionItem;
begin
  // Es können belibig viele unterschiedliche Unterelemente,
  // die als TCollectionItem deklariert wurden 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)