Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.03.17;
Скачать: CL | DM;

Вниз

Region Functions   Найти похожие ветки 

 
Cosmic ©   (2003-01-21 21:11) [0]

Здравствуйте, мастера!

Вопрос такой: я знаю, что существуют функции создания и управления регионами,
но как их применять, честно говоря, не очень себе представляю. Как с ними работать?
Как создавать регионы и объединять их? Если не сложно, с примерами, плиз.

А нужно мне вот что: взять произвольную BMP-шку и создать окно, имеющее форму этой
BMP-шки (наподобие Автозапуска на CHIP-CD). Буду оч-ч-ень благодарен за примеры.

Заранее спасибо.


 
Billy ©   (2003-01-22 03:30) [1]

Здесь, насколько мне известно, применяется такая тактика:
1) Создается прямоугольный регион (под размер рисунка).
Функция CreateRectRgn.
2) В цикле ищутся горизонтальные линии (прозрачного цвета)толщиной в 1 пиксель и создаются прямоугольные регионы под размер этих областей.
3) При помощи CombineRgn с параметром RGN_DIFF "вычитаем" из 1-го региона второй (из общего - тоненький)
4) Вызываем SetWindowRgn.
5) Балдеем! :-)


 
Игорь Шевченко ©   (2003-01-22 09:39) [2]

Про регион из BMP - есть статья Антона Григорьева на "Королевстве Delphi" (www.delphikingdom.com)


 
Cosmic ©   (2003-01-22 22:40) [3]

Я пишу примерно так:

var
Rgn, Rgn1, Rgn2: HRGN;

...

Rgn1 := CreateRectRgn(50,50,100,100);
Rgn2 := CreateEllipticRgn(100,100,150,100);
CombineRgn(Rgn, Rgn1, Rgn2, RGN_OR);
SetWindowRgn(Form1.Handle, Rgn, True);

Но не работает! Выводит простую форму. В чем проблема?


 
Юрий Зотов ©   (2003-01-22 23:26) [4]

http://www.delphikingdom.com/helloworld/samples_win.htm#link11

Проект-пример Cunnings.zip
(CreateXXXRgn, CombineRgn, SetWindowRgn и еще кое-что)


 
Mihey   (2003-01-22 23:41) [5]

Вот функции создания и десоздания регионов:

procedure CropWindow( Handle: HWnd; Picture : TPicture );
var
hrgn, hrgn1 : integer;
hdc : integer;
x, y : integer;
Color : TColor;
begin
// Color := Picture.Bitmap.Canvas.Pixels[ 0, 0 ];
Color := clWhite;
hdc := GetDC( Handle );
hrgn := CreateRectRgn( 0, 0, Picture.Graphic.Width, Picture.Graphic.Height );
for x := 1 to Picture.Graphic.Width do
for y := 1 to Picture.Graphic.Height do
if Picture.Bitmap.Canvas.Pixels[ x - 1, y - 1 ] = Color then begin
hrgn1 := CreateRectRgn( x - 1, y - 1, x, y);
CombineRgn( hrgn, hrgn, hrgn1, RGN_DIFF );
DeleteObject( hrgn1 );
end;
SetWindowRgn( Handle, hrgn, true );
//DeleteObject( hrgn );
ReleaseDC( Handle, hdc);
end;

//============================================================================//
//============================================================================//
//============================================================================//
procedure UncropWindow( Handle: HWnd; Picture : TPicture );
var
hrgn : integer;
hdc : integer;
begin
hdc := GetDC( Handle );
hrgn := CreateRectRgn( 0, 0, Picture.Graphic.Width , Picture.Graphic.Height );
SetWindowRgn( Handle, hrgn, true );
ReleaseDC( Handle, hdc );
end;

Как раз с BMP"шкой.


 
MBo ©   (2003-01-23 06:13) [6]

>Cosmic © (22.01.03 22:40)
Ошибка в том, что приемный регион в CombineRgn уже должен быть создан! Можно использовать один из исходных или создать еще один


 
Cosmic ©   (2003-01-24 10:19) [7]

Отлично, спасибо. Еще вопрос: при перехвате WM_NCLBUTTONDOWN (то есть, если я хочу, чтобы форма двигалась, когда я ее хватаю мышкой за любое место) перемещается не регион, который мной создан, а весь контур формы. Можно ли этого избежать?


 
MBo ©   (2003-01-24 10:28) [8]

вероятно, если PtInRegion, то не вызывать унаследованный обработчик


 
Cosmic ©   (2003-01-24 10:48) [9]

Это как? В смысле, как "не вызывать"?



Страницы: 1 вся ветка

Текущий архив: 2003.03.17;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.021 c
9-53834
Nostradamus
2002-10-11 16:27
2003.03.17
Рисование доп. окон


1-54066
AlexVit
2003-03-04 08:04
2003.03.17
Как определить, что приложение зависло?


3-53944
~
2003-02-26 11:44
2003.03.17
Исключения хранимой процедуры


3-53844
Anonimus
2003-02-27 09:11
2003.03.17
Как скопировать поля DBGrida в буфер обмена?


1-54093
An
2003-03-05 12:59
2003.03.17
Умный ресайз формы