2014-06-30 108 views
0

我正在开发一个非常重要的项目的游戏,我需要一些按钮在我的窗体中。顺便提一提,这些按钮必须是圆形的。我的意思是:德尔福圆角边框按钮

enter image description here

图片显示的是我期待的。我已经在互联网上发现了这个过程,人们说,它的工作原理相当不错:

procedure DrawRounded(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; 

所以我写了这个代码:

procedure TForm1.FormCreate(Sender: TObject); 
begin 
    //code for other stuff 

    DrawRounded(Button1); 
end; 

我使用的拉撒路1.2.4的时刻。顺便说一句,当我要编译时,我有一个错误,说Identifier not found "HRGN"

我以为我必须在uses中包含一个库,但我没有找到任何东西。任何帮助?

+0

它在['lcltype.pp']中定义(http://lazarus-ccr.sourceforge.net/docs/lcl/lcltype/hrgn.html)。 – TLama

+5

为什么downvotes?至少评论而不是低调,这些日子似乎太频繁了。在这里,我们并不像大多数人那样有天赋,所以不管这个问题有多么基本或微不足道,而不仅仅是给出负面的降价,至少解释了什么是错的。我没有看到这个问题没有问题,但我想这可能解释为什么我也得到大量的downvotes ... –

回答

2

源代码的快速检查显示HRGNLCLType.pp中定义。

LCLType添加到相关单元中,然后编码。