Есть юзерконтрол, писал я, но почему-то он не работает... наверно потому что писал я :) Вообщем кто знает чего он не рисует, подскажите...
сам он
http://www.webfile.ru/420226
его код
Private Declare Function DrawTransparent Lib "msimg32.dll" Alias "TransparentBlt" (ByVal hdcDest As Long, ByVal nXOriginDest As Long, ByVal nYOriginDest As Long, ByVal nWidthDest As Long, ByVal nHeightDest As Long, ByVal hdcSrc As Long, ByVal nXOriginSrc As Long, ByVal nYOriginSrc As Long, ByVal nWidthSrc As Long, ByVal nHeightSrc As Long, ByVal crTransparent As Long) As Long
Public Function TransparentBlt(ByVal destHDC As Long, ByVal XDest As Long, ByVal YDest As Long, ByVal destWidth As Long, ByVal destHeight As Long, ByVal srcHDC As Long, ByVal XSrc As Long, ByVal YSrc As Long, ByVal srcWidth As Long, ByVal srcHeight As Long, ByVal TransparentColor As Long) As Long
DrawTransparent destHDC, XDest, YDest, destWidth, destHeight, srcHDC, XSrc, ycrc, srcWidth, srcHeight, TransparentColor
End Function
Private Sub UserControl_Show()
UserControl.BackColor = Picture1.Point(0, 0)
Dim clr As Long, w As Long, h As Long
w = Picture1.ScaleWidth
h = Picture1.ScaleHeight
clr = Picture1.Point(0, 0)
Call TransparentBlt(UserControl.hdc, 0, 0, w, h, Picture1.hdc, 0, 0, w, h, clr)
UserControl.Refresh
End Sub
Как в ЮзерКонтроле нарисовать картинку но так чтобы определённый цвет остался прозрачным, не только пока мы в юзерконтроле, но и остался прозрачным когда мы юзерконтрол на форму прилепим. Знаю что у юзерконтрола есть Transparent но мне это не подходит! К примеру я кидаю на контрол Image в котором загружен определёный gif с прозрачностью. Пока мы в юзерконтроле - всё ок, прозрачного цвета в Image не видно, как только рисую контрол на форму - лажа... цвет прозрачный делается не прозрачным Чё делать?
та я рад что тёмыч написал, аналогичный примеров много, там кода в несколько КБ, а задача маленькая, уверен решается в несколько строчек, а не в несколько КБ... Может ты знаешь функцию которая проприсовывает картинку игнорируя определённый цвет?
Солнце, воздух и вода
не помогут никогда.
Только спирт и онанизм
укрепляют организм.
Онанизм наш лучший друг -
развивает мышцы рук,
уменьшает вес му#ей
и расходы на бля#ей.
Контрол - вешь хорошая, когда в исходниках. Ежели не в них - то если не на VB
чё то вы меня растроили... Причём тут контролы или не контролы... Тут чистое API программирование, к примеру, не на контроле, так как на форме нарисовать картинку игнорируя определённый цвет?
'Здесь находятся функции, переменные и типы, необходимые для прорисовки прозрачного фона
'некоторые переменные закоментированны, так как они уже были описанны в модуле Declare
'условием корректной работы этой функции является то, что PictureBox (PicSkin.hdc) из которого мы берем картинку должен
'быть обязательно AutoRedraw = True иначе при определенных условиях формы и того где мы будем вызывать
'эту функцию (Form_Paint или еще где), может некорректно прорисовываться картинка или вообще не прорисовываться
'Завершением работы программы или контрола после использования функции TransparentBlt должна быть функция ClearTransparent
Private Type RECT
Left As Long
Top As Long
Right As Long
Bottom As Long
End Type
Public Declare Function BitBlt Lib "gdi32" (ByVal hDestDC 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 dwRop As Long) As Long
Private Declare Function CreateBitmap Lib "gdi32" (ByVal nWidth As Long, ByVal nHeight As Long, ByVal nPlanes As Long, ByVal nBitCount As Long, lpBits As Any) As Long
Private Declare Function SetBkColor Lib "gdi32" (ByVal hDC As Long, ByVal crColor As Long) As Long
Private Declare Function SelectObject Lib "gdi32" (ByVal hDC As Long, ByVal hObject As Long) As Long
Private Declare Function CreateCompatibleBitmap Lib "gdi32" (ByVal hDC As Long, ByVal nWidth As Long, ByVal nHeight As Long) As Long
Private Declare Function CreateCompatibleDC Lib "gdi32" (ByVal hDC As Long) As Long
Private Declare Function DeleteDC Lib "gdi32" (ByVal hDC As Long) As Long
Private Declare Function DeleteObject Lib "gdi32" (ByVal hObject As Long) As Long
Private nRet As Long, W As Integer, H As Integer
Private MonoMaskDC As Long, hMonoMask As Long
Private MonoInvDC As Long, hMonoInv As Long
Private ResultDstDC As Long, hResultDst As Long
Private ResultSrcDC As Long, hResultSrc As Long
Private hPrevMask As Long, hPrevInv As Long
Private hPrevSrc As Long, hPrevDst As Long
Public Sub TransparentBlt(OutDstDC As Long, DstDC As Long, SrcDC As Long, SrcRect As RECT, DstX As Integer, DstY As Integer, TransColor As Long)
Dim TransColor As Long
W = SrcRect.Right - SrcRect.Left
H = SrcRect.Bottom - SrcRect.Top
 eleteObject MonoMaskDC
 eleteObject MonoInvDC
 eleteObject ResultDstDC
 eleteObject ResultSrcDC
