最近在做一个Delphi的项目,常常要设计软件的界面,需要将控件画成圆角矩形。在Delphi中将控件画成圆角效果,可使用CreateRoundRectRgn函数。在此写了一个通用的函数,只要在用到改变控件效果的地方,调用就OK了,函数如下:
procedure TfrmTest.RoundControl(Control: TWinControl;arc1:Integer;arc2:Integer);
var
R: TRect;
Rgn: HRGN;
begin
with Control do
begin
R :=Control.ClientRect;
rgn := CreateRoundRectRgn(R.Left, R.Top, R.Right, R.Bottom, arc1, arc2);
Perform(EM_GETRECT, 0, lParam(@r));
InflateRect(r, -5, -5);
Perform(EM_SETRECTNP, 0, lParam(@r));
SetWindowRgn(Control.Handle, rgn, True);
Invalidate;
end;
end;
只要在调用时传入控件的name和两个弧度就可以设置控件的圆角效果。
同时,要去掉TPanel控件的边线效果,只需将其BevelOuter设置成bvNone即可,其他有边线效果的控件设置无边线效果同TPanel一样。
procedure TfrmTest.RoundControl(Control: TWinControl;arc1:Integer;arc2:Integer);
var
R: TRect;
Rgn: HRGN;
begin
with Control do
begin
R :=Control.ClientRect;
rgn := CreateRoundRectRgn(R.Left, R.Top, R.Right, R.Bottom, arc1, arc2);
Perform(EM_GETRECT, 0, lParam(@r));
InflateRect(r, -5, -5);
Perform(EM_SETRECTNP, 0, lParam(@r));
SetWindowRgn(Control.Handle, rgn, True);
Invalidate;
end;
end;
只要在调用时传入控件的name和两个弧度就可以设置控件的圆角效果。
同时,要去掉TPanel控件的边线效果,只需将其BevelOuter设置成bvNone即可,其他有边线效果的控件设置无边线效果同TPanel一样。