imho.ws |
![]() |
![]() |
![]() |
# 2 |
::VIP::
Регистрация: 19.03.2004
Сообщения: 1 329
![]() ![]() ![]() ![]() |
Основные функции (см. Help WinAPI), которые тебе понядобятся:
CreateRectRgn - создает прямоугольную область CreateEllipticRgn - создает эллиптическую область CreatePolygonRgn - создает многоугольник CombineRgn - позволяет объединять регионы между собой. Т.е. можно создать нужную тебе форму (регион), комбинируя эти примитивы с помощью CombineRgn. Можно создать регион по растру: Код:
function BitmapToRegion(Bitmap: TBitmap; TransColor: TColor): HRGN; var X,Y: Integer; XStart: Integer; begin Result := 0; with Bitmap do for Y:=0 to Height-1 do begin X := 0; while X do begin // Пропускаем прозрачные точки while (X<Width and (Canvas.Pixels[X,Y]=TransColor) do Inc(X); if X >= Width then Break; XStart := X; // Пропускаем непрозрачные точки while (X<Width and (Canvas.Pixels[X,Y]<>TransColor) do Inc(X); // Создаем новый прямоугольный регион и добавляем его к // региону всей картинки if Result=0 then Result:=CreateRectRgn(XStart, Y, X, Y + 1) else CombineRgn(Result, Result,CreateRectRgn(XStart, Y, X, Y + 1), RGN_OR); end; end; end; Как элементарный пример: Код:
// Cоздаем круглый регион rgn: = CreateEllipticRgn(0,0,100,100); // Накладываем его на кнопку SetWindowRgn(Button1.Handle, rgn, true); |
![]() |
![]() |
# 3 |
Full Member
Регистрация: 31.08.2003
Адрес: где-то между Марсом и Юпитером
Сообщения: 998
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
При помощи регионов можно создать кнопку абсолютно произвольной формы. Подробнее о том что такое регионы и как их можно использовать можешь еще вот здесь почитать: http://www.erased.info/articles/3056.html
Ну вот пока я собирался с мыслью тов. ЕЖ все уже расписал, причем гораздо подробнее...
__________________
Старые игры раздают здесь Последний раз редактировалось CEO; 23.04.2005 в 17:48. |
![]() |