Na formulß°
si p°idejte ListBox a prvek Image. Do ListBoxu zadejte pßr polo₧ek. Do prvku
Image si naΦt∞te obrßzek, kter² chcete pou₧φt jako pozadφ pro ListBox. Do
modulu zapiÜte:
Public
gBGBrush As Long
Public Declare Function CreatePatternBrush Lib "gdi32" _
(ByVal hBitmap As Long) As Long
Public Declare Function DeleteObject Lib "gdi32" _
(ByVal hObject As Long) As Long
Private Declare Function SetBkMode Lib "gdi32" _
(ByVal hdc As Long, ByVal nBkMode As Long) As Long
Private Const WM_CTLCOLORLISTBOX = &H134
Nynφ je
t°eba modifikovat udßlosti Load a Unload formulß°e:
Private
Sub Form_Load()
Image1.Visible = False
gBGBrush = CreatePatternBrush(Image1.Picture.Handle)
oldWindowProc = SetWindowLong(Me.hWnd, GWL_WNDPROC, _
AddressOf NewWindowProc)
End Sub
Private Sub Form_Unload(Cancel As Integer)
SetWindowLong Me.hWnd, GWL_WNDPROC, oldWindowProc
DeleteObject gBGBrush
End Sub
Poslednφm krokem je modifikace vlastnφ procedury, kterß bude zpracovßvat
zprßvy obdr₧enΘ z Windows:
Public Function
NewWindowProc(ByVal hWnd As Long, _
ByVal uMsg As Long, ByVal wParam As Long, _
ByVal lParam As Long) As Long
Debug.Print
"&H" & Hex(uMsg), wParam, lParam
If
uMsg = WM_CTLCOLORLISTBOX And gBGBrush <> 0 Then
SetBkMode wParam, 1
'Tisk textu transparentn∞
NewWindowProc = gBGBrush
Else
NewWindowProc = CallWindowProc(oldWindowProc,
hWnd, _
uMsg, wParam, lParam)
End If
End Function
Nynφ
projekt ulo₧te a potΘ spus¥te. Pokud je vÜe v po°ßdku, tak ListBox mß jako
pozadφ obrßzek nata₧en² jako pozadφ. |