Autore Topic: [RISOLTO] Creare un Menu senza usare l'Editor-Menu, ma da codice  (Letto 887 volte)

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.724
  • Ne mors quidem nos iunget
    • Mostra profilo
Scusate, ma non ho ben compreso  :specchio: come posso creare un Menu (...del tipo classico in alto a sinistra: File - Open - Save - Etc), senza utilizzare l'Editor Menu (ctrl + e), bensì usando il codice.

E' possibile avere un breve e semplice esempio ?
« Ultima modifica: 20 Marzo 2012, 15:12:07 da vuott »
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline fsurfing

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.482
    • Mostra profilo
Re: Creare un Menu senza usare l'Editor-Menu, ma da codice
« Risposta #1 il: 19 Marzo 2012, 19:18:51 »
sinceramente non mi ricordo , mai usato ,però penso che sia una cosa del genere:


menu1= new menu

prova a scrivere questo nell' editor e poi evidenzi menu e premi f2 e vedi che ti dice la guida ..

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.724
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: Creare un Menu senza usare l'Editor-Menu, ma da codice
« Risposta #2 il: 19 Marzo 2012, 19:37:32 »
menu1= new menu
prova a scrivere questo nell' editor e poi evidenzi menu e premi f2 e vedi che ti dice la guida ..

Sì... va bene per i menu che si mostrano solo al click del mouse, ma mi pare non per quello che intendo io. Il tipo "classico" di menu - come si sa - è visibile (almeno per le Caption principali), fisso ed è posto su una "fascia" aggiuntiva, tutta per esso, appena al di sotto del bordo del form.
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline fsurfing

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.482
    • Mostra profilo
Re: Creare un Menu senza usare l'Editor-Menu, ma da codice
« Risposta #3 il: 19 Marzo 2012, 19:42:31 »
dovrebbe essere la stessa cosa , gli dai l aproprieta visible o altro a true e come contenitore il form

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.724
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: Creare un Menu senza usare l'Editor-Menu, ma da codice
« Risposta #4 il: 19 Marzo 2012, 20:18:24 »
dovrebbe essere la stessa cosa , gli dai la proprieta visible o altro a true e come contenitore il form

...ci sono quasi.....  :coder:

Codice: gambas [Seleziona]

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
« Ultima modifica: 19 Marzo 2012, 20:30:10 da vuott »
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.724
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: Creare un Menu senza usare l'Editor-Menu, ma da codice
« Risposta #5 il: 19 Marzo 2012, 22:18:55 »
Per scatenare l'evento del clic, quando si sceglie la voce di un sotto-menu, faccio così:

Codice: gambas [Seleziona]

...
    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:
Codice: gambas [Seleziona]

....
 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 ?  ???
« Ultima modifica: 20 Marzo 2012, 15:16:34 da vuott »
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline fsurfing

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.482
    • Mostra profilo
Re: Creare un Menu senza usare l'Editor-Menu, ma da codice
« Risposta #6 il: 19 Marzo 2012, 22:49:12 »
io ho provato così e funge:

Codice: gambas [Seleziona]

' 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

« Ultima modifica: 19 Marzo 2012, 22:51:15 da fsurfing »

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.724
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: Creare un Menu senza usare l'Editor-Menu, ma da codice
« Risposta #7 il: 20 Marzo 2012, 00:55:32 »
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:

Codice: gambas [Seleziona]

......
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:
Codice: gambas [Seleziona]

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 !  :-\
« Ultima modifica: 20 Marzo 2012, 01:29:08 da vuott »
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline milio

  • Senatore Gambero
  • ******
  • Post: 1.273
  • Chi parla poco dice tanto...
    • Mostra profilo
Re: Creare un Menu senza usare l'Editor-Menu, ma da codice
« Risposta #8 il: 20 Marzo 2012, 07:55:32 »
@vuott

Tu hai scritto:

Object.Attach(mn1, mn, "ev")

Ma dovevi 'attaccare' l'oggetto alla classe del Form e non al menu...

Object.Attach(mn1, Me, "ev") 

Offline milio

  • Senatore Gambero
  • ******
  • Post: 1.273
  • Chi parla poco dice tanto...
    • Mostra profilo
Re: Creare un Menu senza usare l'Editor-Menu, ma da codice
« Risposta #9 il: 20 Marzo 2012, 07:58:16 »
E comunque il metodo di fsurfing non e' una 'scappatoia', ma bensì il modo di mettere più oggetti nello stesso gruppo via codice.  :ok:

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.724
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: Creare un Menu senza usare l'Editor-Menu, ma da codice
« Risposta #10 il: 20 Marzo 2012, 15:11:46 »
Ma dovevi 'attaccare' l'oggetto alla classe del Form e non al menu...

Object.Attach(mn1, Me, "ev")  

Ecco qua ! Trovata la soluzione !  :coder: Grazie Milio !



E comunque il metodo di fsurfing non e' una 'scappatoia', ma bensì il modo di mettere più oggetti nello stesso gruppo via codice.
Ho usato un termine in modo improprio  :-X , è vero, volevo solo intendere che era una efficace "soluzione" alternativa, diversa da quella dell' "Object.Attach(...), dalla quale ero partito.


Con le due soluzioni di entrambi voi, posso dichiarare "risolta" la questione.

Colgo l'occasione per ringraziare nuovamente fsurfing e te, milio.  :ciao:
« Ultima modifica: 20 Marzo 2012, 15:23:18 da vuott »
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »