Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2003.03.17;
Скачать: [xml.tar.bz2];

Вниз

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 вся ветка

Форум: "WinAPI";
Текущий архив: 2003.03.17;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.009 c
1-54026
BLooDMaN
2003-03-04 20:31
2003.03.17
Запуск программ из D6


14-54180
vetalar
2003-03-02 00:04
2003.03.17
Срочно требуются дельфийцы (Удаленное программирование)


14-54254
Driverrr
2003-02-28 12:29
2003.03.17
UT...


14-54248
Roman Go
2003-02-28 10:31
2003.03.17
Укажите ссылку на какой нибудь учебник по MS SQL Server


14-54287
pipl
2003-02-27 18:07
2003.03.17
Куда подевался OnClientRead?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский