Visual Basic - Limitar el mouse

Life is soft - evento anual de software empresarial
 
Vista:

Limitar el mouse

Publicado por Matías (159 intervenciones) el 14/08/2001 04:44:12
como hago para limitar el movimiento del mouse a los limites de mi programa (del form)?
el mouse tiene que liberarse una vez que lo cierro
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:Limitar el mouse Parte 1

Publicado por Adán (79 intervenciones) el 14/08/2001 19:18:37
Podrías hacer un form que abarcara toda la pantalla:
'en tiempo de diseño: form1.Style = 0

Option Explicit
Const BLOQUEAR As Boolean = True
Const DESBLOQUEAR As Boolean = False

Private Const SPI_SCREENSAVERRUNNING = 97
Private Declare Function SystemParametersInfo Lib "user32" _
Alias "SystemParametersInfoA" (ByVal uAction As Long, _
ByVal uParam As Long, lpvParam As Any, ByVal fuWinIni _
As Long) As Long

Public Sub BloquearDesbloquearVentana(bloqueo As Boolean)
Dim Ret As Integer
Dim pOld As Boolean
Ret = SystemParametersInfo(SPI_SCREENSAVERRUNNING, bloqueo, pOld, 0)
End Sub

Sub Form_Load()
With Me
.Left = 0
.Top = 0
.Width = Screen.Width
.Hieght = Screen. Height
End With

Call BloquearDesbloquearVentana(BLOQUEAR)
End Sub

Sub Form_Load()
Call BloquearDesbloquearVentana(DESBLOQUEAR)
End Sub

Así, simulas que tu programa es el protector de pantalla y nadie podrá salir de ahí hasta que tu quieras....(continua)
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:Limitar el mouse Parte 2

Publicado por Adán (79 intervenciones) el 14/08/2001 19:43:06
....También puedes hacer literalmente lo que tu preguntas (por eso de que forzosamente debe ser como tú preguntas):

Option Explicit
Public Const BLOQUEAR As Boolean = True
Public Const DESBLOQUEAR As Boolean = False

Type RECT
Left As Integer
Top As Integer
Right As Integer
Bottom As Integer
End Type

Type POINT
X As Long
Y As Long
End Type

Private Declare Sub ClipCursor Lib "user32" (lpRect As Any)
Private Declare Sub OffsetRect Lib "user32" (lpRect As RECT, ByVal X As Long, ByVal Y As Long)
Private Declare Sub GetClientRect Lib "user32" (ByVal hwnd As Long, lpRect As RECT)
Private Declare Sub ClientToScreen Lib "user32" (ByVal hwnd As Long, lpPoint As POINT)

Public Sub BloquearDesbloquearForma(bloqueo As Boolean, frm As Object)
Dim altomenu As Integer
Dim client As RECT
Dim upperleft As POINT

If bloqueo Then
With Me
.Left = frm.Left
.Top = frm.Top
.Width = frm.Width
.Height = frm.Height
End With

GetClientRect Me.hwnd, client
upperleft.X = client.Left
upperleft.Y = client.Top
ClientToScreen Me.hwnd, upperleft
OffsetRect client, upperleft.X, upperleft.Y
ClipCursor client
Else
ClipCursor ByVal 0&
End If
End Sub

(continúa)....
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:Limitar el mouse Parte 3

Publicado por Adán (79 intervenciones) el 14/08/2001 19:49:18
..Es importante que crees una forma específicamente para esto (form1), ya que si lo quieres hacer individual tendrás que crear todo el código para cada forma: NO PUEDES colocarlo en un módulo porque te marca error en en Kernel32.dll a la hora de tener el ejecutable. Por lo que lo tendrás que llamar así para cada forma:

Sub Form_Activate()
Call BloquearDesbloquearForma(BLOQUEAR, Me)
End Sub

Sub Form_Unload()
Call BloquearDesbloquearForma(DESBLOQUEAR, Me)
End Sub

....Ten cuidado algunos detalles que me ocurrieron demuestran que debes tener cuidado al llamar esta función:
-Coloca esta función después de una intrucción Enabled, ya que esto deshace el bloqueo.
-Compila seguido tu proyecto y pruébalo, ya que algunas veces te marca error en Kernel si no sabes colocar la función o te la cancela con determinados eventos.

....(continúa)
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:Limitar el mouse Parte 4 (y última)

Publicado por Adán (79 intervenciones) el 14/08/2001 19:51:31
Por último, por ahí también hay un ejemplo para mandar tu aplicación hacia el frente (Top Most) si lo deseas para complementar los dos ejemplos anteriores:

Declare Function SetWindowPos Lib "user32.dll" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal x As Long, ByVal y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long

CONST SWP_DRAWFRAME = &H20
CONST SWP_FRAMECHANGED = &H20
CONST SWP_HIDEWINDOW = &H80
CONST SWP_NOACTIVATE = &H10
CONST SWP_NOCOPYBITS = &H100
CONST SWP_NOMOVE = &H2
CONST SWP_NOSIZE = &H1
CONST SWP_NOREDRAW = &H8
CONST SWP_NOZORDER = &H4
CONST SWP_SHOWWINDOW = &H40

CONST HWND_BOTTOM = 1
CONST HWND_NOTOPMOST = -2
CONST HWND_TOP = 0
CONST HWND_TOPMOST = -1

Private Sub_Load()
SetWindowPos Me.hwnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_SHOWWINDOW + SWP_NOMOVE + SWP_NOSIZE
End Sub

Private Sub_Unload()
SetWindowPos Me.hwnd, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_SHOWWINDOW + SWP_NOMOVE + SWP_NOSIZE
End Sub

..alguna duda, está mi correo. Suerte.
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