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;