Noch ein Fehler:
Wenn etwas GRÖSSER GLEICH und gleichzeitig KLEINER GLEICH etwas anderem ist, dann ist es GLEICH diesem anderen:
Delphi-Quelltext
1: 2:
| If (Button.Top <= Button1.Top + Button1.height) and (Button.Top >= Button1.Top + Button1.height) |
Hierbei wird also so gut wie nie die kollision ausgelößt(da die werte beinah nie genau gleich sein werden ...). Bei dir wird beim von-unten-kommen vermutlich die von-oben-kommen Kollision ausgelößt.
Richtig wäre:
Delphi-Quelltext
1: 2: 3:
| If (Button.Top <= Button1.Top + Button1.height) and ((Button.Left >= Button1.Left) and (Button.Left <= Button1.Left + Button1.Height)) then vw:=-vw; |
PS: Ob das stimmt kann ich nicht testen, könntest du gleich den rest von deinem Source anhängen, damit ich meinen Code einfügen und ausprobieren kann?

[>++[>++[>>++++<<-]<-]<-]>>>>>++++++++++++++++++.+++++++.>++.-.<<.>>--.<+++++..<+.