procedure TfrmRemoteData.DoInvisible; //透明
var control: TControl;
index,
margin,
X,
Y,
ctlX,
ctlY,
i: Integer;
fullRgn,
clientRgn,
ctlRgn: THandle;
begin margin: =(Width - ClientWidth) div 2;
fullRgn: =CreateRectRgn(0, 0, Width, Height); //创建总裁剪区域
X: =margin;
Y: =Height - ClientHeight - margin;
clientRgn: =CreateRectRgn(X, Y, X + ClientWidth, Y + ClientHeight);
CombineRgn(fullRgn, fullRgn, clientRgn, RGN_DIFF); //合并区域,RGN_DIFF差集
for index: =0 to ControlCount - 1 do //遍历控件
begin control: =Controls[index];
if (control is TWinControl) or(control is TGraphicControl) then with control do begin
if Visible then begin ctlX: =X + Left;
ctlY: =Y + Top;
// ctlRgn := CreateRectRgn(CtlX, CtlY, CtlX + Width, CtlY + Height);
ctlRgn: =CreateRoundRectRgn(ctlX, ctlY, ctlX + Width, ctlY + Height, Height, Height);
CombineRgn(fullRgn, fullRgn, ctlRgn, RGN_OR); //RGN_OR并集
end;
end;
end;
SetWindowRgn(Handle, fullRgn, True); //设置重绘窗口
end;
来源: http://www.bubuko.com/infodetail-2277765.html