dovrebbe essere la stessa cosa , gli dai la proprieta visible o altro a true e come contenitore il form
...ci sono quasi..... :coder:
Private mn As Menu
Public Sub Form_Open()
Dim mn1 As Menu
Dim mn2 As Menu
Dim mn3 As Menu
Dim mn4 As Menu
' imposto il Menu principale, impostando come "contenitore" il Form:
mn = New Menu(Me)
' gli dò il testo che sarà mostrato:
mn.Caption = "Menu della sera"
' attribuisco al Menu principale i sotto-menu,
' ai quali dò il testo che sarà mostrato,
' e come "contenitore" il Menu principale:
mn1 = New Menu(mn)
mn1.Caption = "Antipasti"
mn2 = New Menu(mn)
mn2.Caption = "Primi"
mn3 = New Menu(mn)
mn3.Caption = "Secondi"
mn4 = New Menu(mn)
mn4.Caption = "Paga e... Esci"
End
...e mi compare in alto a sinistra come volevo ! :D
Per scatenare l'evento del clic, quando si sceglie la voce di un sotto-menu, faccio così:
...
mn1 = New Menu(mn) As "mn1"
mn1.Caption = "Antipasti"
mn2 = New Menu(mn) As "mn2"
mn2.Caption = "Primi"
mn3 = New Menu(mn) As "mn3"
mn3.Caption = "Secondi"
mn4 = New Menu(mn) As "mn4"
mn4.Caption = "Paga e... Esci"
End
Public Sub mn1_Click()
Print "Hai scelto gli \"Antipasti\""
end
Public Sub mn2_Click()
etc etc
...
Per evitare di porre una routine per ciascuna sotto-voce, sto tentando di fare una cosa di questo genere:
....
Object.Attach(mn1, mn, "ev")
Object.Attach(mn..........)
etc etc
End
Public Sub ev_Click()
Dim objMenu As Object = Last
Select Case objMenu .Tag ' ovviamente dopo aver dato nella routine iniziale un "Tag" a "mn1" così: mn1.Tag = "antip"
Case "antip"
Print "Hai scelto gli \"Antipasti\""
Case etc etc
End Select
End
Print "
End
...ma non mi riesce ! :hard: Non si solleva l'evento "ev" !
E' possibile fare questo "giochetto" con un menu ? In caso positivo, dove erro ? ???
io ho provato così e funge:
' Gambas class file
'Private objmenu As New Menu[]
Private mn1 As Menu
Public Sub _new()
End
Public Sub Form_Open()
Dim i As Integer
Dim tmp As Menu
mn1 = New Menu(FMain)
mn1.Text = "pippo"
For i = 0 To 10
tmp = New Menu(mn1, False) As "mymenu"
tmp.Text = i
tmp.Name = i
tmp.Tag = i * 100
'objmenu.Add(tmp)
Next
End
Public Sub mymenu_Click()
Message.Info("hai premuto il menu " & Last.Name)
End
io ho provato così e funge:
Uhmmm.... sì... una buona scappatoia/integrazione al codice che avevo scritto.
Grazie molte, fsurfing !
Ho fatto solo una leggera modifica al tuo codice, per far apparire nel menu le sotto-voci senza il numero rappresentato dalla variabile " i ", ma invece con "specifiche" denominazioni:
......
For i = 0 To 3
Select Case i
Case 0
testo = "Antipasti"
Case 1
testo = "Primi"
Case 2
testo = "Secondi"
Case 3
testo = "Paga ed... esci"
End Select
tmp = New Menu(mn1, False) As "mymenu"
tmp.Caption = testo
tmp.Name = i
tmp.Tag = i * 100
Next
End
Peccato, però, non sembri si possa utilizzare "Object.Attach(....)". Mannaggia ! Eppure c'è una rinvio di md9327:
http://www.gambas-it.org/smf/index.php?topic=321.msg2897#msg2897
ad un estratto del codice di pgDesigner, nel quale vedo queste righe:
hMenu = NEW Menu(.mnuOpenRecent) 'menu per l'ordinamento delle voci
WITH hMenu
.Name = "mnuOrderRecent"
.Caption = ("&Order by Path")
END WITH
Object.Attach(hMenu, pgApplication.EventManager, "Event")' <-----------
...ma, chissà, se è analogo al rapporto tra Menu e Object.Attach(...) da me sollevato ! :-\