Prueba redefinir el método CreateWnd del frame así:
Código Delphi
[-]
function GetControlRgn(Control: TControl): HRgn;
var
Rect: TRect;
begin
Rect := Control.BoundsRect;
Result := CreateRectRgn(Rect.Left, Rect.Top, Rect.Right, Rect.Bottom);
end;
procedure TFrame2.CreateWnd;
var
ControlsRgn: HRgn;
I: Integer;
begin
inherited;
if ControlCount > 0 then
begin
ControlsRgn := GetControlRgn(Controls[0]);
for I := 1 to ControlCount - 1 do
CombineRgn(ControlsRgn, ControlsRgn, GetControlRgn(Controls[i]), RGN_OR);
SetWindowRgn(Handle, ControlsRgn, true);
end;
end;
El único "problema" que hevisto es con controles tipo etiqueta (TLabel, TRadioButton, TCheckBox, etc.) ya que no son controles que "ocupen" todo el rectángulo que los determina.
// Saludos