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.