La Web del Programador: Comunidad de Programadores
 
    Pregunta:  3683 - CURSORES EN COLOR
Autor:  Manuel Peiró
Hola Programadores!
Mi problema es el siguiente:
Cuando trato de poner un cursor personalizaado en mis aplicaciones siempre se ven en blanco y negro, da igual que lo haga yo con un programa o que lo coja de los que trae Windows. Sin embargo, si pongo como cursor un icono ("*.ico" en vez de "*.cur") si que se ve en color, pero no puedo dejarlo ya que no puedo elegir su zona de accion, es decir, el punto que vale al clickear (ejemplo: la punta de la flecha en el cursor predetermindao de Windows).
¿Que puedo hacer?
Gracias por vuestra atencion.

  Respuesta:  juan cecconi
Aqui tienes un codigo que te escribi utilizando APIs de windows para cambiar el puntero del mouse con cada click en el formulario.La logica del programa es sencilla y tiene algunos comentarios, espero no tengas inconvenientes.

Option Explicit
Const IDC_ARROW = 32512&
Private Declare Function LoadCursor Lib "user32" Alias "LoadCursorA" (ByVal hInstance As Long, ByVal lpCursorName As Long) As Long
Private Declare Function SetClassLong Lib "user32" Alias "SetClassLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Private Declare Function LoadCursorFromFile Lib "user32" Alias "LoadCursorFromFileA" (ByVal lpFileName As String) As Long

Private hArrow As Long, hCursor As Long, Cursor_Arrow As Boolean
´

Private Sub Form_Load()
´
hCursor = LoadCursorFromFile(App.Path & "\mi_cursor.cur") ´cargo cursor personalizado
hArrow = LoadCursor(0, IDC_ARROW) ´cargo el cursor de flecha del sistema!
´
SetClassLong Me.hwnd, GCL_HCURSOR, hCursor ´la clase de la ventanas form1 tiene mousepointer hCursor
SetClassLong Command1.hwnd, GCL_HCURSOR, hCursor ´la clase de la ventanas command1 (buttons) tiene mousepointer hCursor
Cursor_Arrow = False ´cursor actual personalizado!
End Sub

Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
If Button = vbLeftButton Then
If Cursor_Arrow Then ´cursor actual es flecha?
SetClassLong Me.hwnd, GCL_HCURSOR, hCursor ´si-> cambio al personalizado
SetClassLong Command1.hwnd, GCL_HCURSOR, hCursor
Else
SetClassLong Me.hwnd, GCL_HCURSOR, hArrow ´no-> cambio del personalizado al de flecha
SetClassLong Com