Resumen Seleccionar elemento de un listbox al pasar el ratón por encima   (2 mensajes )

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



Resumen Resumen

Visual Basic Página de Visual Basic

Página principal Página principal

www.jrubi.com