Использование PNG-изображения в качестве скина на VB6

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Dark_Diver
Начинающий
Начинающий
 
Сообщения: 10
Зарегистрирован: 16.03.2006 (Чт) 22:57
Откуда: Donetsk, Ukraine

Использование PNG-изображения в качестве скина на VB6

Сообщение Dark_Diver » 16.07.2006 (Вс) 22:56

Уже долгое время искал по безграничному инету ответ на такой вопрос - можно ли использовать одновременно изображения с альфа-каналом в качестве скина для формы и обычные контролы, не прибегая к специально реализованным с помощью тех или иных технологий?
За последний год, когда меня заинтересовал этот вопрос, ничего более-менее удовлетворяющего себя не нашёл. Времени сильно вспоминать старичка VB6 не было. Но небольшие весчи на нём пишу время от времени - потому что быстро и просто ;)
Но вот попалась задачка более недельной ресурсоёмкости и захотелось сделать её красиво ;) В очередной раз поискав интересующий меня ответ и не найдя простого решения, решил всё-таки покопаться сам. Перелопатив сегодня несколько сайтов и свой старый архив, наваял некоторое подобие прототипа.
ТЗ было таково - бэкграунд формы (и, соответственно, форма окна) должен задаваться изображением с альфа-каналом (на ум сразу приходит, естессно, PNG) - отсюда имеем любую необходимую форму окошка, мягкие тени, антиалиасинг и т.п.; и обычные контролы поверх. Но как работают (вернее, не совсем работают - работают, но не отрисовываются) обычные контролы поверх слоёного окна знает весь интернет. Потому, не мудрствуя лукаво, решил задачу в лоб ;)
Приведённый пример - лишь прототип, в общем технологию потестил пока. Результаты, вроде, удовлетворительные ;) Завтра начну делать нормальную версию - более-менее структурированную, с ресайзом окна и т.д. - хочу шаблон окошек как в будущей Windows Vista сделать. Кому тема интересна - можете скачать, посмотреть, может подсказать чего, может - спросить ;)

В архиве исходники. Контролы, библиотеки и DLL-ки не требуются - всё в VB-сорцах. (В этом приложении используется WebBrowser - но это только для примера, в качестве обычного контрола.)
В общем, компилить и запускать. Экзешнику нужен для работы рядом с собой Skin.png - собственно, сам скин.
Вложения
VBista.zip
Исходник. Просто тест технологии.
(661.68 Кб) Скачиваний: 148

Dark_Diver
Начинающий
Начинающий
 
Сообщения: 10
Зарегистрирован: 16.03.2006 (Чт) 22:57
Откуда: Donetsk, Ukraine

В догонку...

Сообщение Dark_Diver » 16.07.2006 (Вс) 23:10

Не спал больше суток - торможу. В догонку - для отрисовки PNG с альфа-каналом используется GDI+, потому она , всё же, требуется. В общем, должно работать на MS Windows 2000 и выше.

CodeName33
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 297
Зарегистрирован: 01.09.2004 (Ср) 13:25
Откуда: SPb

Сообщение CodeName33 » 17.07.2006 (Пн) 8:53

Где-то я уже выкладвал примерчик, который умеет отрисовывать 32битные BMP/PNG/TGA без GDI+, а с моими рукописными библиотеками и работало всё под как под W2k/XP, так и под W95/98.

Могу поискать если нужно.
Программисты не глючат - глючат компиляторы...

kpblc
Новичок
Новичок
 
Сообщения: 42
Зарегистрирован: 05.05.2006 (Пт) 15:42
Откуда: С.-Петербург

Сообщение kpblc » 17.07.2006 (Пн) 8:58

Нужно, если только не сложно.

CodeName33
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 297
Зарегистрирован: 01.09.2004 (Ср) 13:25
Откуда: SPb

Сообщение CodeName33 » 17.07.2006 (Пн) 9:05

Программисты не глючат - глючат компиляторы...

kpblc
Новичок
Новичок
 
Сообщения: 42
Зарегистрирован: 05.05.2006 (Пт) 15:42
Откуда: С.-Петербург

Сообщение kpblc » 17.07.2006 (Пн) 9:20

