Проблема с прозрачностью фона компоненты

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

Проблема с прозрачностью фона компоненты

Сообщение IljaO » 19.10.2004 (Вт) 20:05

Помогите! У меня форма с фоновой картинкой, а компоненты типа RadioButton и Frame имеют стандартный серый фон (подбор цветов невозможен) под надписями, что смотрится отвратительно!
В Делфи, например, у компонент есть св-во Transparent background, что делает такой фон прозрачным. Как сделать фон компонент прозрачным?

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 19.10.2004 (Вт) 21:57

Думаю, что никак - рисовать свои им на замену...
Изображение

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Re: Проблема с прозрачностью фона компоненты

Сообщение GSerg » 19.10.2004 (Вт) 22:03

IljaO писал(а):В Делфи, например, у компонент есть св-во Transparent background, что делает такой фон прозрачным.

Вот как раз у этих компонентов и нет этого свойства :)
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Mleha
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 146
Зарегистрирован: 06.10.2004 (Ср) 7:49
Откуда: Ангарск

Сообщение Mleha » 21.10.2004 (Чт) 10:22

Option Explicit
Public Declare Function CreateRectRgn Lib "gdi32" (ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As Long

Public Declare Function GetPixel Lib "gdi32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long) As Long

Public Declare Function CombineRgn Lib "gdi32" (ByVal hDestRgn As Long, ByVal hSrcRgn1 As Long, ByVal hSrcRgn2 As Long, ByVal nCombineMode As Long) As Long
Public Declare Function SetWindowRgn Lib "user32" (ByVal hWnd As Long, ByVal hRgn As Long, ByVal bRedraw As Boolean) As Long

Public Declare Function DeleteObject Lib "gdi32" (ByVal hObject As Long) As Long
Public Const RGN_OR = 2




Public Function lGetRegion(lBackColor As Long, frmM As Object) As Long
Dim lRgn As Long
Dim lSkinRgn As Long
Dim lStart As Long
Dim lX As Long
Dim lY As Long
Dim lHeight As Long
Dim lWidth As Long
Dim ms As Long
lSkinRgn = CreateRectRgn(0, 0, 0, 0)
With frmM
lHeight = .Height / Screen.TwipsPerPixelY
lWidth = .Width / Screen.TwipsPerPixelX
For lX = 0 To lHeight - 1
lY = 0
Do While lY < lWidth
Do While lY < lWidth And GetPixel(.hdc, lY, lX) = lBackColor
lY = lY + 1
Loop

If lY < lWidth Then
lStart = lY
Do While lY < lWidth And GetPixel(.hdc, lY, lX) <> lBackColor
lY = lY + 1
Loop
If lY > lWidth Then lY = lWidth
lRgn = CreateRectRgn(lStart, lX, lY, lX + 1)
CombineRgn lSkinRgn, lSkinRgn, lRgn, RGN_OR
DeleteObject lRgn
End If
Loop
Next
End With
lGetRegion = lSkinRgn
End Function

Public Function ApplySk(ByVal Color As OLE_COLOR, frmM As Object)
Dim lRgn As Long
Screen.MousePointer = 13
lRgn = lGetRegion(Color, frmM)
frmM.BorderStyle = 0
frmM.AutoRedraw = True
SetWindowRgn frmM.hWnd, lRgn, True
DeleteObject lRgn
Screen.MousePointer = vbDefault
End Function
ставь свой цвет и все будет хорошо!

kif
Постоялец
Постоялец
 
Сообщения: 736
Зарегистрирован: 10.12.2001 (Пн) 18:06
Откуда: Украина, Одесса

Сообщение kif » 21.10.2004 (Чт) 10:55

Убери картинку.

Продукт должен быть работающим, а не красивым. Никогда не понимал этого.
Братья и сестры, что вы делаете???
Ведь вы же братья и сестры.

A.A.Z.
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3035
Зарегистрирован: 30.06.2003 (Пн) 13:38

Сообщение A.A.Z. » 21.10.2004 (Чт) 21:07

Может, у человека давно все работает, и он хочет чтобы еще и красиво было :)
Помню, как-то спрашивал про прозрачный текстбокс - все свелось к BS_OWNERDRAW...

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 21.10.2004 (Чт) 21:08

Между прочим, эта BS очень даже :)
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас


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

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

Сейчас этот форум просматривают: Google-бот и гости: 16

    TopList