依星源码资源网,依星资源网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

【好消息,好消息,好消息】VIP会员可以发表文章赚积分啦 !
查看: 127|回复: 0

Delphi透明 圆角 窗体

[复制链接] 主动推送

1万

主题

1万

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
14809
发表于 2025-3-17 23:16:05 | 显示全部楼层 |阅读模式
Delphi透明 圆角 窗体
  1. unit Unit1;

  2. interface

  3. uses
  4.   Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  5.   Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.ExtCtrls, Vcl.StdCtrls;

  6. type
  7.   TForm1 = class(TForm)
  8.     Button1: TButton;
  9.     Button2: TButton;
  10.     Button3: TButton;
  11.     procedure FormDestroy(Sender: TObject);
  12.     procedure FormCreate(Sender: TObject);
  13.     procedure Button1Click(Sender: TObject);
  14.     procedure Button2Click(Sender: TObject);
  15.     procedure FormResize(Sender: TObject);
  16.     procedure Button3Click(Sender: TObject);
  17.   private
  18.     { Private declarations }
  19.     procedure DoVisible;
  20.     procedure DoInvisible;
  21.   public
  22.     { Public declarations }
  23.   end;

  24. var
  25.   Form1: TForm1;
  26.   FullRgn, ClientRgn, CtlRgn : THandle;

  27. implementation

  28. {$R *.DFM}

  29. procedure TForm1.DoInvisible;
  30. var
  31.   AControl : TControl;
  32.   A, Margin, X, Y, CtlX, CtlY : Integer;
  33. begin
  34.   Margin := ( Width - ClientWidth ) div 2;
  35.   //First, get form region
  36.   FullRgn := CreateRectRgn(0, 0, Width, Height);
  37.   //Find client area region
  38.   X := Margin;
  39.   Y := Height - ClientHeight - Margin;
  40.   ClientRgn := CreateRectRgn( X, Y, X + ClientWidth, Y + ClientHeight );
  41.   //'Mask' out all but non-client areas
  42.   CombineRgn( FullRgn, FullRgn, ClientRgn, RGN_DIFF );

  43.   //Now, walk through all the controls on the form and 'OR' them
  44.   // into the existing Full region.
  45.   for A := 0 to ControlCount - 1 do begin
  46.     AControl := Controls[A];
  47.     if ( AControl is TWinControl ) or ( AControl is TGraphicControl )
  48.         then with AControl do begin
  49.       if Visible then begin
  50.         CtlX := X + Left;
  51.         CtlY := Y + Top;
  52.         CtlRgn := CreateRectRgn( CtlX, CtlY, CtlX + Width, CtlY + Height );
  53.         CombineRgn( FullRgn, FullRgn, CtlRgn, RGN_OR );
  54.       end;
  55.     end;
  56.   end;
  57.   //When the region is all ready, put it into effect:
  58.   SetWindowRgn(Handle, FullRgn, TRUE);
  59. end;

  60. procedure TForm1.FormDestroy(Sender: TObject);
  61. begin
  62.   //Clean up the regions we created
  63.   DeleteObject(ClientRgn);
  64.   DeleteObject(FullRgn);
  65.   DeleteObject(CtlRgn);
  66. end;

  67. procedure TForm1.DoVisible;
  68. begin
  69.   //To restore complete visibility:
  70.   FullRgn := CreateRectRgn(0, 0, Width, Height);
  71.   CombineRgn(FullRgn, FullRgn, FullRgn, RGN_COPY);
  72.   SetWindowRgn(Handle, FullRgn, TRUE);
  73. end;

  74. procedure TForm1.FormCreate(Sender: TObject);
  75. begin
  76.   //We start out as a transparent form....
  77.   DoInvisible;
  78. end;

  79. procedure TForm1.Button1Click(Sender: TObject);
  80. begin
  81.   //This button just toggles between transparent and not trans..
  82.   if Button1.Caption = 'Show Form' then begin
  83.     DoVisible;
  84.     Button1.Caption := 'Hide Form';
  85.   end
  86.   else begin
  87.     DoInvisible;
  88.     Button1.Caption := 'Show Form';
  89.   end;
  90. end;

  91. procedure TForm1.Button2Click(Sender: TObject);
  92. begin
  93.   Application.Terminate;
  94. end;

  95. procedure TForm1.Button3Click(Sender: TObject);
  96. var
  97.   Reg1,Reg2:  THandle;
  98. begin
  99.   Reg1 := CreateRoundRectRgn(0, 0, self.Width, self.Width, 16, 16);  //在窗体指定的位置上创建一个圆角句型区域
  100.   Reg2 := CreateRectRgn(20, 20, self.Width, self.Width);     //在窗体指定的位置上创建一个矩形区域
  101.   CombineRgn(Reg1, Reg1, Reg2, RGN_OR);   //将Reg1,Reg2两个区域进行合并,Reg1得到Reg1,reg2的集合并集!
  102.   SetwindowRgn(handle, Reg1, True);    //将以上创建的区域设定成窗体的区域
  103. end;

  104. procedure TForm1.FormResize(Sender: TObject);
  105. begin

  106.   if Button1.Caption = 'Show Form' then
  107.     DoInvisible
  108.   else
  109.     DoVisible;
  110. end;
  111. end.
