Creare Menu da codice e non con l'Editor-Menu
Come è noto, per creare un classico Menu si utilizza l'apposito Editor, che viene aperto premendo i due tasti ctrl + e; ma qui prendiamo in considerazione la possibilità di realizzare un Menu mediante il codice.
Dovremo, inoltre, collegare un evento alle sotto-voci del Menu principale, che venga solleato quando clicchiamo su una di quelle.
Prendiamo in considerazione tre modalità.
Creando una routine-evento per ciascuna sotto-voce del Menu
Public Sub Form_Open()
' Dichiariamo il Menu principale:
Dim mn As Menu
' Dichiariamo anche le sotto-voci del Menu:
Dim mn1, mn2, mn3, mn4 As Menu
' Impostiamo il Menu principale, impostando come "contenitore" il Form:
With mn = New Menu(Me)
' Gli diamo il testo che sarà mostrato:
. Caption = "File"
End With
' Attribuiamo al Menu principale le sue sotto-voci, le quali attribuiamo ad un proprio Gruppo.
' Inoltre, a tali sotto-voci diamo il testo che sarà mostrato e come "contenitore" il Menu principale:
With mn1 = New Menu(mn, False) As "mn1"
' Facciamo mostrare la denominazione della sotto-voce mediante ".Caption":
.Caption = "Nuovo"
.Name = "Nuovo"
End With
With mn2 = New Menu(mn, False) As "mn2"
.Caption = "Apri"
.Name = "Apri"
End With
With mn3 = New Menu(mn, False) As "mn3"
.Caption = "Salva con nome..."
.Name = "Salva con nome..."
End With
With mn4 = New Menu(mn, False) As "mn4"
.Caption = "Esci"
.Name = "Esci"
End With
End
Public Sub mn1_Click()
' qui fa qualcosa...
End
Public Sub mn2_Click()
' qui fa qualcosa...
End
Public Sub mn3_Click()
' qui fa qualcosa...
End
Public Sub mn4_Click()
' qui fa qualcosa...
End
Assegnando un medesimo Gruppo alle sotto-voci del Menu
Mostriamo due modalità possibili per assegnare un medesimo Gruppo alle sotto-voci del Menu, e per associare ciascuna sotto-voce, in qualità di oggetto, ad un evento:
Public Sub Form_Open()
Dim mn, subMn As Menu
Dim i As Integer
Dim testo As String
With mn = New Menu(FMain)
.Caption = "File"
End With
' Per far apparire nel Menu principale le sue sotto-voci con "specifiche" denominazioni:
For i = 0 To 3
Select Case i
Case 0
testo = "Nuovo"
Case 1
testo = "Apri"
Case 2
testo = "Salva con nome..."
Case 3
testo = "esci"
End Select
' Crea una nuova sotto-voce del Menu principale, e viene assegnata ad un unico Gruppo:
With subMn = New Menu(mn) As "SubMn"
.Caption = testo
.Name = testo
End With
Next
End
Public Sub subMn_Click()
' Riscontriamo quale sotto-voce abbiamo scelto:
Message.Info("Hai premuto il sotto-menu: " & Last.Name)
End
oppure mediante Object.Attach():
Public Sub Form_Open()
Dim mn, mn1, mn2, mn3, mn4 As Menu
Dim testo As String
mn = New Menu(Fmain)
mn.Caption = "File"
mn1 = New Menu(mn, False)
With mn1
' Facciamo mostrare la denominazione della sotto-voce mediante ".Caption":
.Caption = "Nuovo"
.Name = "Nuovo"
End With
mn2 = New Menu(mn, False)
With mn2
.Caption = "Apri"
.Name = "Apri"
End With
mn3 = New Menu(mn, False)
With mn3
.Caption = "Salva con nome..."
.Name = "Salva con nome..."
End With
mn4 = New Menu(mn, False)
With mn4
.Caption = "Esci"
.Name = "Esci"
End With
Object.Attach(mn1, Me, "ev")
Object.Attach(mn2, Me, "ev")
Object.Attach(mn3, Me, "ev")
Object.Attach(mn4, Me, "ev")
End
Public Sub ev_Click()
Dim obj As Object = Last
' Riscontriamo quale sotto-voce abbiamo scelto:
Message.Info("Hai premuto il menu: " & Last.Name)
End
o, volendo, sempre mediante Object.Attach() anche più semplicemente così:
Public Sub Form_Open()
Dim mn, subMn As Menu
Dim i As Integer
Dim testo As String
With mn = New Menu(FMain)
.Caption = "File"
End With
' Per far apparire nel Menu principale le sue sotto-voci con "specifiche" denominazioni:
For i = 0 To 3
Select Case i
Case 0
testo = "Nuovo"
Case 1
testo = "Apri"
Case 2
testo = "Salva con nome..."
Case 3
testo = "esci"
End Select
' Crea una nuova sotto-voce del Menu principale, e viene assegnata ad un unico Gruppo:
With subMn = New Menu(mn)
.Caption = testo
.Name = testo
End With
Object.Attach(subMn, Me, "SubMn")
Next
End
Public Sub subMn_Click()
' Riscontriamo quale sotto-voce abbiamo scelto:
Message.Info("Hai premuto il sotto-menu: " & Last.Name)
End
Creare Menu in un oggetto Window
E' possibile creare Menu anche per l'oggetto Window.
Come esempio riprendiamo in parte, ed opportunamente modificato, uno dei codici sopra descritti:
Public Sub Button1_Click()
Dim w As Window
Dim mn, subMn As Menu
Dim i As Integer
Dim testo As String
' Crea un'oggetto "Window":
With w = New Window
.W = 200
.H = 200
.Center
.Show
End With
' Crea un Menu attribuendolo all'ggetto "Window":
With mn = New Menu(w)
.Name = "prova_Menu"
.Text = "menu"
End With
For i = 0 To 3
Select Case i
Case 0
testo = "Nuovo"
Case 1
testo = "Apri"
Case 2
testo = "Salva con nome..."
Case 3
testo = "esci"
End Select
' Crea una nuova sotto-voce del Menu principale,
' e l'assegna al medesimo Gruppo delle altre sotto-voci:
With subMn = New Menu(mn) As "SubMn"
.Caption = testo
.Name = testo
End With
Next
End
Public Sub subMn_Click()
' Riscontriamo quale sotto-voce abbiamo scelto:
Message.Info("Hai premuto il sotto-menu: " & Last.Name)
End