Yo uso la clase cCursor para hacer los rollos del cursor, es mucho más limpio y no tienes porque hacer chapucillas de maximizar y hacer transparente y demás. Te da varias opciones como conseguir las coordenadas del cursor, establecerlo en unas coordenadas concretas, encima de un command, restringirlo a un area concreta, a un textbox... y por supuesto hacer desaperecer el cursor.
Yo tengo una funcion creada (de esas miscellaneous (= muy friki)) que lo que hace es cargar una imagen en una esquina de la pantalla que tiene fondo de cárcel y meter el cursor ahí, aunque te esfuerzes moviendo el ratón lo que quieras el cursor no sale de donde está .
Os dejo el codigo de la clase, ya sabéis en la ventanita de proyectos de la derecha, arriba klik derecho y agregar una clase, luego pegáis el código.
Código:
' -- X (Get/Let): Situa el cursor en la posición X
' -- Y (Get/Let): Situa el cursor en la posición Y
' -- Colocar: Pone el cursor en el centro de un control.
' -- Restringir: Restringir el cursor a un área determinada.
Option Explicit
DefLng A-Z
Private Type POINTAPI
x As Long
y As Long
End Type
Private Type RECT
Izquierda As Long
Arriba As Long
Derecha As Long
Abajo As Long
End Type
Private CurVisible As Boolean
Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long
Private Declare Function SetCursorPos Lib "user32" (ByVal x As Long, ByVal y As Long) As Long
Private Declare Function ClientToScreen Lib "user32" (ByVal hwnd As Long, lpPoint As POINTAPI) As Long
Private Declare Function ClipCursor Lib "user32" (lpRect As RECT) As Long
Private Declare Function ShowCursor Lib "user32" (ByVal bShow As Long) As Long
Public Property Get x() As Long
Dim tmpPoint As POINTAPI
Call GetCursorPos(tmpPoint)
x = tmpPoint.x
End Property
Public Property Let x(ByVal vNewValue As Long)
Call SetCursorPos(vNewValue, y)
End Property
Public Property Get y() As Long
Dim tmpPoint As POINTAPI
Call GetCursorPos(tmpPoint)
y = tmpPoint.y
End Property
Public Property Let y(ByVal vNewValue As Long)
Call SetCursorPos(x, vNewValue)
End Property
Public Sub Colocar(ctl As Control)
'envía el cursor al centro del control indicado.
Dim pnt As POINTAPI
Dim xx As Long
Dim yy As Long
pnt.x = pnt.y = 0
'Obtener coordenadas Izquierda-Arriba de la esquina del control
Call ClientToScreen(ctl.hwnd, pnt)
xx = pnt.x + (ctl.Width \ 2)
yy = pnt.y + (ctl.Height \ 2)
Call SetCursorPos(xx, yy)
End Sub
Public Sub Restringir(ToCtl As Object)
Dim tmpRect As RECT
Dim pt As POINTAPI
With ToCtl
If TypeOf ToCtl Is Form Then
pt.x = 0
pt.y = 0
Call ClientToScreen(.hwnd, pt)
tmpRect.Izquierda = pt.x
tmpRect.Arriba = pt.y
pt.x = FrmJail.Width
pt.y = FrmJail.Height
Call ClientToScreen(.hwnd, pt)
tmpRect.Derecha = pt.x
tmpRect.Abajo = pt.y
ElseIf TypeOf ToCtl Is Screen Then
tmpRect.Izquierda = 0
tmpRect.Arriba = 0
tmpRect.Derecha = (.Width \ Screen.TwipsPerPixelX)
tmpRect.Abajo = (.Height \ Screen.TwipsPerPixelY)
Else
pt.x = 0
pt.y = 0
Call ClientToScreen(.hwnd, pt)
tmpRect.Izquierda = pt.x
tmpRect.Arriba = pt.y
pt.x = .Width
pt.y = .Height
Call ClientToScreen(.hwnd, pt)
tmpRect.Abajo = pt.y
tmpRect.Derecha = pt.x
End If
Call ClipCursor(tmpRect)
End With
End Sub
Private Sub Class_Initialize()
CurVisible = True
End Sub
Public Property Get Visible() As Boolean
Visible = CurVisible
End Property
Public Property Let Visible(ByVal vNewValue As Boolean)
CurVisible = vNewValue
Call ShowCursor(CurVisible)
End Property
en general yo creo que se entiende y es fácil de usar. Lo único usa la misma función para hacer que el cursor no se vea, el "ShowCursor" puede que te siga sin funcionar.
Salu10