Люди, помогите! Нужен прозрачный фон...

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

Люди, помогите! Нужен прозрачный фон...

Сообщение Boombastic » 26.04.2004 (Пн) 19:36

Привет всем! У меня к вам - вопрос - жизни и смерти :wink:

Например, у меня есть какой-то *.bmp файл,в котором (например) нарисован человек на синем фоне.
?вопрос..

Как сделать так, чтобы при открытии этого файла в PictureBox - этот синий фон можно было бы сделать прозрачным.

Народ, правда, Очень надо!

Заранее благодарен.

С УВ., Boombastic!

Шурик
Самогонщик
Самогонщик
Аватара пользователя
 
Сообщения: 1657
Зарегистрирован: 30.06.2003 (Пн) 13:27
Откуда: из запоя :))))) Матных сообщений: 972

Сообщение Шурик » 26.04.2004 (Пн) 19:41

Странно, неужели щас убивают за VBшный код :lol: :lol: :lol:
А вобще здесь пахнет BitBilt'ом.......
Токо пока чето в голову не приходит как это сделать......

fallen
Новичок
Новичок
 
Сообщения: 30
Зарегистрирован: 06.04.2003 (Вс) 22:06

Сообщение fallen » 27.04.2004 (Вт) 0:11

мне известно три способа:
1. работает только в win2k/xp
Код: Выделить всё
Const LWA_COLORKEY = &H1
Const GWL_EXSTYLE = (-20)
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
Private Sub Form_Load()
    Dim Ret As Long
    Ret = GetWindowLong(Me.hWnd, GWL_EXSTYLE)
    Ret = Ret Or WS_EX_LAYERED
    SetWindowLong Me.hWnd, GWL_EXSTYLE, Ret
    SetLayeredWindowAttributes Me.hWnd, RGB(0, 0, 255), 0, LWA_COLORKEY
End Sub


2. пример валяется где-то на сайте http://www.vbnet.ru называется ScreenMate.zip работает достаточно шустро, во всех виндах

3. используя swsform.ocx. самый простой способ (поскольку не требуется практически ничего), но и самый тормозной.

**Black-Van**
Начинающий
Начинающий
Аватара пользователя
 
Сообщения: 15
Зарегистрирован: 05.05.2004 (Ср) 12:32
Откуда: Эстония

Сообщение **Black-Van** » 05.05.2004 (Ср) 13:48

Мой приятель Bombastic не совсем точно поставил вопрос. Короче нам нужно не зделать фон прозрачным на сквось(ну типа как дыра в форме) нет. Обясняю если скажем загрузить в там Image например фаил формата *.wmf ну типа там векторный то у него небудет заднего фона (или там "квадрата") а вто если загрузить *.bmp то он у него будет.Так вот как убрать одноцветный "квадрат" у *.bmp фаила и всё некокой там прозрачной формы ненадо!
Зарание блогодарен Black-Van
Не обращайте внимания на грамотность.(Каждому своё)

fallen
Новичок
Новичок
 
Сообщения: 30
Зарегистрирован: 06.04.2003 (Вс) 22:06

Сообщение fallen » 05.05.2004 (Ср) 16:09

надеюсь, что понял правильно.
Код: Выделить всё
'This project needs 2 pictureboxes
'Picturebox1 must contain a picture with a lot of black pixels (we're going to use white as transparent color)
Private Declare Function GdiTransparentBlt Lib "gdi32.dll" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal nSrcWidth As Long, ByVal nSrcHeight As Long, ByVal crTransparent As Long) As Boolean
Private Sub Form_Load()
    'KPD-Team 2001
    'URL: http://www.allapi.net/
    'E-Mail: KPDTeam@Allapi.net
    Picture1.AutoSize = True
    'API uses pixels
    Picture1.ScaleMode = vbPixels
    Picture2.ScaleMode = vbPixels
End Sub
Private Sub Picture2_Paint()
    'If we don't call DoEvents first, our transparent image will be completely wrong
    DoEvents
    GdiTransparentBlt Picture2.hdc, 0, 0, Picture2.ScaleWidth, Picture2.ScaleHeight, Picture1.hdc, 0, 0, Picture1.ScaleWidth, Picture1.ScaleHeight, RGB(0, 0, 0)
End Sub

**Black-Van**
Начинающий
Начинающий
Аватара пользователя
 
Сообщения: 15
Зарегистрирован: 05.05.2004 (Ср) 12:32
Откуда: Эстония

Сообщение **Black-Van** » 06.05.2004 (Чт) 9:50

Ура! То что надо спасибо! :lol:
Не обращайте внимания на грамотность.(Каждому своё)


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

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2

    TopList