Home » Tutorials » VCL » TList

TList

Schritt 1

Jetzt gehts los:
Wir erstellen ein Formular (Name: HauptForm). Am oberen Rand platzieren wir ein Panel, dessen Align-Eigenschaft wir auf alTop setzen. Auf dieses Panel ziehen wir drei Buttons, die wir mit „Rechteck“, „Kreis“ und „Bild“ beschriften.
In die Mitte des Formulars setzen wir jetzt noch eine TImage-Komponente (Name: Zeichenflaeche) und einen OpenPicture-Dialog (in Delphi 5, ansonsten einfach einen OpenDialog) (Name:PictureDialog).
Um die von uns später eingefügten Zeichenelemente zu speichern, tragen wir in der public-Sektion unseres Formulars ein TList-Objekt namens „Objekte“ und eine Variable „Angewaehlt“ ein:

public
 { Public-Deklarationen }
 Objekte:TList;
 AnGewaehlt:Integer; // welches Objekt ist gerade angewählt

Wir müssen uns jetzt überlegen, wie wir unsere Objekte, also die Ellipsen, Rechtecke und Bilder, die wir zeichnen wollen, im Speicher ablegen.
Denkbar wäre z.B. einen Typ wie folgt zu definieren:

type
  ObjektTyp = record
   Typ: Integer; // 1 =Bild 2 = Recheck 3 = Ellipse
   X, Y, Height, Width: Integer; // Position und Ausmaße
   Image: TBitmap; // für den Fall, dass es ein Bild ist
   LinienFarbe, FuellFarbe: TColor; // für den Fall, dass es eine Form ist
  end;

Auch wenn es bei unserem Projekt nicht allzu tragisch wäre, fällt doch auf, dass wir einige Dinge speichern, die wir eigentlich nicht bräuchten. Handelt es sich um ein Bild, dann brauchen wir die Daten über die Linien- und Füllfarbe nicht, bei einer Form brauchen wir Image nicht.
Es bietet sich also an, für Bilder und Formen zwei separate Typen zu definieren (natürlich könnte man auch drei Typen – Bild, Rechteck, Ellipse – definieren, das wollen wir hier aber nicht tun):

type
  BildTyp = record
   Typ: Integer;
   X, Y, Height, Width: Integer;
   Image: TBitmap;
  end;
  FormTyp = record
   Typ: Integer;
   X, Y, Height, Width: Integer;
   FormTyp: Integer; // 1 = RechtEck 2 = Ellipse
   LinienFarbe, FuellFarbe: TColor;
  end;

Außerdem definieren wir noch einen Basistyp, der z.T. genau die gleiche Datenstruktur aufweist wie unsere anderen Typen:

BasisTyp = record
   Typ: Integer; // 1=Bild 2= Form
   X, Y, Height, Width: Integer;
  end;

Wofür wir den brauchen, werden wir bald merken.