Прозрачность...

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

Прозрачность...

Сообщение Shasha » 17.11.2005 (Чт) 17:19

Подскажите как сделать форму прозрачной, но что бы при этом рисунок в пикчербоексе не изменялся(не становился прозрачным).
примеры нашол-вся форма и со всеми элементами становится прозрачной...

keks-n
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2509
Зарегистрирован: 19.09.2005 (Пн) 17:17
Откуда: г. Москва

Сообщение keks-n » 17.11.2005 (Чт) 17:51

От региона формы откусываешь регион твоего PictureBox'а, и работаешь с оставшимся регионом. Регион PictureBox'а это уже не затронет.

Shasha
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 106
Зарегистрирован: 08.11.2005 (Вт) 15:09

Сообщение Shasha » 17.11.2005 (Чт) 18:00

keks-n,что такое регион?
можно по подробнее?

keks-n
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2509
Зарегистрирован: 19.09.2005 (Пн) 17:17
Откуда: г. Москва

Сообщение keks-n » 17.11.2005 (Чт) 18:13

Где-то статья валялась, щас поищу.

Shasha
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 106
Зарегистрирован: 08.11.2005 (Вт) 15:09

Сообщение Shasha » 17.11.2005 (Чт) 18:15

keks-n, хорошо бы.
если не найдётся-примерно опиши.

keks-n
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2509
Зарегистрирован: 19.09.2005 (Пн) 17:17
Откуда: г. Москва

Сообщение keks-n » 17.11.2005 (Чт) 18:28

Слеплено на скорую руку из какого-то оч. длинного примера.
На форме Picture1
В форму:
Код: Выделить всё

