Pues que bien que te interese, ahí tienes la solución.
Esto es lo que debes poner al inicio del .cpp
//---------------------------------------------------------------------------
#include <vcl.h>
#include <Clipbrd.hpp>
#pragma hdrstop
#include<ComObj.hpp>
#include<ole2.h>
#include<richole.h>
#include <memory> //Debes incluir esta cabecera.
#include "Project.h"
#include "aboutus.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma link "Word_2K_SRVR"
#pragma resource "*.dfm"
Tmain *main;
//Aquí inicia.
void BitmapToRgn(TForm *form, TImage *img)
{
form->BorderStyle = bsNone;
Graphics::TBitmap *bmp =
dynamic_cast< Graphics::TBitmap* >( img->Picture->Bitmap );
form->SetBounds( form->Left, form->Top, bmp->Width, bmp->Height );
img->SetBounds( 0, 0, bmp->Width, bmp->Height );
form->Brush->Bitmap = bmp;
int tamanyoImagen = bmp->Width * bmp->Height * 4;
std::auto_ptr< BITMAPINFO > lpbmi( new BITMAPINFO );
std::auto_ptr< BYTE > bits( new BYTE[tamanyoImagen] );
ZeroMemory( lpbmi.get(), sizeof(BITMAPINFO) );
lpbmi->bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
lpbmi->bmiHeader.biWidth = bmp->Width;
lpbmi->bmiHeader.biHeight = bmp->Height;
lpbmi->bmiHeader.biPlanes = 1;
lpbmi->bmiHeader.biBitCount = 32;
lpbmi->bmiHeader.biCompression = BI_RGB;
lpbmi->bmiHeader.biSizeImage = tamanyoImagen;
GetDIBits( bmp->Canvas->Handle, bmp->Handle, 0, bmp->Height,
bits.get(), lpbmi.get(), DIB_RGB_COLORS );
DWORD colorTransparente = reinterpret_cast<DWORD*>
( bits.get() )[ bmp->Width * (bmp->Height-1) ];
HRGN rgn = CreateRectRgn( 0, 0, form->Width, form->Height );
HRGN rgnTemp = CreateRectRgn( 0, 0, form->Width, form->Height );
CombineRgn( rgn, rgn, rgnTemp, RGN_DIFF );
DeleteObject( rgnTemp );
for (int y=0; y < bmp->Height; ++y)
{
DWORD *pixel = &reinterpret_cast<DWORD*>
( bits.get() )[ bmp->Width * (bmp->Height - 1 - y) ];
int ancho = 0;
for (int x=0; x <= bmp->Width; ++x)
{
if ( x != bmp->Width && pixel
ancho++;
else
if ( ancho > 0 )
{
rgnTemp = CreateRectRgn( x - ancho, y, x, y + 1 );
CombineRgn( rgn, rgn, rgnTemp, RGN_OR );
DeleteObject( rgnTemp );
ancho = 0;
}
}
}
SetWindowRgn( form->Handle, rgn, true );
DeleteObject( rgn );
}
//Aquí termina.
Despues esto.
//---------------------------------------------------------------------------
__fastcall Tmain::Tmain(TComponent* Owner)
: TForm(Owner)
{
BitmapToRgn( this, Image1 ); //Escribe esto
}
//---------------------------------------------------------------------------
Y si quieres que el form se pueda mover arrastrando la imagen, entonces pon:
if ( mbLeft == Button )
{
ReleaseCapture();
Perform( WM_SYSCOMMAND, 0xF012, 0 );
}
En el evento OnMouseDown de la imagen.
Pues así de sencillo, solo debes cargar una imágen con una determinada forma en el form, ah, el formato de la imagen debe ser .bmp y debe tener un marco minimo de 1px de grueso del color que no quieres que se vea, ya que este código hace invisible el color de las esquinas de la imágen por ello debe existir ese marco para que esto pueda llevarse a cabo (espero me hayan entendido).
Una vez que hayas hecho esto tu form se verá más o menos así (bueno, eso depende de la imagen que utilices), este es un ejmplo de un programa que estoy desarrollando.
Clik aquí para ver como se ve sobre el escritorio de Windows XPSi tienes alguna duda no dudes en preguntar.
Suerte!...