Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 |

 

  Вопрос: [VB6]: Прозрачность ОБЪЕКТА (Image) Добавлено: 05.10.07 19:06  

Автор вопроса:  »VladikComper« | Web-сайт: vladikcomper.narod.ru | ICQ: 419668582 
Пишу... сразу скажу: КОНТРОЛ (трудный) и возник вопрос:

Как задать прозрачность плавного появления Image (или PictureBox)?


Вообще, по идеи плавно появляетси рисунок при наведении указателя мыши, но главное: что бы не было _МЕРЦАНИЯ_...

Возникает второй вопрос:

Как бороться с _МЕРЦАНИЕМ_ объектов?

Ну, и, самое важное: у меня аллергия на дополнительные контроллы (особенно в отдельных файлах), ну и не хочу таскать с прогой дополнительные DLL...

Ответить

  Ответы Всего ответов: 15  

Номер ответа: 1
Автор ответа:
 Winand



Вопросов: 87
Ответов: 2795
 Web-сайт: winandfx.narod.ru
 Профиль | | #1
Добавлено: 05.10.07 20:32
не пойму откуда мерцание берётся?
плавное появление - это как?
имхо,нужно использовать API AlphaBlend
Смешивать картинку с фоном в нужных пропорциях...

Ответить

Номер ответа: 2
Автор ответа:
 »VladikComper«



ICQ: 419668582 

Вопросов: 23
Ответов: 147
 Web-сайт: vladikcomper.narod.ru
 Профиль | | #2
Добавлено: 05.10.07 20:34
...
не пойдет
а что если фон - другая картинка?

Ответить

Номер ответа: 3
Автор ответа:
 Winand



Вопросов: 87
Ответов: 2795
 Web-сайт: winandfx.narod.ru
 Профиль | | #3
Добавлено: 05.10.07 20:44
так ты картинку другую запихни в другой пикчер-бокс, например

Declare Function AlphaBlend Lib "msimg32.dll" ( _
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-сайт: vladikcomper.narod.ru
 Профиль | | #4
Добавлено: 05.10.07 20:47
Это функция что делает?
Прозрачность что ли?

Ответить

Номер ответа: 5
Автор ответа:
 Winand



Вопросов: 87
Ответов: 2795
 Web-сайт: winandfx.narod.ru
 Профиль | | #5
Добавлено: 06.10.07 02:26
RtlMoveMemory
Эта функция смешивает изображения

Вот простейший пример от KPD-team
Const AC_SRC_OVER = &H0
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-сайт: winandfx.narod.ru
 Профиль | | #6
Добавлено: 06.10.07 02:30
тьфу. хотел написать, что убрал функцию RtlMoveMemory и поменял на cLng
----------
То есть рисуешь куда надо (если надо) картинку фона, затем с помощью alphablend накладываешь туда же другое изображение. Его прозрачность указываешь в SourceConstantAlpha

Ответить

Номер ответа: 7
Автор ответа:
 »VladikComper«



ICQ: 419668582 

Вопросов: 23
Ответов: 147
 Web-сайт: vladikcomper.narod.ru
 Профиль | | #7
Добавлено: 06.10.07 11:47
Мда... Сложно.
Увы, но для контрола никак не годится.
Придется по-старинке...

Ответить

Номер ответа: 8
Автор ответа:
 Winand



Вопросов: 87
Ответов: 2795
 Web-сайт: winandfx.narod.ru
 Профиль | | #8
Добавлено: 06.10.07 13:01
А как по старинке-то? я видимо не совсем понял что нужно...

Ответить

Номер ответа: 9
Автор ответа:
 Mr.Smile



ICQ: 427682013 

Вопросов: 14
Ответов: 464
 Профиль | | #9 Добавлено: 06.10.07 15:55
Мда... Сложно.
Что-ж там сложного-то? Одна API-функция...
Увы, но для контрола никак не годится.
Ещё как годится! :) Кстати, это ты к своему ListBox'у приделать эффекты прозрачности хочешь?
Придется по-старинке...
Действительно, это как??

Ответить

Номер ответа: 10
Автор ответа:
 »VladikComper«



ICQ: 419668582 

Вопросов: 23
Ответов: 147
 Web-сайт: vladikcomper.narod.ru
 Профиль | | #10
Добавлено: 06.10.07 19:10
Придется по-старинке...
ну... создать PictureClip с постепенным переходом и...

Ответить

Номер ответа: 11
Автор ответа:
 Winand



Вопросов: 87
Ответов: 2795
 Web-сайт: winandfx.narod.ru
 Профиль | | #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-сайт: winandfx.narod.ru
 Профиль | | #13
Добавлено: 07.10.07 01:04
http://slil.ru/24945141

Вот накатал решение, в соответствии с моим пониманием траблы.
Мне понравилось, красиво=)))

Кстати всё оказалось не оч просто...Покопавшись стал вместо BLENDFUNCTION передавать значение типа Long, что привело к некоторым извращениям))
Но иначе почему-то не мог заставить работать. Почему - не понял.

Ответить

Номер ответа: 14
Автор ответа:
 Mr.Smile



ICQ: 427682013 

Вопросов: 14
Ответов: 464
 Профиль | | #14 Добавлено: 07.10.07 21:17
Действительно красиво! :) Только если и делать такой Button, то надо ещё проверять WindowFromPoint. ;)

Ответить

Номер ответа: 15
Автор ответа:
 Winand



Вопросов: 87
Ответов: 2795
 Web-сайт: winandfx.narod.ru
 Профиль | | #15
Добавлено: 07.10.07 23:57
WindowFromPoint это проще значительно.
У меня еще приходится проверять,чтоб курсор был в квадрате (0,0)-(60,60)

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам