Fehler selbst gefunden.
Es lag an der bmp.TransparentColor. Da ich im Bmp auch den Pixel(0,0) mit der Farbe fülle,
nimmt der SpeedButten die Farbe des Pixel(0,0) als TransparentColor und zeichnet eben alles andere in dieser Farbe nicht mit. Und der der Rest die gleiche Farbe hat....
Als Lösung habe ich halt folgendes gemacht:
if color<>clFuchsia then bmp.TransparentColor:=clFuchsia else bmp.TransparentColor:=clMaroon;
Somit unterscheidet sich die TransparentColor auf jeden Fall von meiner Color auf Pixel(0,0) und das Rechteck wird auch gezeichnet.
Man hatte auch einfach einen andersfarbigen Rahmen Drumherum setzen können.
Danke dir aber für deine Zeit. Hattest also doch irgendwie recht, am ende lag es an der Bitmap