Hola Mario:code:
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
HRGN frmRegion=0, tempRegion;
int i;
TRect aRect;
for (i=0; i<ControlCount; i++)
{
aRect = Controls[i]->BoundsRect;
OffsetRect((RECT*)&aRect, ClientOrigin.x - Left, ClientOrigin.y - Top);
tempRegion = CreateRectRgnIndirect((RECT*)&aRect);
if (frmRegion == 0)
frmRegion = tempRegion;
else
{
CombineRgn(frmRegion, frmRegion, tempRegion, RGN_OR);
DeleteObject(tempRegion);
}
}
tempRegion = CreateRectRgn( 0, 0, Width,
GetSystemMetrics(SM_CYCAPTION)+
GetSystemMetrics(SM_CYSIZEFRAME)+
GetSystemMetrics(SM_CYMENU) * abs(Menu!=NULL));
CombineRgn(frmRegion, frmRegion, tempRegion, RGN_OR);
DeleteObject(tempRegion);
SetWindowRgn(Handle, frmRegion, true);}
//---------------------------------------------------------------------------
Y si lo quieres mas resumido (hace exactamente lo mismo):
code:
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
HRGN frmRgn = CreateRectRgn(0, 0, Width,
Height-ClientHeight-GetSystemMetrics(SM_CYSIZEFRAME));
for (int i=0; i<ControlCount; i++)
{
TRect R = Controls[i]->BoundsRect;
OffsetRect((RECT*)&R, ClientOrigin.x - Left, ClientOrigin.y - Top);
HRGN tmpRgn = CreateRectRgnIndirect((RECT*)&R);
CombineRgn(frmRgn, frmRgn, tmpRgn, RGN_OR);
DeleteObject(tmpRgn);
}
SetWindowRgn(Handle, frmRgn, true);
DeleteObject(frmRgn);
}
//---------------------------------------------------------------------------
Saludos.
_Leo