Mal dir das doch einfach mal auf, dann sieht man das auch besser.
Hier mal ein paar Hinweise:
Mit Top und Left ist die linke, obere Ecke beschrieben. Über die Informationen Width und Height ist es möglich auch die untere und rechte Kante zu bestimmen.
Rechte Kante = Left + Width
Untere Kante = Top + Height
Man kann sich das aber auch anders vorstellen:
Der Bereich, indem sich die linke obere Ecke sich befinden darf ist:
Code:
0 <= Kreis.Top < Form.ClientWidth - Kreis.Width
0 <= Kreis.Left < Form.ClientHeight - Kreis.Height
also
Delphi-Quellcode:
if ntop >= Self.ClientHeight - k.Height then
...
if ntop < 0 then
...
if nleft >= Self.ClientWidth - k.Width then
...
if nleft < 0 then
...
Und so?
Delphi-Quellcode:
if (ntop < 0) or (ntop + k.Height > ClientHeight) then
k.speedy := - k.speedy;
if (nleft < 0) or (nleft + kWidth > ClientWidth) then
k.speedx := -k.speedx;
Nicht ganz, denn jetzt passt nur die Anpassung der Richtungen, aber die neue Position muss ja auch noch errechnet werden