Страница: 1 |
Страница: 1 |
Вопрос: [VB6]: Прозрачность ОБЪЕКТА (Image)
Добавлено: 05.10.07 19:06
Автор вопроса: »VladikComper« | Web-сайт:
Пишу... сразу скажу: КОНТРОЛ (трудный) и возник вопрос:
Как задать прозрачность плавного появления Image (или PictureBox)?
Вообще, по идеи плавно появляетси рисунок при наведении указателя мыши, но главное: что бы не было _МЕРЦАНИЯ_...
Возникает второй вопрос:
Как бороться с _МЕРЦАНИЕМ_ объектов?
Ну, и, самое важное: у меня аллергия на дополнительные контроллы (особенно в отдельных файлах), ну и не хочу таскать с прогой дополнительные DLL...
Ответы
Всего ответов: 15
Номер ответа: 1
Автор ответа:
Winand
Вопросов: 87
Ответов: 2795
Web-сайт:
Профиль | | #1
Добавлено: 05.10.07 20:32
не пойму откуда мерцание берётся?
плавное появление - это как?
имхо,нужно использовать API AlphaBlend
Смешивать картинку с фоном в нужных пропорциях...
Номер ответа: 2
Автор ответа:
»VladikComper«
ICQ: 419668582
Вопросов: 23
Ответов: 147
Web-сайт:
Профиль | | #2
Добавлено: 05.10.07 20:34
...
не пойдет
а что если фон - другая картинка?
Номер ответа: 3
Автор ответа:
Winand
Вопросов: 87
Ответов: 2795
Web-сайт:
Профиль | | #3
Добавлено: 05.10.07 20:44
так ты картинку другую запихни в другой пикчер-бокс, например
ByVal hdcDest As Long, _
ByVal xDest As Long, _
ByVal yDest As Long, _
ByVal WidthDest As Long, _
ByVal HeightDest As Long, _
ByVal hdcSrc As Long, _
ByVal xSrc As Long, _
ByVal ySrc As Long, _
ByVal WidthSrc As Long, _
ByVal HeightSrc As Long, _
ByRef Blendfunc As As BLENDFUNCTION) As Long
Номер ответа: 4
Автор ответа:
»VladikComper«
ICQ: 419668582
Вопросов: 23
Ответов: 147
Web-сайт:
Профиль | | #4
Добавлено: 05.10.07 20:47
Это функция что делает?
Прозрачность что ли?
Номер ответа: 5
Автор ответа:
Winand
Вопросов: 87
Ответов: 2795
Web-сайт:
Профиль | | #5
Добавлено: 06.10.07 02:26
RtlMoveMemory
Эта функция смешивает изображения
Вот простейший пример от KPD-team
Private Type BLENDFUNCTION
BlendOp As Byte
BlendFlags As Byte
SourceConstantAlpha As Byte
AlphaFormat As Byte
End Type
Private Declare Function AlphaBlend Lib "msimg32.dll" (ByVal hdc As Long, ByVal lInt As Long, ByVal lInt As Long, ByVal lInt As Long, ByVal lInt As Long, ByVal hdc As Long, ByVal lInt As Long, ByVal lInt As Long, ByVal lInt As Long, ByVal lInt As Long, ByVal BLENDFUNCT As Long) As Long
Private Sub Form_Load()
'KPD-Team 2000
'URL: http://www.allapi.net/
'E-Mail: KPDTeam@Allapi.net
Dim BF As BLENDFUNCTION, lBF As Long
'Set the graphics mode to persistent
Picture1.AutoRedraw = True
Picture2.AutoRedraw = True
'API uses pixels
Picture1.ScaleMode = vbPixels
Picture2.ScaleMode = vbPixels
'set the parameters
With BF
.BlendOp = AC_SRC_OVER
.BlendFlags = 0
.SourceConstantAlpha = 128
.AlphaFormat = 0
End With
'AlphaBlend the picture from Picture1 over the picture of Picture2
AlphaBlend Picture2.hdc, 0, 0, Picture2.ScaleWidth, Picture2.ScaleHeight, Picture1.hdc, 0, 0, Picture1.ScaleWidth, Picture1.ScaleHeight, CLng(lBF)
End Sub
SourceConstantAlpha - значение от 0 до 255
hdcSrc - hdc с накладываемым изображением
Номер ответа: 6
Автор ответа:
Winand
Вопросов: 87
Ответов: 2795
Web-сайт:
Профиль | | #6
Добавлено: 06.10.07 02:30
тьфу. хотел написать, что убрал функцию RtlMoveMemory и поменял на cLng
----------
То есть рисуешь куда надо (если надо) картинку фона, затем с помощью alphablend накладываешь туда же другое изображение. Его прозрачность указываешь в SourceConstantAlpha
Номер ответа: 7
Автор ответа:
»VladikComper«
ICQ: 419668582
Вопросов: 23
Ответов: 147
Web-сайт:
Профиль | | #7
Добавлено: 06.10.07 11:47
Мда... Сложно.
Увы, но для контрола никак не годится.
Придется по-старинке...
Номер ответа: 8
Автор ответа:
Winand
Вопросов: 87
Ответов: 2795
Web-сайт:
Профиль | | #8
Добавлено: 06.10.07 13:01
А как по старинке-то? я видимо не совсем понял что нужно...
Номер ответа: 9
Автор ответа:
Mr.Smile
ICQ: 427682013
Вопросов: 14
Ответов: 464
Профиль | | #9
Добавлено: 06.10.07 15:55
Номер ответа: 10
Автор ответа:
»VladikComper«
ICQ: 419668582
Вопросов: 23
Ответов: 147
Web-сайт:
Профиль | | #10
Добавлено: 06.10.07 19:10
Придется по-старинке...
ну... создать PictureClip с постепенным переходом и...
Номер ответа: 11
Автор ответа:
Winand
Вопросов: 87
Ответов: 2795
Web-сайт:
Профиль | | #11
Добавлено: 06.10.07 20:58
ууу... а разве pictureclip - не подпадает под действие "у меня аллергия на дополнительные контроллы (особенно в отдельных файлах)"?
Имхо. альфаблендинг лучше... И места для картинок надо меньше. В ней ничего сложного нет
p.s. а у меня аллергия на файлы которые нельзя грузить из папки с прогой))
Номер ответа: 12
Автор ответа:
Mr.Smile
ICQ: 427682013
Вопросов: 14
Ответов: 464
Профиль | | #12
Добавлено: 06.10.07 21:15
А у меня "аллергия" на OCX и DLL без исходников!
Номер ответа: 13
Автор ответа:
Winand
Вопросов: 87
Ответов: 2795
Web-сайт:
Профиль | | #13
Добавлено: 07.10.07 01:04
Вот накатал решение, в соответствии с моим пониманием траблы.
Мне понравилось, красиво))
Кстати всё оказалось не оч просто...Покопавшись стал вместо BLENDFUNCTION передавать значение типа Long, что привело к некоторым извращениям))
Но иначе почему-то не мог заставить работать. Почему - не понял.
Номер ответа: 14
Автор ответа:
Mr.Smile
ICQ: 427682013
Вопросов: 14
Ответов: 464
Профиль | | #14
Добавлено: 07.10.07 21:17
Действительно красиво! Только если и делать такой Button, то надо ещё проверять WindowFromPoint.
Номер ответа: 15
Автор ответа:
Winand
Вопросов: 87
Ответов: 2795
Web-сайт:
Профиль | | #15
Добавлено: 07.10.07 23:57
WindowFromPoint это проще значительно.
У меня еще приходится проверять,чтоб курсор был в квадрате (0,0)-(60,60)