The way I've implemented some transparent controls in the past is to instruct the parent control to invalidate the area the component covers:
r := Rect(left, top, left+width, top+height);
InvalidateRect(Parent.Handle, @r, true);
One issue is that this starts a never-ending chain of redrawing, so you have to make sure it only happens once when the component is moved or changes its appearance... hmm guess it's not ideal...