Far apparire un Balloon, quando si passa con il mouse su un menu

Da Gambas-it.org - Wikipedia.

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