Differenze tra le versioni di "Creare Menu da codice e non con l'Editor-Menu"

Da Gambas-it.org - Wikipedia.
(Nuova pagina: 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à ...)
 
 
(2 versioni intermedie di uno stesso utente non sono mostrate)
Riga 1: Riga 1:
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.{[[#Note|1]]}
+
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.
 
Dovremo, inoltre, collegare un evento alle sotto-voci del Menu principale, che venga solleato quando clicchiamo su una di quelle.
<BR>Prendiamo in considerazione tre modalità.
 
  
 +
Prendiamo in considerazione tre modalità.
  
<FONT color=#B22222><B>Creando una routine-evento per ciascuna sotto-voce del Menu:</b></font>
+
==Creando una routine-evento per ciascuna sotto-voce del Menu==
 
+
'''Public''' Sub Form_Open()
  <FONT color=#006400>' ''Dichiariamo il Menu principale:''</font>   
+
Private mn As Menu  
+
  <FONT color=gray>' ''Dichiariamo il Menu principale:''</font>   
         
+
  Dim mn As Menu
     
+
   
  '''Public''' Sub Form_Open() 
+
  <FONT color=gray>' ''Dichiariamo anche le sotto-voci del Menu:''</font>
 
+
   Dim mn1, mn2, mn3, mn4 As Menu   
  <FONT color=#006400>' ''Dichiariamo anche le sotto-voci del Menu:''</font>  
+
   
   Dim mn1 As Menu 
+
  <FONT color=gray>' ''Impostiamo il Menu principale, impostando come "contenitore" il Form:''</font>
  Dim mn2 As Menu 
+
  With mn = New Menu(Me)
  Dim mn3 As Menu   
+
  <FONT color=gray>' ''Gli diamo il testo che sarà mostrato:''</font>
  Dim mn4 As Menu  
+
    . Caption = "File"
     
+
  End With
  <FONT color=#006400>' ''impostiamo il Menu principale, impostando come "contenitore" il Form:</font>
+
   
    mn = New Menu(Me)
+
  <FONT color=gray>' ''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:''</font>
  <FONT color=#006400>' ''gli diamo il testo che sarà mostrato:''</font>
+
     With mn1 = New Menu(mn, False) As "mn1"
    mn.Caption = "File"
+
  <FONT color=gray>' ''Facciamo mostrare la denominazione della sotto-voce mediante ".Caption":''</font>
     
+
    .Caption = "Nuovo"
  <FONT color=#006400>' ''attribuiamo al Menu principale le sue sotto-voci,''
+
    .Name = "Nuovo"
  ' ''alle quali diamo il testo che sarà mostrato,''
+
    End With
' ''e come "contenitore" il Menu principale:''</font>
 
     mn1 = New Menu(mn, False)
 
    With mn1
 
  <FONT color=#006400>' ''Facciamo mostrare la denominazione della sotto-voce mediante ".Caption":</font>
 
      .Caption = "Nuovo"
 
      .Name = "Nuovo"
 
    End With
 
 
   
 
   
     mn2 = New Menu(mn, False)
+
     With mn2 = New Menu(mn, False) As "mn2"
     With mn2
+
     .Caption = "Apri"
      .Caption = "Apri"
+
    .Name = "Apri"
      .Name = "Apri"
+
    End With
    End With
 
 
   
 
   
     mn3 = New Menu(mn, False)
+
     With mn3 = New Menu(mn, False) As "mn3"
     With mn3
+
     .Caption = "Salva con nome..."
      .Caption = "Salva con nome..."
+
    .Name = "Salva con nome..."
      .Name = "Salva con nome..."
+
    End With
    End With
 
 
   
 
   
     mn4 = New Menu(mn, False)
+
     With mn4 = New Menu(mn, False) As "mn4"
     With mn4
+
     .Caption = "Esci"
      .Caption = "Esci"
+
    .Name = "Esci"
      .Name = "Esci"
+
    End With
    End With
+
   
     
 
 
  '''End'''
 
  '''End'''
 
   
 
   
Riga 58: Riga 48:
 
  '''Public''' Sub mn1_Click()   
 
  '''Public''' Sub mn1_Click()   
 
   
 
   
    <FONT color=#006400>' ''qui fa qualcosa...''</font>
+
  <FONT color=gray>' ''qui fa qualcosa...''</font>
 
+
 
  '''End'''
 
  '''End'''
 
+
 
  '''Public''' Sub mn2_Click()   
 
  '''Public''' Sub mn2_Click()   
  etc etc  
+
  ...   
+
  <FONT color=gray>' ''qui fa qualcosa...''</font>
 +
 +
'''End'''
 +
 +
'''Public''' Sub mn3_Click() 
 +
 +
  <FONT color=gray>' ''qui fa qualcosa...''</font>
 +
 +
'''End'''
 +
 +
'''Public''' Sub mn4_Click()  
 +
   
 +
  <FONT color=gray>' ''qui fa qualcosa...''</font>
 +
 +
  '''End'''
  
  
<FONT color=#B22222><B>Assegnando un medesimo ''gruppo'' alle sotto-voci del Menu:</b></font>
+
==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:
Private mn As Menu
 
 
 
 
 
 
  '''Public''' Sub Form_Open()   
 
  '''Public''' Sub Form_Open()   
 
 
  Dim mn1 As Menu
 
  Dim i As Integer 
 
 
 
    mn = New Menu(FMain) 
 
    mn.Caption = "File"
 
 
   
 
   
  <FONT color=#006400>' ''per far apparire nel Menu principale le sue sotto-voci con "specifiche" denominazioni:''</font>
+
  Dim mn, subMn As Menu
 +
  Dim i As Integer
 +
  Dim testo As String
 +
 +
  With mn = New Menu(FMain) 
 +
    .Caption = "File"
 +
  End With
 +
 +
  <FONT color=gray>' ''Per far apparire nel Menu principale le sue sotto-voci con "specifiche" denominazioni:''</font>
 
   For i = 0 To 3   
 
   For i = 0 To 3   
 
     Select Case i   
 
     Select Case i   
Riga 93: Riga 96:
 
     End Select   
 
     End Select   
 
   
 
   
  <FONT color=#006400>' ''crea una nuova sotto-voce del Menu principale:''</font>
+
  <FONT color=gray>' ''Crea una nuova sotto-voce del Menu principale, e viene assegnata ad un unico Gruppo:''</font>
     tmp = New Menu(mn1) As "menu1"  
+
     With subMn = New Menu(mn) <FONT color=#B22222>As "SubMn"</font>
    tmp.Caption = testo
+
      .Caption = testo
    tmp.Name = testo   
+
      .Name = testo   
     tmp.Tag = "tag" & i
+
     End With
 
+
 
   Next     
 
   Next     
 
+
 
  '''End'''
 
  '''End'''
 
   
 
   
 
   
 
   
  '''Public''' Sub menu1_Click()   
+
  '''Public''' Sub subMn_Click()   
 
   
 
   
  <FONT color=#006400>' ''Riscontriamo quale sotto-voce abbiamo scelto:''</font>
+
  <FONT color=gray>' ''Riscontriamo quale sotto-voce abbiamo scelto:''</font>
    Message.Info("Hai premuto il sotto-menu " & Last.Name)
+
  Message.Info("Hai premuto il sotto-menu: " & Last.Name)
 
   
 
   
 
  '''End'''
 
  '''End'''
  
  
<FONT color=#B22222><B>Associando ciascuna sotto-voce, in qualità di ''oggetto'', ad un evento:</b></font>
+
oppure mediante ''Object.Attach()'':
 
 
'''Private''' mn As Menu 
 
 
 
 
  '''Public''' Sub Form_Open()
 
  '''Public''' Sub Form_Open()
 
   
 
   
   Dim mn1 As Menu
+
   Dim mn, mn1, mn2, mn3, mn4 As Menu
  Dim mn2 As Menu
 
  Dim mn3 As Menu
 
  Dim mn4 As Menu
 
 
   Dim testo As String
 
   Dim testo As String
 
   
 
   
    mn = New Menu(Fmain)
+
  mn = New Menu(Fmain)
    mn.Caption = "File"
+
  mn.Caption = "File"
 
   
 
   
    mn1 = New Menu(mn, False)
+
  mn1 = New Menu(mn, False)
    With mn1
+
    With mn1
  <FONT color=#006400>' ''Facciamo mostrare la denominazione della sotto-voce mediante ".Caption":</font>
+
  <FONT color=gray>' ''Facciamo mostrare la denominazione della sotto-voce mediante ".Caption":''</font>
      .Caption = "Nuovo"
+
    .Caption = "Nuovo"
      .Name = "Nuovo"
+
    .Name = "Nuovo"
    End With
+
    End With
 
   
 
   
    mn2 = New Menu(mn, False)
+
  mn2 = New Menu(mn, False)
    With mn2
+
    With mn2
      .Caption = "Apri"
+
    .Caption = "Apri"
      .Name = "Apri"
+
    .Name = "Apri"
    End With
+
    End With
 
   
 
   
    mn3 = New Menu(mn, False)
+
  mn3 = New Menu(mn, False)
    With mn3
+
    With mn3
      .Caption = "Salva con nome..."
+
    .Caption = "Salva con nome..."
      .Name = "Salva con nome..."
+
    .Name = "Salva con nome..."
    End With
+
    End With
 
   
 
   
    mn4 = New Menu(mn, False)
+
  mn4 = New Menu(mn, False)
    With mn4
+
    With mn4
      .Caption = "Esci"
+
    .Caption = "Esci"
      .Name = "Esci"
+
    .Name = "Esci"
    End With
+
    End With
 
   
 
   
    Object.Attach(mn1, Me, "ev")
+
  <FONT color=#B22222>Object.Attach(mn1, Me, "ev")
    Object.Attach(mn2, Me, "ev")
+
  Object.Attach(mn2, Me, "ev")
    Object.Attach(mn3, Me, "ev")
+
  Object.Attach(mn3, Me, "ev")
    Object.Attach(mn4, Me, "ev")
+
  Object.Attach(mn4, Me, "ev")</font>
 
   
 
   
 
  '''End'''
 
  '''End'''
Riga 165: Riga 161:
 
   Dim obj As Object = Last
 
   Dim obj As Object = Last
 
   
 
   
  <FONT color=#006400>' ''Riscontriamo quale sotto-voce abbiamo scelto:''</font>
+
  <FONT color=gray>' ''Riscontriamo quale sotto-voce abbiamo scelto:''</font>
    Message.Info "Hai premuto il menu " & Last.Name
+
  Message.Info("Hai premuto il menu: " & Last.Name)
 
   
 
   
 
  '''End'''
 
  '''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
 +
 +
<FONT color=gray>' ''Per far apparire nel Menu principale le sue sotto-voci con "specifiche" denominazioni:''</font>
 +
  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 
 +
 +
<FONT color=gray>' ''Crea una nuova sotto-voce del Menu principale, e viene assegnata ad un unico Gruppo:''</font>
 +
    With subMn = New Menu(mn)
 +
      .Caption = testo
 +
      .Name = testo 
 +
    End With
 +
 +
    <FONT color=#B22222>Object.Attach(subMn, Me, "SubMn")</font>
 +
 +
  Next   
 +
 +
'''End'''
 +
 +
 +
'''Public''' Sub subMn_Click() 
 +
 +
<FONT color=gray>' ''Riscontriamo quale sotto-voce abbiamo scelto:''</font>
 +
  Message.Info("Hai premuto il sotto-menu: " & Last.Name)
 +
 +
'''End'''
  
  
==Note==
+
==Creare Menu in un oggetto ''Window''==
[1] Dobbiamo ringraziare gli utenti ''fsurfing'' e ''milio'' del forum ''gambas-it.org'' per i suggerimenti offerti al riguardo.
+
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
 +
 
 +
 
 +
<FONT color=gray>' ''Crea un'oggetto "Window":''</font>
 +
  With w = New Window
 +
    .W = 200
 +
    .H = 200
 +
    .Center
 +
    .Show
 +
  End With
 +
 
 +
<FONT color=gray>' ''Crea un Menu attribuendolo all'ggetto "Window":''</font>
 +
  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 
 +
 +
<FONT color=gray>' ''Crea una nuova sotto-voce del Menu principale,''
 +
' ''e l'assegna al medesimo Gruppo delle altre sotto-voci:''</font>
 +
  With subMn = New Menu(mn) As "SubMn"
 +
    .Caption = testo
 +
    .Name = testo 
 +
  End With
 +
 +
Next   
 +
 +
'''End'''
 +
 +
 +
'''Public''' Sub subMn_Click() 
 +
 +
<FONT color=gray>' ''Riscontriamo quale sotto-voce abbiamo scelto:''</font>
 +
  Message.Info("Hai premuto il sotto-menu: " & Last.Name)
 +
 +
'''End'''

Versione attuale delle 02:35, 1 ott 2022

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