Option Explicit
Private Declare Function SetWindowRgn Lib "user32" (ByVal hWnd As Long, ByVal Hrgn As Long, ByVal bRedraw As Boolean) As Long
Private Declare Function CreateRectRgn Lib "gdi32" (ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As Long
Private Declare Function CombineRgn Lib "gdi32" (ByVal hDestRgn As Long, ByVal hSrcRgn1 As Long, ByVal hSrcRgn2 As Long, ByVal nCombineMode As Long) As Long
Private Const RGN_DIFF = 4
Private Const RGN_OR = 2


Private Sub Form_Load()
RebuildWindowRgn
End Sub

Sub RebuildWindowRgn()
Dim FullRgn As Long
Dim Rgn As Long
Form1.ScaleMode = 3
FullRgn = CreateRectRgn(0, 0, Me.Width, Me.Height)
Rgn = CreateRectRgn(0, 0, Me.Width, Me.Height)
CombineRgn FullRgn, FullRgn, Rgn, RGN_DIFF
Rgn = CreateRectRgn(Picture1.Left + 2, (Picture1.Top + 22), (Picture1.Left + Picture1.Width + 2), (Picture1.Top + Picture1.Height + 22))
CombineRgn FullRgn, FullRgn, Rgn, RGN_OR
SetWindowRgn Form1.hWnd, FullRgn, True
End Sub


Форма прозрачна а PictureBox-нет, или тебе не так надо?

Shasha
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 106
Зарегистрирован: 08.11.2005 (Вт) 15:09

Сообщение Shasha » 17.11.2005 (Чт) 18:43

keks-n, именно так!
а как мона сделать что бы мышкой этот рисунок таскать?
код для передвижения формы не походит.

keks-n
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2509
Зарегистрирован: 19.09.2005 (Пн) 17:17
Откуда: г. Москва

Сообщение keks-n » 17.11.2005 (Чт) 22:02

Делаешь стандартный Drag&Drop по форме, а потом RebuildWndRegion(или какая там функция была?), тока параметры формы:
Код: Выделить всё

Me.Top = 0
Me.Left = 0
Me.Width = Screen.Width
Me.Height = Screen.Height

И ты таскаешь как-бы по форме.

А еще можно, когда левая кнопка зажата на PictureBox'е , отслеживать передвижение мыши и двигать форму вместе с ней, что на мой взгляд ЛУЧШЕ. :D

Могёт быть Щас напишу код.

keks-n
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2509
Зарегистрирован: 19.09.2005 (Пн) 17:17
Откуда: г. Москва

Сообщение keks-n » 17.11.2005 (Чт) 22:17

От он код:

Код: Выделить всё
Option Explicit
Private Declare Function SetWindowRgn Lib "user32" (ByVal hWnd As Long, ByVal Hrgn As Long, ByVal bRedraw As Boolean) As Long
Private Declare Function CreateRectRgn Lib "gdi32" (ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As Long
Private Declare Function CombineRgn Lib "gdi32" (ByVal hDestRgn As Long, ByVal hSrcRgn1 As Long, ByVal hSrcRgn2 As Long, ByVal nCombineMode As Long) As Long
Private Const RGN_DIFF = 4
Private Const RGN_OR = 2
'Именилось это:
'------------------------------------------------
Dim Drop As Boolean
'------------------------------------------------
Public Sub RebuildWindowRgn()
Dim FullRgn As Long
Dim Rgn As Long
Me.ScaleMode = 3
FullRgn = CreateRectRgn(0, 0, Me.Width, Me.Height)
Rgn = CreateRectRgn(0, 0, Me.Width, Me.Height)
CombineRgn FullRgn, FullRgn, Rgn, RGN_DIFF

Rgn = CreateRectRgn(Picture1.Left + 2, (Picture1.Top + 22), (Picture1.Left + Picture1.Width + 2), (Picture1.Top + Picture1.Height + 22))
CombineRgn FullRgn, FullRgn, Rgn, RGN_OR
SetWindowRgn Me.hWnd, FullRgn, True
End Sub


Private Sub Form_Load()
RebuildWindowRgn
End Sub
'И это:
'---------------------------------------------------
Private Sub Picture1_MouseDown(Button As Integer, Shift As Integer, x As Single, y As Single)
Drop = True
End Sub

Private Sub Picture1_MouseMove(Button As Integer, Shift As Integer, x As Single, y As Single)
If Drop Then
Me.ScaleMode = 1
Me.Left = Me.Left + x
Me.Top = Me.Top + y
End If
End Sub

Private Sub Picture1_MouseUp(Button As Integer, Shift As Integer, x As Single, y As Single)
Drop = False
End Sub
'------------------------------------------------



Форма та же.


З.Ы. Двигается немного криво, но наверное сам поправишь, если надо(ничего ведь страшного в таскании за верхний левый угол нет :lol: )

Shasha
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 106
Зарегистрирован: 08.11.2005 (Вт) 15:09

Сообщение Shasha » 18.11.2005 (Пт) 12:09

keks-n, использовал последний код. недостатком является что за угол, покапаюсь в коде мож чего и нашкребу...
у пикчербока поставил в бордерстайл-0 и апперансе -0 вроде чисто картинка, но как сделать что бы область пикчер бокса была прозрачной???

keks-n
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2509
Зарегистрирован: 19.09.2005 (Пн) 17:17
Откуда: г. Москва

Сообщение keks-n » 19.11.2005 (Сб) 12:37

Прозрачной? Мдя, когда-то долго с этим парился(пытался сделать игруху графическими средствами VB, но перешел на DirectX).

В твоём случае надо от PictureBox'а откусывать регионы, пока не достигнешь перозрачности фона.

З. Ы. Не знаешь, что с форумом вчера было? Писал, что к базе данных не могёт законнектиться.

keks-n
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2509
Зарегистрирован: 19.09.2005 (Пн) 17:17
Откуда: г. Москва

Сообщение keks-n » 19.11.2005 (Сб) 12:40

Прозрачной? Мдя, когда-то долго с этим парился(пытался сделать игруху графическими средствами VB, но перешел на DirectX).

В твоём случае надо от PictureBox'а откусывать регионы, пока не достигнешь перозрачности фона.

З. Ы. Не знаешь, что с форумом вчера было? Писал, что к базе данных не могёт законнектиться.

keks-n
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2509
Зарегистрирован: 19.09.2005 (Пн) 17:17
Откуда: г. Москва

Сообщение keks-n » 19.11.2005 (Сб) 12:40

Прозрачной? Мдя, когда-то долго с этим парился(пытался сделать игруху графическими средствами VB, но перешел на DirectX).

В твоём случае надо от PictureBox'а откусывать регионы, пока не достигнешь перозрачности фона.

З. Ы. Не знаешь, что с форумом вчера было? Писал, что к базе данных не могёт законнектиться.

keks-n
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2509
Зарегистрирован: 19.09.2005 (Пн) 17:17
Откуда: г. Москва

Сообщение keks-n » 19.11.2005 (Сб) 12:41

Прозрачной? Мдя, когда-то долго с этим парился(пытался сделать игруху графическими средствами VB, но перешел на DirectX).

В твоём случае надо от PictureBox'а откусывать регионы, пока не достигнешь перозрачности фона.

З. Ы. Не знаешь, что с форумом вчера было? Писал, что к базе данных не могёт законнектиться.

keks-n
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2509
Зарегистрирован: 19.09.2005 (Пн) 17:17
Откуда: г. Москва

Сообщение keks-n » 19.11.2005 (Сб) 12:41

Прозрачной? Мдя, когда-то долго с этим парился(пытался сделать игруху графическими средствами VB, но перешел на DirectX).

В твоём случае надо от PictureBox'а откусывать регионы, пока не достигнешь перозрачности фона.

З. Ы. Не знаешь, что с форумом вчера было? Писал, что к базе данных не могёт законнектиться.

keks-n
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2509
Зарегистрирован: 19.09.2005 (Пн) 17:17
Откуда: г. Москва

Сообщение keks-n » 19.11.2005 (Сб) 13:04

Не могу прибить повторы поста :cry: :cry: :cry:
МОДЕРЫ убейте ИХ!

keks-n
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2509
Зарегистрирован: 19.09.2005 (Пн) 17:17
Откуда: г. Москва

Сообщение keks-n » 24.11.2005 (Чт) 21:45

Shasha писал(а):keks-n, использовал последний код. недостатком является что за угол, покапаюсь в коде мож чего и нашкребу...
у пикчербока поставил в бордерстайл-0 и апперансе -0 вроде чисто картинка, но как сделать что бы область пикчер бокса была прозрачной???


http://bbs.vbstreets.ru/viewtopic.php?p=159683#159683


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

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

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

    TopList