Delphi 代码实现窗口透明+圆角边框

来源:互联网 发布:mysql 最近10条记录 编辑:程序博客网 时间:2024/06/05 09:41
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;
说明:CreateRoundRectRgn(R.Left, R.Top, R.Right, R.Bottom, arc1, arc2);
原创粉丝点击