Visual Basic - Evento de pasar el mouse por encima del combo?

Life is soft - evento anual de software empresarial
 
Vista:

Evento de pasar el mouse por encima del combo?

Publicado por gabriel (7 intervenciones) el 04/07/2001 10:46:10
Hola. Queria saber cual es el evento que se ejecuta cuando desplegamos un combo y vamos pasando el mouse por encima de los elementos del combo (que es cuando se van poniendo en azul segun estamos encima de uno u otro), para asi sacar un tooltiptext que se corresponda al elemento del combo sobre el cual estamos, pero sin pinchar sobre el, simplemente pasando el ratón por encima. Es para mostrar un tooltiptext para aquellos elementos del combo que son demasiado grandes y no se leen enteros en el combo. Gracias...
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Evento de pasar el mouse por encima del combo?

Publicado por Erik (77 intervenciones) el 08/07/2001 16:40:50
Te mando la respuesta de dos o tres veces, que es un poco larga...

No existe tal evento. La única posibilidad es interceptar los mensajes ayudándote de la API. Escribe lo siguiente en un módulo:

Public Type POINTAPI
x As Long
y As Long
End Type
Public Type RECT
Left As Long
Top As Long
Right As Long
Bottom As Long
End Type
Public Type Size
cx As Long
cy As Long
End Type
Public Const GWL_WNDPROC = (-4)
Public Const WM_CTLCOLORLISTBOX = &H134
Public oldWndProc As Long
Public iPaso As Single
Public Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Public Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Public Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long
Public Declare Function GetWindowRect Lib "user32" (ByVal hwnd As Long, lpRect As RECT) As Long
Public Declare Function GetTextExtentPoint Lib "gdi32" Alias "GetTextExtentPointA" (ByVal hdc As Long, ByVal lpszString As String, ByVal cbString As Long, lpSize As Size) As Long

Sigue...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Evento de pasar el mouse por encima del combo?

Publicado por Erik (77 intervenciones) el 08/07/2001 16:45:14
En el mismo módulo, pon también esta función:

Function NuevoWndProc(ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Dim curPos As POINTAPI
Dim cbIndice As Integer
Dim cbRect As RECT
If Form1.Combo1 <> "" Then
If wMsg = WM_CTLCOLORLISTBOX Then
GetCursorPos curPos
GetWindowRect Form1.Combo1.hwnd, cbRect
cbIndice = Int((curPos.y - 1 - cbRect.Bottom) / iPaso)
Form1.MostrarToolTip Form1.Combo1.List(cbIndice)
End If
End If
NuevoWndProc = CallWindowProc(oldWndProc, hwnd, wMsg, wParam, lParam)
End Function

Créate un formulario en el cual debes poner un combo (Combo1) y un PictureBox (picToolText). Ajusta las siguientes propiedades del PictureBox:

Name=picToolText
Visible=False
Appearance=0 (Flat)
BackColor=&H80000018&

Sigue...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Evento de pasar el mouse por encima del combo?

Publicado por Erik (77 intervenciones) el 08/07/2001 16:46:46
Ya terminamos. Escribe el siguiente código en el formulario:

Private Sub Combo1_Click()
Me.picToolText.Visible = False
End Sub

Private Sub Form_Load()
Dim tamText As Size

Set Me.Font = Combo1.Font
GetTextExtentPoint Me.hdc, "A", 1, tamText
iPaso = tamText.cy

oldWndProc = SetWindowLong(Combo1.hwnd, GWL_WNDPROC, AddressOf NuevoWndProc)

End Sub



Private Sub Form_Unload(Cancel As Integer)

Call SetWindowLong(Combo1.hwnd, GWL_WNDPROC, oldWndProc)

End Sub

Public Sub MostrarToolTip(sTexto As String)

With picToolText
Set .Font = Me.Font
.Cls
.Width = Me.TextWidth(sTexto) + 100
.Height = Combo1.Height
picToolText.Print sTexto
.Visible = True
.Left = Me.Combo1.Left
.Top = Me.Combo1.Top
End With

End Sub

Espero que te sirva. Un saludo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar