uses
Windows;
procedure TransPanel(var panel : TPanel);
var
I, X, Y : Integer;
FullRgn, ClientRgn, ControlRgn : THandle;
Margin, MarginX, MarginY : Integer;
begin
Margin := (panel.Width - panel.ClientWidth) div 2;
MarginX := Margin;
MarginY := panel.Height - panel.ClientHeight - Margin;
FullRgn := CreateRectRgn(0, 0, panel.Width, panel.Height);
ClientRgn := CreateRectRgn(MarginX,
MarginY,
MarginX + panel.ClientWidth,
MarginY + panel.ClientHeight);
CombineRgn(FullRgn, FullRgn, ClientRgn, RGN_DIFF);
for I := 0 to panel.ControlCount - 1 do
begin
X := MarginX + panel.Controls[I].Left;
Y := MarginY + panel.Controls[I].Top;
ControlRgn := CreateRectRgn(X,
Y,
X + panel.Controls[I].Width,
Y + panel.Controls[I].Height);
CombineRgn(FullRgn, FullRgn, ControlRgn, RGN_OR);
end;
SetWindowRgn(panel.Handle, FullRgn, True);
end;
begin
TransPanel(Panel1);
end;