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à ...)
 
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à.
  
 
+
==Creando una routine-evento per ciascuna sotto-voce del Menu==
<FONT color=#B22222><B>Creando una routine-evento per ciascuna sotto-voce del Menu:</b></font>
+
'''Public''' Sub Form_Open()
 
+
  <FONT color=#006400>' ''Dichiariamo il Menu principale:''</font>   
+
  <FONT color=gray>' ''Dichiariamo il Menu principale:''</font>   
Private mn As Menu  
+
  Dim mn As Menu
         
+
   
     
+
  <FONT color=gray>' ''Dichiariamo anche le sotto-voci del Menu:''</font>
  '''Public''' Sub Form_Open() 
 
 
 
  <FONT color=#006400>' ''Dichiariamo anche le sotto-voci del Menu:''</font>  
 
 
   Dim mn1 As Menu   
 
   Dim mn1 As Menu   
 
   Dim mn2 As Menu   
 
   Dim mn2 As Menu   
 
   Dim mn3 As Menu   
 
   Dim mn3 As Menu   
 
   Dim mn4 As Menu   
 
   Dim mn4 As Menu   
     
+
   
  <FONT color=#006400>' ''impostiamo il Menu principale, impostando come "contenitore" il Form:</font>
+
  <FONT color=gray>' ''Impostiamo il Menu principale, impostando come "contenitore" il Form:''</font>
    mn = New Menu(Me)
+
  With mn = New Menu(Me)
     
+
  <FONT color=gray>' ''Gli diamo il testo che sarà mostrato:''</font>
  <FONT color=#006400>' ''gli diamo il testo che sarà mostrato:''</font>
+
    . Caption = "File"
    mn.Caption = "File"
+
  End With
     
+
   
  <FONT color=#006400>' ''attribuiamo al Menu principale le sue sotto-voci,''
+
  <FONT color=gray>' ''Attribuiamo al Menu principale le sue sotto-voci, le quali attribuiamo ad un proprio Gruppo.''
  ' ''alle quali diamo il testo che sarà mostrato,''
+
  ' ''Inoltre, a tali sotto-voci diamo il testo che sarà mostrato e come "contenitore" il Menu principale:''</font>
' ''e come "contenitore" il Menu principale:''</font>
+
     With mn1 = New Menu(mn, False) As "mn1"
     mn1 = New Menu(mn, False)
+
  <FONT color=gray>' ''Facciamo mostrare la denominazione della sotto-voce mediante ".Caption":''</font>
    With mn1
+
    .Caption = "Nuovo"
  <FONT color=#006400>' ''Facciamo mostrare la denominazione della sotto-voce mediante ".Caption":</font>
+
    .Name = "Nuovo"
      .Caption = "Nuovo"
+
    End With
      .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 50:
 
  '''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 98:
 
     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 163:
 
   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 delle 10:30, 21 ago 2020

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 As Menu  
 Dim mn2 As Menu  
 Dim mn3 As Menu  
 Dim 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