Prueba a cambiar la implementación de la función así: void __fastcall TSwingBtn::SetSilueta(TSiluete* valor)
{
_propsilueta->Assign( valor );
SetRgn();
}
recuerda cambiar la declaración de la propiedad en el componente ya que sin esto SetSilueta nunca será llamada:
...
__property TSiluete* Silueta ={read=_propsilueta, write=SetSilueta};
...
para leer la propiedad en runtime como Silueta es publica solo tendrías que usar sus propiedades directamente, o sea
...nombreDelComponente->Silueta.BMP;
Si esto te da problemas no tengo inconveniente si me mandas el código de tu componente revisarlo e intentar ayudarte en lo que pueda. Ya que probando código parcialmente es difícil ayudar.
Libros no te puedo recomendar porque no conozco ninguno para C++Builder que este dedicado a la creación de componentes exclusivamente. Todos llevan una pequeña parte dedicada a eso. Pero yo creo que no hay gran problema en usar la mayor información que hay sobre el tema para Delphi, ya que la que la equivalencia en C++Builder normalmente no difiere mucho en la mayoría de casos.