2014-06-30 5 views
0

Я разрабатываю игру для довольно важного проекта, и мне нужны некоторые кнопки в моей форме. Эти кнопки, кстати, должны быть круглыми. Я имею в виду:Delphi rounded-border button

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; 

Я использую Lazarus 1.2.4 на данный момент. Кстати, когда я собираюсь скомпилировать, у меня есть ошибка, которая говорит Identifier not found "HRGN".

Я думал, что должен был включить библиотеку в uses, но я ничего не нашел. Любая помощь?

+0

Он определен в ['lcltype.pp'] (http://lazarus-ccr.sourceforge.net/docs/lcl/lcltype/hrgn.html). – TLama

+5

почему downvotes? По крайней мере, комментарий, а не downvoting, похоже, слишком часто случается в наши дни. Мы не все так же одарены, как и большинство из нас, поэтому независимо от того, насколько основной или тривиальный вопрос, а не просто давать отрицательные вниз, по крайней мере, объясните, что не так. Я не вижу проблемы с этим вопросом, но потом я думаю, что это может объяснить, почему я также получаю множество downvotes ... –

ответ

2

Быстрая проверка исходного кода показывает, что HRGN определен в LCLType.pp.

Добавить LCLType к соответствующему устройству и код затем скомпилировать.

Смежные вопросы