На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Правила раздела Visual Basic: Общие вопросы
Здесь обсуждаются вопросы по языку Visual Basic 1-6 (а так же по схожим языкам, как, например, PowerBASIC).
Вопросы по Visual Basic .NET (это который входит в состав Visual Studio 2002/2003/2005/2008+, для тех, кто не в курсе) обсуждаются в разделе .NET.

Обратите внимание:
1. Прежде чем начать новую тему или отправить сообщение, убедитесь, что Вы не нарушаете правил форума!
2. Обязательно воспользуйтесь поиском. Возможно, Ваш вопрос уже обсуждали. Полезные ссылки приведены ниже.
3. Темы с просьбой выполнить какую-либо работу за автора в этом разделе не обсуждаются. Студенты, вам сюда: ПОМОЩЬ СТУДЕНТАМ!
4. Используйте теги [ code=vba ] ...текст программы... [ /code ] для выделения текста программы подсветкой.
5. Помните, здесь телепатов нет. Формулируйте свой вопрос максимально грамотно и чётко: Как правильно задавать вопросы
6. Запрещено отвечать в темы месячной (и более) давности, без веских на то причин.

Полезные ссылки:
user posted image FAQ Сайта user posted image FAQ Раздела user posted image Кладовка user posted image Наши Исходники user posted image API-Guide user posted image Поиск по Разделу user posted image MSDN Library Online user posted image Google

Ваше мнение о модераторах: user posted image SCINER, user posted image B.V.
Модераторы: SCINER, B.V.
Страницы: (3) [1] 2 3  все  ( Перейти к последнему сообщению )  
> Как создать модальное окно с полупрозрачным фоном? , VB6
    Как создать модальное окно с полупрозрачным фоном? (рис)
    Прикреплённая картинка
    Прикреплённая картинка

    Как сделать такое на VB6. Предполагаю что при помощи WinAPI функции BitBlt()
    Но как это сделать? Может у кого-нибудь есть примерчик?
      Цитата
      Как создать модальное окно с полупрозрачным фоном? (рис)

      А разве это не простой Draw цикл? Он просто берёт на себя управление и не пускает в основную программу, по крайней мере, это более вероятно, чем инициализировать окно, с прозрачностью, да ещё что бы цикл отрисовки остановить...
        Смотри SetLayeredWindowAttributes
          смотрите UpdateLayeredWindow(), но рисовать его придется полностью самому
            Цитата antonn @
            смотрите UpdateLayeredWindow(), но рисовать его придется полностью самому

            Используя SetLayeredWindowAttributes ничего не придется рисовать самому.
              Можно через отдельное окно с полупрозрачностью (SetLayeredWindowAttributes). Можно отрисовать через граф. библиотеку (DirectDraw, OpenGL - насколько я знаю, так часто делают в играх). Есть еще Windows API на тему прозрачного и полупрозрачного рисования, только названия функций не помню.
                Цитата DIS @
                Есть еще Windows API на тему прозрачного и полупрозрачного рисования, только названия функций не помню.

                AlphaBlend/TransparentBlt. Только они здесь неуместны. Что б было как на скриншоте, придется рисовать PNG-маску фона и отрисовывать каждый отдельный контрол самостоятельно: Работа с PNG
                  спасибо
                    B.V., необязательно PNG, можно и bmp, а можно и вручную рисовать как тут, без всяких картинок. Тем более окно наипростейшее.
                    Сообщение отредактировано: TheTrik -
                      Цитата TheTrik @
                      а можно и вручную рисовать как тут, без всяких картинок. Тем более окно наипростейшее

                      Я же не зря написал
                      Цитата B.V. @
                      Что б было как на скриншоте

                      Там текстуры. Будешь процедурно генерировать? Что касается bmp, альфа-канал в RGBQUAD не определен. Зачем использовать то, что не является стандартом и требует специальных средств и API?
                        TheTrik
                        используя SetLayeredWindowAttributes не получится сделать то, что у автора на картинке. Так как эта функция применяет одинаковую альфу ко всему окну. А автору нужно переменную полупрозрачность, чего можно достичь создавая bmp с альфаканалом и скармливая функции мой указанной. Для окна с кнопкой и надписью проблем вообще никаких не возникнет
                          Цитата B.V. @
                          Что касается bmp, альфа-канал в RGBQUAD не определен. Зачем использовать то, что не является стандартом и требует специальных средств и API?

                          AlphaBlend, UpdateLayeredWindow "кушает" именно такой 32-битный Premultiplied RGBA.
                          Цитата B.V. @
                          Там текстуры. Будешь процедурно генерировать?

                          В GDI, GDI+ есть текстурная кисть.
                          Цитата antonn @
                          используя SetLayeredWindowAttributes не получится сделать то, что у автора на картинке.

                          Изначально я не обратил внимание на непрозрачные места. Да, нужно пользоваться UpdateLayeredWindow.
                          Сообщение отредактировано: TheTrik -
                            Цитата TheTrik @
                            AlphaBlend, UpdateLayeredWindow "кушает" именно такой 32-битный Premultiplied RGBA.

                            В Windows Bitmap нет никакого alpha, rtfm: http://en.wikipedia.org/wiki/BMP_file_format
                            Цитата TheTrik @
                            В GDI, GDI+ есть текстурная кисть.

                            Во-первых, GDI затирает альфу нулем. Во-вторых, программная отрисовка может быть оправдана только в двух случаях: оптимизация ресурсоемкости и универсальность отрисовки (например, масштабирование). Если такие задачи стоят перед автором, то -- да. Иначе это получается лишняя работа
                              Цитата B.V. @
                              В Windows Bitmap нет никакого alpha, rtfm: http://en.wikipedia.org/wiki/BMP_file_format

                              Что мешает его хранить там? Это позволяет загружать его через LoadPicture без проблем, не привлекая GDI+ и сторонние библиотеки.
                              http://www.cyberforum.ru/post5555870.html
                              Цитата B.V. @
                              Во-первых, GDI затирает альфу нулем.

                              Нет, и пример тому выше. Все зависит от растровой операции. И это я привел пример на твое высказывание
                              Цитата B.V. @
                              Там текстуры. Будешь процедурно генерировать?
                              Цитата B.V. @
                              Иначе это получается лишняя работа

                              Много ли лишней работы, создать кисть и закрасить ей прямоугольник?
                              Сообщение отредактировано: TheTrik -
                                B.V.
                                Цитата
                                В Windows Bitmap нет никакого alpha

                                конечно нет, уже лет 15 как нет, но используется

                                TheTrik
                                Цитата
                                Нет, и пример тому выше.

                                затирает, поэтому используется лишь еще один шаг с параллельным рисованием на маске для альфы, не смертельно
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:
                                Страницы: (3) [1] 2 3  все


                                Рейтинг@Mail.ru
                                [ Script execution time: 0.1968 ]   [ 18 queries used ]   [ Generated: 4.06.26, 07:26 GMT ]