At 21:46 10/05/98 +0200, you wrote:
>Otra preguntita...
>¿Es posible hacer que los items de un listbox se seleccionen con tan sólo
pasar el ratón por encima?
>
Declarar :
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA"
(ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As
Any) As Long
Private Const LB_ITEMFROMPOINT = &H1A9
En el evento MouseMove del ListBox :
Dim lIndex As Long
Dim lXPoint As Long
Dim lYPoint As Long
If Button = 0 Then ' si no hay ningún botón presionado
lXPoint = CLng(X / Screen.TwipsPerPixelX)
lYPoint = CLng(Y / Screen.TwipsPerPixelY)
With List1
' coger el elemento seleccionado de la lista
lIndex = SendMessage(.hwnd, LB_ITEMFROMPOINT, 0, ByVal ((lYPoint *
65536) + lXPoint))
.ListIndex = lIndex
End With
End If
Un saludo.
_________________________________________________
José Rubí de la Vega
E-mail : jrubi@arrakis.es
WWW : http://www.arrakis.es/~jrubi
Podrás encontrar información sobre VB, la lista
VB-ESP y un resumen de los mensajes de la misma
ICQ # : 10939566
>¿Es posible hacer que los items de un listbox se seleccionen con tan sólo
pasar el ratón por encima?
>
Para que además haga scroll automático al colocar el ratón sobre la parte
superior o inferior del listbox :
Declarar en el formulario:
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA"
(ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As
Any) As Long
Private Const LB_ITEMFROMPOINT = &H1A9
Private Const LB_GETITEMHEIGHT = &H1A1
Dim Direccion As Integer
En el MouseMove del ListBox :
Dim lIndex As Long, lXPoint As Long, lYPoint As Long, lHeight As Long
If Button = 0 Then ' si no hay ningún botón presionado
'mirar el alto de un elemento
lHeight = SendMessage(List1.hwnd, LB_GETITEMHEIGHT, 0, 0&)
If Y < lHeight And List1.TopIndex > 0 Then
Direccion = -1
Timer1.Enabled = True
Else
If Y > (List1.Height - 100 - lHeight) And List1.ListIndex <>
List1.ListCount - 1 Then
Direccion = 1
Timer1.Enabled = True
Else
Timer1.Enabled = False
lXPoint = CLng(X / Screen.TwipsPerPixelX)
lYPoint = CLng(Y / Screen.TwipsPerPixelY)
With List1
' coger el elemento seleccionado de la lista
lIndex = SendMessage(.hwnd, LB_ITEMFROMPOINT, 0, ByVal
((lYPoint * 65536) + lXPoint))
.ListIndex = lIndex
End With
End If
End If
End If
En un timer que has de colocar :
If Direccion < 0 Then
If List1.ListIndex > 0 Then
List1.ListIndex = List1.ListIndex - 1
Else
Timer1.Enabled = False
End If
Else
If List1.ListIndex < List1.ListCount - 1 Then
List1.ListIndex = List1.ListIndex + 1
Else
Timer1.Enabled = False
End If
End If
Hay que acerar mucho el ratón a los extermos para que haga scroll. Puedes
probar y modificar las condiciones para que tenga un rango más amplio.
Un saludo.
_________________________________________________
José Rubí de la Vega
E-mail : jrubi@arrakis.es
WWW : http://www.arrakis.es/~jrubi
Podrás encontrar información sobre VB, la lista
VB-ESP y un resumen de los mensajes de la misma
ICQ # : 10939566