Я столкнулся с такой проблемой:
На форме есть рисунок, как сделать так чтобы в тех местах где красный цвет
Рисунка красный – форма становилась прозрачной.
Заранее благодарен!
Pashenko, всё это правильно, я на этом примере учился, о работает верно... но и подглючно названы имена переменных: Y измеряет расстояние по горизонтали, а X - по вертикали. Присмотритесь повнимательнее к функции lGetRegion:
lY = lWidth
Но всё работает, пртензий нет. А... есть ещё один способ обрезать форму по картинке, и при этом НЕ использовать регионы вообще:
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
Const GWL_EXSTYLE = (-20)
Const WS_EX_LAYERED = &H80000
Const LWA_ALPHA = &H2
Const LWA_COLORKEY = &H1
Dim Ret As Long
Ret = GetWindowLong(Me.hWnd, GWL_EXSTYLE)
Ret = Ret Or WS_EX_LAYERED
SetWindowLong hWnd, GWL_EXSTYLE, Ret
SetLayeredWindowAttributes hWnd, RGB(0, 0, 0), 255, LWA_COLORKEY Or LWA_ALPHA
Этот пример будет работать только в 2k, XP. Здесь черный цвет с формы будет обрезан - регулируется RGB. Зато дополнительно можно делать полупрозрачность, устанавливая параметр bAlpha от 0 до 255... Если добавить к примеру с регионами определение версии Win и этот код, то можно ускорить рисование окон в 2k,XP!