Italian [abbandonato] B4J - bottom menu

ivanomonti

Expert
Licensed User
Longtime User
ciao ragazzi non ricordo se esiste in b4j un bottone con menu e non contextmenu, cioò al suo click appare il suo menu.
 

ivanomonti

Expert
Licensed User
Longtime User
No, non esistono tasti ("bottoni" non mi piace, li vedo bene solo su camicie, giacche, cappotti... ?) che abbiano un menu; tu stesso hai citato i context menu, per qualunque view.
ma non vorrei il tasto dx del mouse ma al click
 

giannimaione

Well-Known Member
Licensed User
Longtime User
non ho modo di controllare, ma il button ha tra i vari eventi la possibilità di conoscere il semplice click, un long click, sx, dx, .... o confondo con un'altro linguaggio ?
 

LucaMs

Expert
Licensed User
Longtime User
non ho modo di controllare, ma il button ha tra i vari eventi la possibilità di conoscere il semplice click, un long click, sx, dx, .... o confondo con un'altro linguaggio ?
Oltre all'evento Click, ha:

1587743290420.png
 

ivanomonti

Expert
Licensed User
Longtime User
... e io non pensavo proprio; come puoi mostrare un menu alla pressione del tasto sinistro? O meglio, potresti, ma dovendo poi usare il tasto solo per quello scopo, non potresti gestire il normale click.

Tanto vale usare una Label, sulla quale fare il click ed aprire un menu.

in effetti serve solo per mostrare il menu, poi il menu ha il suo evento, anche perchè ho menu dinamici e devo mostrare voci al volo (fatto) vedi immagin e il tasto dx fa cagare


2020-04-24_182804.png
 

LucaMs

Expert
Licensed User
Longtime User
B4X:
Sub btnShowMenu_MousePressed (EventData As MouseEvent)
    If EventData.PrimaryButtonPressed Then
        Dim btn As Button = Sender
        Dim cm As ContextMenu = btn.ContextMenu
        Dim jo As JavaObject = cm
        jo.RunMethod("show", Array(btn, MainForm.WindowLeft + btn.Left + 20, _
         MainForm.WindowTop + btn.Top + 50))
    End If
End Sub

(volendo potresti modificarla per farla funzionare con una Label - o potrei adattarla per farla funzionare con entrambi i tipi di view)
 

LucaMs

Expert
Licensed User
Longtime User
Così, se ad una View che abbia il Context Menu, dai come nome evento "ShowMenu", funziona (qui previste solo Button e Label; eventualmente aggiungere "blocchi" Else If Nd Is xxx a seconda dal tipo di View).

B4X:
Sub ShowMenu_MousePressed (EventData As MouseEvent)
    ShowContextMenu(Sender)
End Sub


Sub ShowContextMenu(Nd As Object)
    Dim cm As ContextMenu
    Dim Nd2 As Node = Nd
   
    If Nd Is Button Then
        Dim btn As Button = Nd
        cm = btn.ContextMenu
    Else If Nd Is Label Then
        Dim lbl As Label = Nd
        cm = lbl.ContextMenu
    'Altre view che abbiano il context menu
    'Else If Nd is ??? Then
    End If

    Dim jo As JavaObject = cm
    jo.RunMethod("show", Array(Nd2, MainForm.WindowLeft + Nd2.Left + 20, _
         MainForm.WindowTop + Nd2.Top + 50))
End Sub
 
Top