【发布时间】:2012-07-01 10:29:58
【问题描述】:
我创建了一个例程来使 Delphi 可视控件的角变圆。
现在我要做的是确保每个可视对象(如 TMemo、TEdit 和 TPanel)都被舍入,而不必在创建表单时为每个人调用函数。
如何从我的代码(表单单元)为这些类中的每一个扩展 create 方法,以便它们保留类的名称和其他单元上的正常行为?
procedure RoundCornersOf(Control: TWinControl) ;
var
R: TRect;
Rgn: HRGN;
begin
with Control do
begin
R := ClientRect;
rgn := CreateRoundRectRgn(R.Left, R.Top, R.Right, R.Bottom, 20, 20) ;
Perform(EM_GETRECT, 0, lParam(@r)) ;
InflateRect(r, - 4, - 4) ;
Perform(EM_SETRECTNP, 0, lParam(@r)) ;
SetWindowRgn(Handle, rgn, True) ;
Invalidate;
end;
end;
【问题讨论】:
-
告诉我们更多关于你是如何做到这一点的。您将需要挂钩一些 gdi 消息处理程序方法。
-
完成。过程 RoundCornerOf(Control)...
-
我的问题有什么问题?它是合法的并且在起作用。
-
这不适用于许多控件。
-
只有那些重要的,比如
Edit、Panel、Memo、Image,它会创建一个更好看的界面。 Delphi 2006 缺乏良好的界面原生控件...
标签: delphi oop vcl delphi-2006