Oppure

Loading
01/08/09 18:57
§§Felpato§§
Innanzitutto ciao a tutti.
Espongo il mio problema. Stavo provando a creare una Toolbar di quelle che si mettono ai bordi dello schermo e quando ci si passa sopra con il mouse si aprono.
Volevo sapere se esiste una routine che si attivava quando il mouse usciva dal form.(Diciamo una cosa contraria alla Routine Form1_MouseMove). Grazie
aaa
01/08/09 19:02
theprogrammer
No ... non esiste.

Puoi usare la MouseMove in modo da capire se il mouse non e' dentro il form ...
aaa
01/08/09 19:40
antometal
non son sicuro che si possa risolvere col mousemove (può essere che mi sbaglio)...
ma con le pointapi e un timer, risolvi sicuramente...
aaa
02/08/09 3:03
Louis
Ciao feltapo, di seguito ti posto del codice che potrebbe risolvere il tuo prob. Preciso che NON é stato scritto da me, ma solo modificato
Option Explicit
' Limita i movimenti del mouse nella Form visualizzata:
Private Type RECT
    left As Long
    top As Long
    right As Long
    bottom As Long
End Type
Private Type POINT
    x As Long
    y As Long
End Type
Private Declare Sub ClipCursor Lib "user32" (lpRect As Any)
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)
Private Declare Sub OffsetRect Lib "user32" (lpRect As RECT, ByVal x As Long, ByVal y As Long)
'------------------------------------------------------
Private Sub Form_Load()
    Command1.Caption = "Limita i movimenti del mouse"
    Command2.Caption = "Libera il mouse"
End Sub
'------------------------------------------------------
Private Sub Command1_Click()
    Dim client As RECT
    Dim upperleft As POINT
    GetClientRect Me.hWnd, client
    upperleft.x = client.left
    upperleft.y = client.top
    ClientToScreen Me.hWnd, upperleft
    OffsetRect client, upperleft.x, upperleft.y
    ClipCursor client
End Sub
'------------------------------------------------------
Private Sub Command2_Click()
    ClipCursor ByVal 0&
End Sub
'------------------------------------------------------
Private Sub Form_Unload(Cancel As Integer)
    ClipCursor ByVal 0&
End Sub



:k:
aaa
02/08/09 18:52
§§Felpato§§
Grazie Louis per il codice interessante che hai postato, ma credo che non si possa rivelare utile per risolvere il mio problema ;). In sostanza io voglio che il mouse possa uscire liberamente dalla form e non bloccarlo.
Posto il codice per far capire meglio:

Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
Timer1.Enabled = True
End Sub

Private Sub Timer1_Timer()
If Me.Left < 15000 Then
Timer1.Enabled = False
Else
Me.Left = Me.Left - 100
End If
End Sub


Manca la procedura di rientro del form quando il puntatore esce.

Credo sia più semplice la soluzione di Antometal, ossia quella di individuare la posizione del puntatore. Se il mouse è fuori da una certa area (quella occupata dalle possibili posizioni del form), allora:

Private Sub Form_Load()
Me.Left = 19130
End Sub


Qual'è la procedura per individuare la posizione del mouse? Grazie

Altra domanda. E' possibile evitare di mettere tutte queste posizioni (19130, 15000) e mettere delle variabili che individuano il bordo destro dello schermo?
In questo stato la Toolbar non potrebbe funzionare a dovere in un computer con una risoluzione differente da quella attuale.
Grazie.
aaa
02/08/09 19:32
antometal
provato con le pointapi???

in un form (con un timer: Timer1):

Private Sub Timer1_Timer()
Dim mouse As Pointapi
Dim pos1 As Pointapi    'angolo in alto a sinistra
Dim pos2 As Pointapi    'angolo in basso a destra

Timer1.Interval = 100
GetCursorPos mouse
pos1.x = Me.Left / 15
pos1.y = Me.Top / 15
pos2.x = Me.Width / 15 + pos1.x
pos2.y = Me.Height / 15 + pos1.y

    If (mouse.x > pos1.x And mouse.y > pos1.y And mouse.x < pos2.x And mouse.y < pos2.y) Then
        Me.Caption = "in form"
    Else: Me.Caption = "out form"
    End If
End Sub


in un modulo:
Public Declare Function GetCursorPos Lib "user32" (lpPoint As Pointapi) As Long

Public Type Pointapi
x As Long
y As Long
End Type
aaa
03/08/09 13:07
§§Felpato§§
Ok il codice naturalmente funzona, però non ho capito bene quel / 15 a cosa serve. Scusate per il disturbo e grazie.:)
aaa
03/08/09 13:24
antometal
15 è il rapporto tra pixel e twip
in vb usi i twip, sullo schermo i pixel
1 pixel=15 twip
aaa