Erstmal die Reihenfolge ändern
und die Grenzen richtig setzen.
Delphi-Quellcode:
procedure TForm1.Timer1Timer(Sender: TObject);
var x,y:integer;
begin
x := 5;
y := 5;
if (Shape1.Top <= 100) or (Shape1.Top >= image1.ClientHeight - Shape1.Height) then
begin
y := -y;
end;
if (Shape1.Left <= 0) or (Shape1.Left >= image1.ClientWidth - Shape1.Width) then
begin
x := -x;
end;
Shape1.Left := Shape1.Left + x;
Shape1.Top := Shape1.Top + y;
end;
So, jetzt würden zumindestens die Shapes erstmal am Rand hängenbleiben, da rechtzeitig ausgewertet wird.
- Variable setzen
- diese Variable verrechnen
- jetzt erst die Begrenzung beachten und Wert änder bringt nichts mehr, da es schon verrechnet wurde
Ja und nun noch der nächste Schritt:
die variablem in den Private-Abschnitt der Form verschieben
var x,y:integer;
und die Starteinstellung z.B. ins OnCreate (nur einmal bei, bzw. vor dem Start setzen)