1 procedure TfrmRemoteData.DoInvisible; //透明 2 var 3 control: TControl; 4 index, margin, X, Y, ctlX, ctlY, i: Integer; 5 fullRgn, clientRgn, ctlRgn: THandle; 6 begin 7 margin := (Width - ClientWidth) div 2; 8 fullRgn := CreateRectRgn(0, 0, Width, Height); //创建总裁剪区域 9 X := margin; 10 Y := Height - ClientHeight - margin; 11 clientRgn := CreateRectRgn(X, Y, X + ClientWidth, Y + ClientHeight); 12 CombineRgn(fullRgn, fullRgn, clientRgn, RGN_DIFF); //合并区域,RGN_DIFF差集 13 14 for index := 0 to ControlCount - 1 do //遍历控件 15 begin 16 control := Controls[index]; 17 if (control is TWinControl) or (control is TGraphicControl) then 18 with control do 19 begin 20 if Visible then 21 begin 22 ctlX := X + Left; 23 ctlY := Y + Top; 24 // ctlRgn := CreateRectRgn(CtlX, CtlY, CtlX + Width, CtlY + Height); 25 ctlRgn := CreateRoundRectRgn(ctlX, ctlY, ctlX+ Width, ctlY + Height, Height, Height); 26 CombineRgn(fullRgn, fullRgn, ctlRgn, RGN_OR); //RGN_OR并集 27 28 end; 29 end; 30 end; 31 SetWindowRgn(Handle, fullRgn, True); //设置重绘窗口 32 end;
说明:CreateRoundRectRgn(R.Left, R.Top, R.Right, R.Bottom, arc1, arc2);
时间: 2024-11-10 13:31:34