Differenze tra le versioni di "Far apparire un Balloon, quando si passa con il mouse su un menu"

Da Gambas-it.org - Wikipedia.
 
(4 versioni intermedie di uno stesso utente non sono mostrate)
Riga 1: Riga 1:
 
Il caso in questione è quello in cui si vuole far apparire un ''Balloon'' sulla voce principale di un ''Menu'', passandoci sopra con il puntatore del mouse.
 
Il caso in questione è quello in cui si vuole far apparire un ''Balloon'' sulla voce principale di un ''Menu'', passandoci sopra con il puntatore del mouse.
  
Si potrà utilizzare un ''Timer'' e verificare la distanza del puntatore del mouse dall'angolo alto a sinistra dello schermo in rapporto con la distanza del ''Form'', ove sono presenti le voci principali del Menu, dall'angolo alto a sinistra dello schermo.
+
===Usando la Proprietà ".Tracking" del ''Form''===
 +
La Proprietà ".Tracking" imposta se il Controllo (nel nostro caso il ''Form'') riceverà eventi "_MouseMove()" <SPAN Style="text-decoration:underline">senza il bisogno di tenere premuto un tasto del mouse</span>, mentre ci si sposta con esso.
 +
 
 +
Mostriamo un esempio pratico, nel quale si è creato un ''Menu'' sul ''Form'':
 +
'''Public''' Sub Form_Open()
 +
 +
  Me.Tracking = True
 +
 +
'''End'''
 +
 +
'''Public''' Sub Form_MouseMove()
 +
 +
  Select Case Mouse.X
 +
  Case 15 To 50
 +
    If Mouse.Y < 20 Then
 +
      Balloon.Info("Il mouse sta passando sul Menu !", Me, Mouse.X, Mouse.Y)
 +
    Else
 +
      Balloon.Hide
 +
    Endif
 +
End Select
 +
 +
'''End'''
 +
 
 +
===Usando un Oggetto ''Timer''===
 +
Si potrà utilizzare un ''Timer'' e la Classe ''Rect'', per verificare la distanza del puntatore del mouse dall'angolo alto a sinistra dello schermo in rapporto con la distanza del ''Form'', ove sono presenti le voci principali del Menu, dall'angolo alto a sinistra dello schermo.
  
 
Mostriamo un esempio pratico:
 
Mostriamo un esempio pratico:
Riga 14: Riga 38:
 
   End With
 
   End With
 
    
 
    
  End'''
+
  '''End'''
 
 
   
 
   
 
  '''Public''' Sub Tempus_Timer()
 
  '''Public''' Sub Tempus_Timer()
Riga 27: Riga 50:
 
  '''End'''
 
  '''End'''
  
 
+
===Usando un ciclo infinito===
Un'alternativa può essere quella di verificare il passaggio del mouse nell'area del ''Menu'', tenendo conto delle coordinate .X ed .Y assunte dal puntatore del mouse ad ogni suo spostamento. In questo secondo caso, però, la verifica potrà avvenire <SPAN style="text-decoration:underline">solo se il mouse viene spostato mantenendo premuto</span> un suo tasto.
+
Al posto del ''Timer'' si potrà usare un Ciclo infinito e - come sopra - la Classe ''Rect'':
 
+
  '''Public''' Sub Form_Open()
Esempio:
+
  '''Public''' Sub Form_MouseMove()
+
   Me.Show
    
+
   Select Case Mouse.X
+
   Dim rt As New Rect(Me.ScreenX + 10, Me.ScreenY + 10, Me.Font.TextWidth(Menu1.Text), Me.Font.TextHeight(Menu1.Text))
     Case 15 To 50
+
       If Mouse.Y < 20 Then Print "Il mouse sta passando sul Menu !"
+
  Do
   End Select
+
    If rt.Contains(Mouse.ScreenX, Mouse.ScreenY) Then
 +
      Balloon.Info("Un testo qualsiasi.", Me, 10 + (Me.Font.TextWidth(Menu1.Caption) / 2), 5)
 +
     Else
 +
       Balloon.Hide
 +
    Endif
 +
<FONT Color=gray>' ''L'istruzione "Wait" consente di risparmiare risorse di sistema e di agire su eventuali Oggetti grafici posti sul "Form":''</font>
 +
    Wait 0.01
 +
   Loop
 
    
 
    
 
  '''End'''
 
  '''End'''

Versione attuale delle 11:09, 7 gen 2022

Il caso in questione è quello in cui si vuole far apparire un Balloon sulla voce principale di un Menu, passandoci sopra con il puntatore del mouse.

Usando la Proprietà ".Tracking" del Form

La Proprietà ".Tracking" imposta se il Controllo (nel nostro caso il Form) riceverà eventi "_MouseMove()" senza il bisogno di tenere premuto un tasto del mouse, mentre ci si sposta con esso.

Mostriamo un esempio pratico, nel quale si è creato un Menu sul Form:

Public Sub Form_Open()

 Me.Tracking = True

End

Public Sub Form_MouseMove()

 Select Case Mouse.X
  Case 15 To 50
    If Mouse.Y < 20 Then 
      Balloon.Info("Il mouse sta passando sul Menu !", Me, Mouse.X, Mouse.Y)
   Else
     Balloon.Hide
   Endif 
End Select

End

Usando un Oggetto Timer

Si potrà utilizzare un Timer e la Classe Rect, per verificare la distanza del puntatore del mouse dall'angolo alto a sinistra dello schermo in rapporto con la distanza del Form, ove sono presenti le voci principali del Menu, dall'angolo alto a sinistra dello schermo.

Mostriamo un esempio pratico:

Private tm As Timer


Public Sub Form_Open()
 
 With tm = New Timer As "Tempus"
   .Delay = 50
   .Start
 End With
  
End

Public Sub Tempus_Timer()
 
 Dim rt As New Rect(Me.ScreenX + 10, Me.ScreenY + 10, Me.Font.TextWidth(Menu1.Caption), Me.Font.TextHeight(Menu1.Caption))
 
 If rt.Contains(Mouse.ScreenX, Mouse.ScreenY) Then
   Balloon.Info("Un testo qualsiasi.", Me, 10 + (Me.Font.TextWidth(Menu1.Caption) / 2), 5)
 Endif
 
End

Usando un ciclo infinito

Al posto del Timer si potrà usare un Ciclo infinito e - come sopra - la Classe Rect:

Public Sub Form_Open()

 Me.Show

 Dim rt As New Rect(Me.ScreenX + 10, Me.ScreenY + 10, Me.Font.TextWidth(Menu1.Text), Me.Font.TextHeight(Menu1.Text))

 Do
   If rt.Contains(Mouse.ScreenX, Mouse.ScreenY) Then
     Balloon.Info("Un testo qualsiasi.", Me, 10 + (Me.Font.TextWidth(Menu1.Caption) / 2), 5)
   Else
     Balloon.Hide
   Endif
' L'istruzione "Wait" consente di risparmiare risorse di sistema e di agire su eventuali Oggetti grafici posti sul "Form":
   Wait 0.01
 Loop
 
End