2014-06-30 192 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添加到相關單元中,然後編碼。