Home » Tutorials » VCL » TList

TList

Schritt 4

Um das angewählte Objekt zu wechseln, fügen wir im OnMouseDown-Ereignis der Zeichenfläche folgenden Code ein:

var loop:Integer;
    Basis:^BasisTyp;
begin

   for loop:= Objekte.Count-1 downto 0 do // das vorderste zuerst prüfen
    begin
     Basis:=Objekte[loop];
     if X>Basis^.X then if X<Basis^.X+Basis^.Width then
      if Y>Basis^.Y then if Y<Basis^.Y+Basis^.Height then
       begin
        AnGewaehlt:=loop;
        PaintIt;
        exit; // raus; nicht schön, aber es funktioniert ;-)
       end; // gefunden
    end;
end;

Aufgrund des allgemein gehaltenen Basistypen brauchen wir hier also gar nicht zu wissen, um was für ein Objekt es sich handelt. Das ist uns völlig egal!
Genauso werden wir die Objekte auch bewegen. Hierzu fügen wir im OnKeyDown-Ereignis des Formulars (vorher Keypreview=true im Objektinspektor einstellen) ein:

var Basis:^BasisTyp;
begin
 if AnGewaehlt=-1 then Exit; // noch kein Objekt erstellt, also raus

 Basis:=Objekte[AnGewaehlt];
 if not (ssShift in Shift) then // die Cursor-Tasten bewegen das gerade
                                //  angewählte Objekt
  begin
   if key=vk_Left then Dec(Basis^.X,5);
   if key=vk_Right then Inc(Basis^.X,5);
   if key=vk_Up then Dec(Basis^.Y,5);
   if key=vk_Down then Inc(Basis^.Y,5);
  end else begin // Shift und Cursor verändert die Größe des akt. Objektes
   if key=vk_Left then Dec(Basis^.Width,5);
   if key=vk_Right then Inc(Basis^.Width,5);
   if key=vk_Up then Dec(Basis^.Height,5);
   if key=vk_Down then Inc(Basis^.Height,5);
  end;

 PaintIt;
end;

Um außerdem noch Objekte nach vorne und hinten stellen zu können, geben wir noch Folgendes ein:

...
 if key=vk_F1 then // nach hinten
  begin
   Objekte.Move(AnGewaehlt,0);
   AnGewaehlt:=0;
  end;
  if key=vk_F2 then // nach vorne
   begin
    Objekte.Move(AnGewaehlt,Objekte.Count-1);
    Angewaehlt:=Objekte.Count-1;
   end;
 PaintIt;
end;