Differenze tra le versioni di "Far apparire un Balloon, quando si passa con il mouse su un menu"
(8 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'' | + | 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. |
− | |||
− | |||
− | '''Public''' Sub | + | ===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() | |
− | If | + | |
− | + | 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''' | '''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() | |
− | '''Public''' Sub | + | |
− | + | 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 | ||
+ | <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