Autor Tema: Cusor mano en controles  (Leído 3355 veces)

0 Usuarios y 1 Visitante están viendo este tema.

LeandroA

  • Administrador
  • Petabyte
  • *****
  • Mensajes: 1128
  • Reputación: +151/-8
    • Ver Perfil
Cusor mano en controles
« 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

pedroesca

  • Megabyte
  • ***
  • Mensajes: 206
  • Reputación: +19/-0
  • "El conocimiento es libre"
    • Ver Perfil
Re:Cusor mano en controles
« Respuesta #1 en: Diciembre 17, 2012, 08:47:17 am »
EXCELENTE! pero una consultita Leandro, para volver al cursor normal, basta con colocar "MousePointer = vbDefault" ??
"Si yo tengo una idea, tú otra, y la compartimos, ambos tendremos DOS ideas"

raul338

  • Terabyte
  • *****
  • Mensajes: 894
  • Reputación: +62/-8
  • xD fan!!!!! xD
    • Ver Perfil
    • Raul's Weblog
Re:Cusor mano en controles
« Respuesta #2 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

pedroesca

  • Megabyte
  • ***
  • Mensajes: 206
  • Reputación: +19/-0
  • "El conocimiento es libre"
    • Ver Perfil
Re:Cusor mano en controles
« Respuesta #3 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 :(
"Si yo tengo una idea, tú otra, y la compartimos, ambos tendremos DOS ideas"

LeandroA

  • Administrador
  • Petabyte
  • *****
  • Mensajes: 1128
  • Reputación: +151/-8
    • Ver Perfil
Re:Cusor mano en controles
« Respuesta #4 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.