Прозрачный PictureBox

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
A.A.Z.
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3035
Зарегистрирован: 30.06.2003 (Пн) 13:38

Прозрачный PictureBox

Сообщение A.A.Z. » 18.04.2004 (Вс) 17:22

Можно ли сделать прозрачный PictureBox, наподобие Image, т.е. будет видно, что под ним? :?:
Нет меня больше

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 19.04.2004 (Пн) 9:15

Прячешь PictureBox, "снимаешь" область под ним (хотя может быть прятать и не обязательно, уже не помню), выводишь "снимок" на PictureBox, сверху выводишь нужную тебе картинку.
Если имеется Win98/2000/XP, то используется TransparentBlt, если нужна универсальность, то используется BitBlt (придется накладывать трижды, предварительно подготовив маску).
Lasciate ogni speranza, voi ch'entrate.

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 19.04.2004 (Пн) 10:14

alibek, ну-ка проясни :)
У меня получалось 8 bitblt:

маска в монохромный DC
копия фона в tmpResultDC
маскируем фон там
инвертируем маску
копия картинки в tmpInterDC
маскируем картинку
xor
вывод результата

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

А как с трёх раз? Хочу знать...
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 19.04.2004 (Пн) 10:52

Ох-ох-ох... Давно это было, еще на VB3 :)

Пример никак не найду :) В MSDN нашел (Q94961), там действительно восемь операций (вернее шесть). Но я делал прогрессбар, там у меня получалось меньше, возможно потому, что я применял к частному случаю.
Lasciate ogni speranza, voi ch'entrate.

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 19.04.2004 (Пн) 10:58

Успокоил :)
У меня немножко лучше, чем там :wink:
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

A.A.Z.
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3035
Зарегистрирован: 30.06.2003 (Пн) 13:38

Сообщение A.A.Z. » 19.04.2004 (Пн) 17:56

А как копировать определенную часть экрана, а не весь сразу?
Нет меня больше

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 20.04.2004 (Вт) 8:48

У BitBlt ведь есть аргументы, два из них указывают точку, от которой "вырезается" фрагмент (по умолчанию нули), два других задают ширину и высоту фрагмента.
Lasciate ogni speranza, voi ch'entrate.

A.A.Z.
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3035
Зарегистрирован: 30.06.2003 (Пн) 13:38

Сообщение A.A.Z. » 20.04.2004 (Вт) 15:14

А, точно, у экрана hDC = 0!..
Нет меня больше


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Google-бот и гости: 4

    TopList