
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[216.73.216.3] |
![]() |
|
Сообщ.
#1
,
|
|
|
Вот многие начинают спрашивать, как сделать так, чтобы сама форма была прозрачной полностью, а контролы на ней не прозрачные, ну или полупрозрачные... вот накатал примерчик:
![]() ![]() 'Нужно выставить у формы св-во BorderStyle = 0 'и чтобы кнопка формы отображалась на панели задач, нужно выставить св-во ShowInTaskbar = true Option Explicit Private Declare Function CreateRectRgn Lib "gdi32" (ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As Long Private Declare Function CombineRgn Lib "gdi32" (ByVal hDestRgn As Long, ByVal hSrcRgn1 As Long, ByVal hSrcRgn2 As Long, ByVal nCombineMode As Long) As Long Private Declare Function SetWindowRgn Lib "user32" (ByVal hWnd As Long, ByVal hRgn As Long, ByVal bRedraw As Boolean) As Long Private Declare Function DeleteObject Lib "gdi32" (ByVal hObject As Long) As Long 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 crey As Byte, ByVal bAlpha As Byte, ByVal dwFlags As Long) As Long Private Const GWL_EXSTYLE = -20 Private Const WS_EX_LAYERED = &H80000 Private Const LWA_ALPHA = &H2& Private Const RGN_OR = 2 Private Sub TranspForm(ByVal frm As Form, Transparency As Integer) ' значение Transparency может быть от 0 до 255 (0 - полностью прозрачная, 255 - непрозрачная) Dim WindowRgn As Long ' тут будет храниться регион, по которому в последствии будет вырезано окно Dim ctrlRgn As Long ' тут будет храниться регион текущео конрола Dim ctrl As Control ' текущий контрол Dim NormalWindowStyle As Long WindowRgn = CreateRectRgn(0, 0, 0, 0) ' создаем пустой регион On Error Resume Next For Each ctrl In frm.Controls ' перебираем все контролы на форме ctrlRgn = CreateRectRgn(frm.ScaleX(ctrl.Left, frm.ScaleMode, vbPixels), frm.ScaleY(ctrl.Top, frm.ScaleMode, vbPixels), frm.ScaleX(ctrl.Left + ctrl.Width, frm.ScaleMode, vbPixels), frm.ScaleY(ctrl.Top + ctrl.Height, frm.ScaleMode, vbPixels)) ' создаем регион текущего контрола CombineRgn WindowRgn, WindowRgn, ctrlRgn, RGN_OR ' комбинируем его с регионом WindowRgn Next SetWindowRgn frm.hWnd, WindowRgn, True ' вырезаем окно по региону WindowRgn DeleteObject ctrlRgn On Error GoTo win98 NormalWindowStyle = GetWindowLong(Me.hWnd, GWL_EXSTYLE) SetWindowLong Me.hWnd, GWL_EXSTYLE, NormalWindowStyle Or WS_EX_LAYERED SetLayeredWindowAttributes Me.hWnd, 0, 255, LWA_ALPHA SetLayeredWindowAttributes Me.hWnd, 0, (255 * Transparency) / 100, LWA_ALPHA win98: End Sub Private Sub Form_Load() TranspForm Me, 50 ' вызываем ф-ию которая делает форму прозрачной, а элементы на ней полупрозрачными End Sub P.S. Есть какие нибудь предложения по поводу кода? |
Сообщ.
#2
,
|
|
|
Так по моему эта тема давно уже обсуждалась, не помню как там насчет контролов, но если насчет кода то посмотрю,спасибо. А так - это уже мало интересно, пройдено.
|
![]() |
Сообщ.
#3
,
|
|
А где полупрозрачность ???
|
![]() |
Сообщ.
#4
,
|
|
Цитата AndreyMp @ Так по моему эта тема давно уже обсуждалась, не помню как там насчет контролов, но если насчет кода то посмотрю,спасибо. А так - это уже мало интересно, пройдено. Это может для тебя пройдено. Для новичков еще все впереди ![]() ![]() |
Сообщ.
#5
,
|
|
|
Ну ЭТО я еще не успел посмотреть. Но если интнресует то у меня есть рабочий проект, не мой, но проверенный. Откуда скачал не помню, очень давно это было.
|
Сообщ.
#6
,
|
|
|
Посылаю,но это не мой проект, но проверенно рабочий. Еще раз напоминаю, что уже не помню откуда скачал.Может быть и с Вашего форума. Ище раз извините за плагиат.Но у меня есть и свое по этому поводу,пока не решаюсь отправить поскольку не доработано еще.
Добавлено SCINER а в факе неужели этого нет. Тогда отправь этот примерчик туда. Не так это и сложно, что бы проблему строить. Прикреплённый файл ![]() |
Сообщ.
#7
,
|
|
|
AndreyMp, ты походу вообще не понял о чем идет речь! ты дал пример использования полупрозрачности!!!
Цитата SCINER @ А где полупрозрачность ??? Ну это если кому надо, сами приделают... ![]() Добавлено Обновил код, теперь есть и полупрозрачность! |