| 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 в 18:48. |
|
|