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

Вниз

Скопировать регион   Найти похожие ветки 

 
RUNaum ©   (2006-05-18 09:36) [0]

Как можно скопировать регион (круг к примеру или любая другая форма) с канвы одного компонента на канву другого, при этом чтобы, понятное дело, под кругом осталась ранее видимая область.


 
MBo ©   (2006-05-18 09:57) [1]

>при этом чтобы, понятное дело, под кругом осталась ранее видимая область.

Вот это дело не вполне понятное ;)


 
RUNaum ©   (2006-05-18 10:47) [2]

Плохо пояснил ) Прошу прощение.

Давайте разберем на примере. Есть "панель", на ее канве (по всей панели) что-то отрисовано. Есть другая "панель", с канвы которой нужно скопировать круг на первую, расположив его в центре и чтобы не затерлось то что виднеется за пределами круга.

Вроде лучше.


 
MBo ©   (2006-05-18 12:36) [3]

В приемном контексте установить SelectClipRgn (круглый по нужным размерам CreateEllipticRgn)


 
RUNaum ©   (2006-05-18 12:55) [4]

Угу, понял.

Вопросец еще. Может так проще будет:
Можно ли придать панели круглую форму? Т.е. есть некая подложка, на ней висит круглая "панель", на канве которой отрисовывается полноценно изображение по размеру описывающего круг прямоугольника, но за счет того что сама панель задана регионом (кругом) излишки "обрезаются".

Прошу подтоклнуть на мысль... В WinAPI не силен (

Я прошу прощение за формулировку, не знаю как проще пояснить ) но думаю более менее понятно.


 
wal ©   (2006-05-18 13:00) [5]


> [4] RUNaum ©   (18.05.06 12:55)

SetWindowRgn


 
RUNaum ©   (2006-05-18 13:13) [6]

wal ©   (18.05.06 13:00) [5]
Огромное спасибо вам и MBo, все получилось!


 
parovoZZ ©   (2006-05-18 21:09) [7]

Что самое дерьмовое, регион нельзя запомнить. :)


 
Игорь Шевченко ©   (2006-05-18 21:12) [8]


> Что самое дерьмовое, регион нельзя запомнить. :)


Создаешь регион, копируешь нужный туда CombineRgn или CopyRgn и запоминаешь. Проблем нету. Заодно и выражения выбираешь при отправке постов.


 
parovoZZ ©   (2006-05-18 23:08) [9]

Да ну. У меня есть 10 картинок. Создаю CombineRgn столько же регионов (допустим, в массиве). Но как только делаю SetWindowRgn  предыдущий регион уходит в небытие.


 
MBo ©   (2006-05-19 06:48) [10]

>регион нельзя запомнить
GetRgnData
ExtCreateRgn


 
parovoZZ ©   (2006-05-20 21:00) [11]

Хм, будем попробовать


 
parovoZZ ©   (2006-05-27 23:12) [12]

Ну вообщем я ленивый, поэтому объясню ситуацию.
У меня есть скринмэйт, который активно машет крыльями. Первое, что приходит в голову, это при вызове следующей картинки обрабатывать её и вырезать регионом всё лишнее. Просто, но очень сильно загружает процессор. Второе, что приходит на ум - это создать массив и туда залить все регионы для всех картинок. НО! При последующем вызове региона из массива мы получаем всё, что угодно, но только не регион. Я пошёл по другому пути. В результате нагрузка процессора не более 10 %, без обработки картинки, но вызываем каждый раз CombineRgn. А вот GetRgnData и ExtCreateRgn действительно позволяют решить задачу?


 
parovoZZ ©   (2006-05-27 23:37) [13]

Попробовал...

В result готовый регион:


function CreateRgn (index : byte) : HRGN;
var                                      
x     : integer;
Rgn   : HRGN;
RgnDt : RGNDATA;
form  : xForm;

begin
result := CreateRectRgn (0, 0, Width, Height);
....
//Пара строчек по созданию региона на основе картинки
GetRegionData (result, SizeOf (RgnDT), @RgnDt);
result := ExtCreateRegion (@form, SizeOf (RgnDt), RgnDt)
end;


На выходе имеем 0.


 
antonn ©   (2006-05-28 07:18) [14]

parovoZZ ©   (27.05.06 23:37) [13]
//Пара строчек по созданию региона на основе картинки

и там, видимо, через canvas.pixels[] работа идет... мой телепатор прав?


 
parovoZZ ©   (2006-05-28 11:45) [15]


> и там, видимо, через canvas.pixels[] работа идет... мой
> телепатор прав?

НЕТ. Там всё идёт через HDC. Так как я обожаю WinApi, то собственно ни о каких канвасах речи и быть не может. Мой скринмэйт вместе с картинками весит 40 кило.

Меня смущает последний параметр ExtCreateRegion - просят константу. А у меня там переменная. Хотя в справке написано, что ExtCreateRegion работает совместно с GetRegionData. И что за структура XFORM? Попробовал подставить nil - результат тоже нулевой. Вроде в RGNDT что-то пишется, но не изымается.

Может есть у кого рабочий примерчик?


 
MBo ©   (2006-05-29 08:21) [16]

>parovoZZ
Мой пост с ExtCreateRgn относится к долговременному  сохранению региона(например, на винт)
Для временного хранения достаточно того, что Игорь посоветовал


 
parovoZZ ©   (2006-05-29 19:46) [17]

Так а в память его можно "записать"? У меня что-то не получилось. Да и в справке написано, что регион можно вызвать не более одного раза.



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

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

Наверх





Память: 0.48 MB
Время: 0.045 c
11-1133802855
Zoom
2005-12-05 20:14
2006.10.08
KOLHighlightEdit пара вопросов


2-1158848876
J_SABER
2006-09-21 18:27
2006.10.08
перевод курсора


1-1156789030
Коля
2006-08-28 22:17
2006.10.08
Это баг Delphi?


1-1156767660
.ruslan
2006-08-28 16:21
2006.10.08
Выравнивание по ширине...


15-1158247965
SamProf
2006-09-14 19:32
2006.10.08
Подскажите пожайлеста компонент





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский