Naprawdę nie jestem tego pewien ale jeśli to nie zadziała usunę odpowiedź
Mianowicie
else if(b1->Left < p1->Left+p1->Width && b1->Top > p1->Top - b1->Height/2
&& b1->Top+b1->Height < p1->Top+p1->Height+b1->Height/2)
Zastąp
else if((b1->Left < p1->Left+p1->Width)&& (b1->Top > p1->Top - b1->Height/2)&&( b1->Top+b1->Height < p1->Top+p1->Height+b1->Height/2))