Спасибо :)

Dark_Diver
Начинающий
Начинающий
 
Сообщения: 10
Зарегистрирован: 16.03.2006 (Чт) 22:57
Откуда: Donetsk, Ukraine

Сообщение Dark_Diver » 17.07.2006 (Пн) 9:42

CodeName33 писал(а):Где-то я уже выкладвал примерчик, который умеет отрисовывать 32битные BMP/PNG/TGA без GDI+, а с моими рукописными библиотеками и работало всё под как под W2k/XP, так и под W95/98.

Могу поискать если нужно.


Облизательно нужно, даж, по-моему, я раньше, когда искал как сделать alpha-канал + обычные контролы, уже встречался с твоими работами. Судя по тому, что твой ник мне запомнился, посмотреть стоит обязательно :)
Have a nice [D]OS[/2], TOSS, BIOS & CMOS!

Dark_Diver
Начинающий
Начинающий
 
Сообщения: 10
Зарегистрирован: 16.03.2006 (Чт) 22:57
Откуда: Donetsk, Ukraine

Сообщение Dark_Diver » 17.07.2006 (Пн) 10:01

2 CodeName33
Попробую с твоей либой тоже. В принципе, GDI+ меня устраивает - библиотека очень мощная и гибкая. Минус - не особо быстрая (дык алгоритмы не простые, современное железо их хардкорно далеко не все поддерживает, может DX10 карты поумнее будут.) И на доисторических ;) операционных системах её с собой инсталить надо.

А вобще смысл того, что мне было нужно - заставить работать обычные визуальные компоненты на окошках после UpdateLayeredWindow с поддержкой альфа-прозрачности. Желательно - максимально просто. Т.е. указал картинку с альфа-каналом, а потом просто накидываешь обычные котролы в IDE и пишешь как обычно. Решил просто - две формы - одна как-раз с альфа-прозрачностью находится за основной с контролами и ресайзится/перемещается вместе с ней. Субклассинг, обработка оконных сообщений, синхронизация расположения окон. Основная форма с контролами тоже слоёная, но с обычной прозрачностью по цвету. При усиленном таскании окна комп, конечно, слегка напрягается (мой - аж на 5 процентов ;) ), зато красиво. Можно рисовать скин любой формы, с любой тенью, прозрачностью и т.д. в фотошопе, сохранять в PNG, и работать поверх с обычными контролами. Причём фон контрола (любого) можно тоже сделать цветом, который выбран прозрачным для контрол-формы и он будет отрисовываться поверх полупрозрачного PNG.
Have a nice [D]OS[/2], TOSS, BIOS & CMOS!

CodeName33
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 297
Зарегистрирован: 01.09.2004 (Ср) 13:25
Откуда: SPb

Сообщение CodeName33 » 17.07.2006 (Пн) 10:07

Dark_Diver, в моём примере только ICO32/TGA32, для PNG32 нужна ещё одна либа, и модули. Могу выложить тоже.
Программисты не глючат - глючат компиляторы...

kpblc
Новичок
Новичок
 
Сообщения: 42
Зарегистрирован: 05.05.2006 (Пт) 15:42
Откуда: С.-Петербург

Сообщение kpblc » 17.07.2006 (Пн) 10:13

Можно попросить?

Dark_Diver
Начинающий
Начинающий
 
Сообщения: 10
Зарегистрирован: 16.03.2006 (Чт) 22:57
Откуда: Donetsk, Ukraine

Сообщение Dark_Diver » 17.07.2006 (Пн) 10:19

CodeName33
Выкладывай :) Я, скорее всего сделаю пару библиотек - одну для простых скинабельных форм, когда форма не ресайзится (типа плэйеров всяких и тому подобное), скорее всего в виде контрола тоже, без необходимости самому создавать фоновую прозрачную форму. На обычную форму с контролами его кинул, указал 32бит-изображение, и всё - он сам будет АПИшное Layered окошко создавать, загружать в него изображение и размещать за формой с контролами. Для такого контрола использование GDI+, в общем-то, излишне. И более продвинутую - с ресайзом окна, скинабельную, типа окошек в Висте. В этом случае есть смысл использовать GDI+ для альфа-части окна - удобство библиотеки, антиалиасинг текста/изображений, эффекты вроде свечения кнопок управления окном и т.п.
Have a nice [D]OS[/2], TOSS, BIOS & CMOS!