End Sub
этот в код в принципе рисует, но почему-то цвет прозрачный не делает, т.е. рисует без него. Может у кого-то получится этим примером добиться прозрачности на картинке?
Private Declare Function BitBlt Lib "gdi32" (ByVal hDestDC 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 dwRop As Long) As Long
Private Declare Function CreateBitmap Lib "gdi32" (ByVal nWidth As Long, ByVal nHeight As Long, ByVal nPlanes As Long, ByVal nBitCount As Long, lpBits As Any) As Long
Private Declare Function SetBkColor Lib "gdi32" (ByVal hDC As Long, ByVal crColor As Long) As Long
Private Declare Function SelectObject Lib "gdi32" (ByVal hDC As Long, ByVal hObject As Long) As Long
Private Declare Function CreateCompatibleBitmap Lib "gdi32" (ByVal hDC As Long, ByVal nWidth As Long, ByVal nHeight As Long) As Long
Private Declare Function CreateCompatibleDC Lib "gdi32" (ByVal hDC As Long) As Long
Private Declare Function DeleteDC Lib "gdi32" (ByVal hDC As Long) As Long
Private Declare Function DeleteObject Lib "gdi32" (ByVal hObject As Long) As Long
Private nRet As Long, W As Integer, H As Integer
Private MonoMaskDC As Long, hMonoMask As Long
Private MonoInvDC As Long, hMonoInv As Long
Private ResultDstDC As Long, hResultDst As Long
Private ResultSrcDC As Long, hResultSrc As Long
Private hPrevMask As Long, hPrevInv As Long
Private hPrevSrc As Long, hPrevDst As Long
Private Sub TransparentBlt(OutDstDC As Long, DstDC As Long, SrcDC As Long, DstX As Integer, DstY As Integer, DstH As Integer, DstW As Integer, TransColor As Long)
'Dim TransColor As Long
 eleteObject MonoMaskDC
 eleteObject MonoInvDC
 eleteObject ResultDstDC
 eleteObject ResultSrcDC
End Sub
Private Sub UserControl_Show()
'Dim r As RECT
Dim clr As Long
clr = Picture1.Point(1, 1)
UserControl.BackColor = clr
Call TransparentBlt(UserControl.hDC, UserControl.hDC, Picture1.hDC, Picture1.Top, Picture1.Left, Picture1.Height, Picture1.Width, clr)
UserControl.Refresh
End Sub
картинка прорисовывается без того цвета который я задам clr т.е. прозрачная! Осталась 1 трабла поскольку BackStyle = Opaque и по другому никак... а у меня на frmMain лежит Image с картинокй на весь экран, это типа фон, так вот нужно прорисовать на контроле ту чать этой картинки (Image) которую перекрывает UserControl, затем я поверх того что получится прорисую мою картинку (с помощью кода который выше) и всё будет ти топ! Знаю что вроде BitBlt надо использовать, но как именно, вообщем у меня нечего не получилось, немогу вырезать кусочек который перекрывает контрол и прорисовать этот кусочек на контроле. Помогите плиз!!!!