Home » Tutorials » VCL » TList

TList

Schritt 2

Jetzt fügen wir folgenden Code in unser OnCreate-Ereignis ein:

Randomize;
Objekte:=TList.Create;
ZeichenFlaeche.Align:=alClient;

Im OnClose-Ereignis fügen wir Folgendes ein:

while Objekte.Count>0 do
begin
  LoescheObjekt(Objekte[0]);
  Objekte.Delete(0);
end;
Objekte.Free;

Die LoescheObjekt-Prozedur werden wir später definieren.
Zuerst werden wir aber die verschiedenen Objekte erstellen. Jedesmal, wenn der Benutzer auf einen der Buttons klickt, soll ein Rechteck etc. erstellt werden.
Hierzu definieren wir zwei Prozeduren, eine für Bilder, eine für Formen:

public
    { Public-Deklarationen }
    Objekte:TList;
    AnGewaehlt:Integer; // welches Objekt ist gerade angewählt
    procedure NeuesBild(FileName:String);
    procedure NeueForm(WelcheForm:Integer);
  end;

procedure THauptform.NeuesBild(FileName:String);
var Bild:^BildTyp;
begin
 New(Bild);
 with Bild^ do
  begin
   Typ:=1;
   X:=0;
   y:=0;
   Image:=TBitmap.Create; // Speicher zuweisen
   Image.LoadFromFile(FileName); // Laden
   Width:=Image.Width;
   Height:=Image.Height;
  end;
 Objekte.Add(Bild); // zu unseren Objekten hinzufügen
 AnGewaehlt:=Objekte.Count-1; // das neueste wird angewählt
end;

procedure THauptform.NeueForm(WelcheForm:Integer);
var Form:^FormTyp;
begin
 New(Form);
 with Form^ do
  begin
   Typ:=2;
   X:=Random(ZeichenFlaeche.ClientWidth div 2); { wir
   positionieren es einfach zufällig}
   y:=Random(ZeichenFlaeche.ClientHeight div 2);
   Width:=Random(ZeichenFlaeche.ClientWidth div 4)+10;
   Height:=Random(ZeichenFlaeche.ClientHeight div 4)+10;
   FormTyp:=WelcheForm;
   LinienFarbe:=clBlack;
   FuellFarbe:=clBlue;
  end;
 Objekte.Add(Form);
 AnGewaehlt:=Objekte.Count-1; // das neueste wird angewählt
end;

Im nächsten Schritt werden wir die Prozedur schreiben, die unsere Objekte anzeigt (PaintIt), vorerst weisen wir den Buttons jeweils folgenden OnClick-Code zu:

Ein Rechteck:
<delphi NeueForm(1);
PaintIt;

Ein Kreis:

 NeueForm(2);
 PaintIt;

Ein Bild:

 if PictureDialog.Execute then NeuesBild(PictureDialog.FileName);
 PaintIt;