Как накрыть полупрозрачным фоном

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

Как накрыть полупрозрачным фоном

Сообщение aleksmir » 10.01.2010 (Вс) 1:08

Здравствуйте!

Как накрыть сверху все элементы формы полупрозрачным фоном (можно даже просто 50% белого)?

Я нашёл пример с использованием функции AlphaBlend: Пример, но он соединяет две картинки, но не делает другие контролы формы полупрозрачными.

Может быть можно как-то сделать программно снимок формы, поместить на PictureBox и соединить с белым фоном?
Тогда как сделать снимок?

aleksmir
Обычный пользователь
Обычный пользователь
 
Сообщения: 88
Зарегистрирован: 10.08.2009 (Пн) 13:17

Re: Как накрыть полупрозрачным фоном

Сообщение aleksmir » 10.01.2010 (Вс) 1:28

Ещё нашел пример, как делать полупрозрачной форму . Это в принципе уже вариант, т.к. я смогу форму накрыть сверху другой формой, но это слишком громоздстко. Я пробовал форму накрыть просто элементом PictureBox, но на PictureBox функции этого примера почему-то не действуют.

MIT
Мега гуру
Мега гуру
Аватара пользователя
 
Сообщения: 2211
Зарегистрирован: 17.09.2006 (Вс) 22:46

Re: Как накрыть полупрозрачным фоном

Сообщение MIT » 10.01.2010 (Вс) 1:46

aleksmir писал(а):Тогда как сделать снимок?
WM_PRINT, но прокатит не со всеми контролами.
Изображение
You can change your face, but can`t change your mind. No matter what you do.
Создайте еще более понятный интерфейс и мир создаст еще более тупого юзера. (с) Баш

aleksmir
Обычный пользователь
Обычный пользователь
 
Сообщения: 88
Зарегистрирован: 10.08.2009 (Пн) 13:17

Re: Как накрыть полупрозрачным фоном

Сообщение aleksmir » 10.01.2010 (Вс) 3:40

Решил всё-таки накрыть формой, потому что возиться некогда. В принципе работает нормально. Код формы примерно вот такой получился (на форме таймер timStart):

Код: Выделить всё
' КОНСТАНТЫ: для работы с прозрачностью
  Private Const LWA_COLORKEY = &H1
  Private Const LWA_ALPHA = &H2
  Private Const GWL_EXSTYLE = (-20)
  Private Const WS_EX_LAYERED = &H80000

' ДЕКЛАРАЦИИ: для работы с окнами
  Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long) As Long
  Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
  Private Declare Function SetLayeredWindowAttributes Lib "user32" (ByVal hWnd As Long, ByVal crKey As Long, ByVal bAlpha As Byte, ByVal dwFlags As Long) As Long

' ПРОЦЕДУРА: установка степени прозрачности
' lngWnd - дискриптор окна
' bytLayer - степень прозрачности (0-255)
Private Sub SetTransparent(lngWnd As Long, bytLayer As Byte)
  ' Переменные: значения
    Dim lngRet As Long ' результат
  ' Код
    ' определение стиля нужного окна
    lngRet = GetWindowLong(lngWnd, GWL_EXSTYLE)
    ' установка окну стиля "Заслоенный"
    SetWindowLong lngWnd, GWL_EXSTYLE, (lngRet Or WS_EX_LAYERED)
    ' установка прозрачности окну
    SetLayeredWindowAttributes lngWnd, 0, bytLayer, LWA_ALPHA
End Sub

' СОБЫТИЕ: загрузка формы
Private Sub Form_Load()
  ' Код
    ' установка степени прозрачности
    SetTransparent Me.hWnd, 200
    ' установка размеров
    With cm_Main.typRelBox
      Me.Move 0, cm.TitleBarHeight(.objCall), .objCall.ScaleWidth, .objCall.ScaleHeight
    End With
    ' запуск таймера старта
    timStart.Enabled = True
End Sub

Vova_2581
Постоялец
Постоялец
 
Сообщения: 376
Зарегистрирован: 10.01.2010 (Вс) 18:08

Re: Как накрыть полупрозрачным фоном

Сообщение Vova_2581 » 10.01.2010 (Вс) 18:26

что это за обьект - cm_Main.typRelBox?

aleksmir
Обычный пользователь
Обычный пользователь
 
Сообщения: 88
Зарегистрирован: 10.08.2009 (Пн) 13:17

Re: Как накрыть полупрозрачным фоном

Сообщение aleksmir » 24.01.2010 (Вс) 19:50

Vova_2581 писал(а):что это за обьект - cm_Main.typRelBox?


Это просто глобальный тип данных для обмена значениями между формами.
Можете создать любой другой вместо него или просто использовать глобальные переменные.


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

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

Сейчас этот форум просматривают: AhrefsBot и гости: 19

    TopList