CodeName33
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 297
Зарегистрирован: 01.09.2004 (Ср) 13:25
Откуда: SPb

Сообщение CodeName33 » 17.07.2006 (Пн) 10:46

Вот тот же пример, только для PNG: http://www.codename33.ru/src/grender_png.zip
Программисты не глючат - глючат компиляторы...

Dark_Diver
Начинающий
Начинающий
 
Сообщения: 10
Зарегистрирован: 16.03.2006 (Чт) 22:57
Откуда: Donetsk, Ukraine

Сообщение Dark_Diver » 17.07.2006 (Пн) 10:52

CodeName33 писал(а):Вот тот же пример, только для PNG: http://www.codename33.ru/src/grender_png.zip


Спасибо!
Have a nice [D]OS[/2], TOSS, BIOS & CMOS!

Dark_Diver
Начинающий
Начинающий
 
Сообщения: 10
Зарегистрирован: 16.03.2006 (Чт) 22:57
Откуда: Donetsk, Ukraine

Сообщение Dark_Diver » 17.07.2006 (Пн) 11:04

CodeName33
Во втором примере VB не находит функцию CheckNumber. Хде искать? ;)
Have a nice [D]OS[/2], TOSS, BIOS & CMOS!

CodeName33
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 297
Зарегистрирован: 01.09.2004 (Ср) 13:25
Откуда: SPb

Сообщение CodeName33 » 17.07.2006 (Пн) 11:09

Dark_Diver,
Код: Выделить всё
Public Sub CheckNumber(Number, Min, Max)
If Number < Min Then Number = Min
If Number > Max Then Number = Max
End Sub
Программисты не глючат - глючат компиляторы...

Dark_Diver
Начинающий
Начинающий
 
Сообщения: 10
Зарегистрирован: 16.03.2006 (Чт) 22:57
Откуда: Donetsk, Ukraine

Сообщение Dark_Diver » 17.07.2006 (Пн) 11:17

CodeName33

Следующая таинственная функция - GetRGB ;)
Have a nice [D]OS[/2], TOSS, BIOS & CMOS!

CodeName33
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 297
Зарегистрирован: 01.09.2004 (Ср) 13:25
Откуда: SPb

Сообщение CodeName33 » 17.07.2006 (Пн) 11:22

Dark_Diver :) проще заменить модуль на полный: http://www.codename33.ru/src/basicmodule.zip
Программисты не глючат - глючат компиляторы...

Dark_Diver
Начинающий
Начинающий
 
Сообщения: 10
Зарегистрирован: 16.03.2006 (Чт) 22:57
Откуда: Donetsk, Ukraine

Сообщение Dark_Diver » 17.07.2006 (Пн) 11:34

CodeName33 писал(а):Dark_Diver :) проще заменить модуль на полный: http://www.codename33.ru/src/basicmodule.zip


Спасибо, теперь всё Ок :)

P.S. Для тех, кто будет тоже пробовать второй пример от CodeName33 - не забудьте положить в доступном месте zlib.dll, входящая в проект vbpng1.dll требует её для работы.
Have a nice [D]OS[/2], TOSS, BIOS & CMOS!

CodeName33
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 297
Зарегистрирован: 01.09.2004 (Ср) 13:25
Откуда: SPb

Сообщение CodeName33 » 17.07.2006 (Пн) 11:39

Dark_Diver, да точно! Не как не мог вспомнить, что же я забыл! zlib! Вот полная версия, с zlib и исправленным модулем: http://www.codename33.ru/src/grender_png_full.zip
Программисты не глючат - глючат компиляторы...

AntonGV
Бывалый
Бывалый
 
Сообщения: 234
Зарегистрирован: 24.05.2006 (Ср) 12:10
Откуда: г. Пермь

Сообщение AntonGV » 17.07.2006 (Пн) 20:07

Dark_Diver, когда сделаешь пожалуйста выложи свои разработки


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

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 99

    TopList