复制代码


扫码关注微信公众号,及时获取最新资源信息!下载附件优惠VIP会员6折;永久VIP4折
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

免责声明:
1、本站提供的所有资源仅供参考学习使用,版权归原著所有,禁止下载本站资源参与商业和非法行为,请在24小时之内自行删除!
2、本站所有内容均由互联网收集整理、网友上传,并且以计算机技术研究交流为目的,仅供大家参考、学习,请勿任何商业目的与商业用途。
3、若您需要商业运营或用于其他商业活动,请您购买正版授权并合法使用。
4、论坛的所有内容都不保证其准确性,完整性,有效性,由于源码具有复制性,一经售出,概不退换。阅读本站内容因误导等因素而造成的损失本站不承担连带责任。
5、用户使用本网站必须遵守适用的法律法规,对于用户违法使用本站非法运营而引起的一切责任,由用户自行承担
6、本站所有资源来自互联网转载,版权归原著所有,用户访问和使用本站的条件是必须接受本站“免责声明”,如果不遵守,请勿访问或使用本网站
7、本站使用者因为违反本声明的规定而触犯中华人民共和国法律的,一切后果自己负责,本站不承担任何责任。
8、凡以任何方式登陆本网站或直接、间接使用本网站资料者,视为自愿接受本网站声明的约束。
9、本站以《2013 中华人民共和国计算机软件保护条例》第二章 “软件著作权” 第十七条为原则:为了学习和研究软件内含的设计思想和原理,通过安装、显示、传输或者存储软件等方式使用软件的,可以不经软件著作权人许可,不向其支付报酬。若有学员需要商用本站资源,请务必联系版权方购买正版授权!
10、本网站如无意中侵犯了某个企业或个人的知识产权,请来信【站长信箱312337667@qq.com】告之,本站将立即删除。
郑重声明:
本站所有资源仅供用户本地电脑学习源代码的内含设计思想和原理,禁止任何其他用途!
本站所有资源、教程来自互联网转载,仅供学习交流,不得商业运营资源,不确保资源完整性,图片和资源仅供参考,不提供任何技术服务。
本站资源仅供本地编辑研究学习参考,禁止未经资源商正版授权参与任何商业行为,违法行为!如需商业请购买各资源商正版授权
本站仅收集资源,提供用户自学研究使用,本站不存在私自接受协助用户架设游戏或资源,非法运营资源行为。
 
在线客服
点击这里给我发消息 点击这里给我发消息 点击这里给我发消息
售前咨询热线
312337667

微信扫一扫,私享最新原创实用干货

QQ|免责声明|小黑屋|依星资源网 ( 鲁ICP备2021043233号-3 )|网站地图

GMT+8, 2025-4-4 04:37

Powered by Net188.com X3.4

邮箱:312337667@qq.com 客服QQ:312337667(工作时间:9:00~21:00)

快速回复 返回顶部 返回列表