§§Felpato§§ (Normal User)
Rookie
Messaggi: 29
Iscritto: 27/04/2009
|
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
|
|
theprogrammer (Normal User)
Guru^2
Messaggi: 2509
Iscritto: 28/01/2009
|
No ... non esiste.
Puoi usare la MouseMove in modo da capire se il mouse non e' dentro il form ...
|
|
antometal (Member)
Guru
Messaggi: 691
Iscritto: 12/09/2007
|
non son sicuro che si possa risolvere col mousemove (può essere che mi sbaglio)...
ma con le pointapi e un timer, risolvi sicuramente...
|
|
Louis (Normal User)
Pro
Messaggi: 150
Iscritto: 22/04/2008
|
Ciao feltapo, di seguito ti posto del codice che potrebbe risolvere il tuo prob. Preciso che NON é stato scritto da me, ma solo modificato
Codice sorgente - presumibilmente VB.NET |
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
|
|
|
§§Felpato§§ (Normal User)
Rookie
Messaggi: 29
Iscritto: 27/04/2009
|
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:
Codice sorgente - presumibilmente VB.NET |
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:
Codice sorgente - presumibilmente Visual Basic 6 |
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. |
|
antometal (Member)
Guru
Messaggi: 691
Iscritto: 12/09/2007
|
provato con le pointapi???
in un form (con un timer: Timer1):
Codice sorgente - presumibilmente VB.NET |
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:
Codice sorgente - presumibilmente VB.NET |
Public Declare Function GetCursorPos Lib "user32" (lpPoint As Pointapi) As Long Public Type Pointapi x As Long y As Long End Type
|
|
|
§§Felpato§§ (Normal User)
Rookie
Messaggi: 29
Iscritto: 27/04/2009
|
Ok il codice naturalmente funzona, però non ho capito bene quel / 15 a cosa serve. Scusate per il disturbo e grazie.
|
|
antometal (Member)
Guru
Messaggi: 691
Iscritto: 12/09/2007
|
15 è il rapporto tra pixel e twip
in vb usi i twip, sullo schermo i pixel
1 pixel=15 twip
|
|
§§Felpato§§ (Normal User)
Rookie
Messaggi: 29
Iscritto: 27/04/2009
|
Ah ok.
|
|