Visual Basic Foro

General => Códigos - Aportes - Recursos => Mensaje iniciado por: LeandroA en Diciembre 17, 2012, 02:45:39 am

Título: Cusor mano en controles
Publicado por: LeandroA en Diciembre 17, 2012, 02:45:39 am
Una funcion para poner el cursor de la manito en los controles.
Código: (VB) [Seleccionar]
Option Explicit
Private Type GUID
    Data1 As Long
    Data2 As Integer
    Data3 As Integer
    Data4(7) As Byte
End Type
Private Type PicBmp
    Size As Long
    type As Long
    hBmp As Long
    hPal As Long
    Reserved As Long
End Type

Private Declare Function OleCreatePictureIndirect Lib "olepro32.dll" (PicDesc As PicBmp, RefIID As GUID, ByVal fPictureOwnsHandle As Long, IPic As IPicture) As Long
Private Declare Function LoadCursor Lib "user32" Alias "LoadCursorA" (ByVal hInstance As Long, ByVal lpCursorName As Long) As Long
Private Declare Function DestroyCursor Lib "user32" (ByVal hCursor As Long) As Long
Private Const IDC_HAND As Long = 32649

Public Function GetSystemHandCursor() As Picture
    Dim Pic As PicBmp, IPic As IPicture, IID_IDispatch As GUID
    Dim hCur As Long
   
    hCur = LoadCursor(ByVal 0&, IDC_HAND)

    With IID_IDispatch
        .Data1 = &H20400
        .Data4(0) = &HC0
        .Data4(7) = &H46
    End With

    With Pic
        .Size = Len(Pic)
        .type = vbPicTypeIcon
        .hBmp = hCur
        .hPal = 0
    End With

    Call OleCreatePictureIndirect(Pic, IID_IDispatch, 1, IPic)

    Set GetSystemHandCursor = IPic
   
    DestroyCursor hCur
End Function

Private Sub Form_Load()
    Me.MousePointer = vbCustom
    Me.MouseIcon = GetSystemHandCursor
End Sub
Título: Re:Cusor mano en controles
Publicado por: pedroesca en Diciembre 17, 2012, 08:47:17 am
EXCELENTE! pero una consultita Leandro, para volver al cursor normal, basta con colocar "MousePointer = vbDefault" ??
Título: Re:Cusor mano en controles
Publicado por: raul338 en Diciembre 17, 2012, 11:49:23 am
EXCELENTE! pero una consultita Leandro, para volver al cursor normal, basta con colocar "MousePointer = vbDefault" ??

Si

Tambien hay otra forma, utilizando más api, cargar el CUR_HAND y CUR_DEFAULT... y con la API setCursor... tengo un par de codigos que hacen esto :P
Título: Re:Cusor mano en controles
Publicado por: pedroesca en Diciembre 17, 2012, 11:54:01 am
Buenísimo, hasta ahora siempre usaba la "manito del cursor" programando el mouse_move de cada control, asignando una imagen y nada mas :(
Título: Re:Cusor mano en controles
Publicado por: LeandroA en Diciembre 17, 2012, 11:38:50 pm
Buenísimo, hasta ahora siempre usaba la "manito del cursor" programando el mouse_move de cada control, asignando una imagen y nada mas :(

claro lo piola de esto es no tener que utilizar el mouse_move + setcursor, ami se me dio la situación que tenia que re programar varios controles y de esta forma es mas facil ya que se lo agregas y listo.
otra era que en los usercontrols de tipo windowsless al no tener hwnd me iva a complicar.