Autore Topic: [Risolto]Intercettare selezione di menù  (Letto 4062 volte)

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.243
  • Tonno verde
    • Mostra profilo
Re:[Risolto]Intercettare selezione di menù
« Risposta #15 il: 12 Marzo 2020, 18:25:37 »
In questo caso il MenuButton non si troverà sempre nella stessa posizione in cui si trova sul nostro desktop.

...non capisco il perché.   ??? :-X

Forse dovevo precisare (e comunque andrebbe verificato bene) a meno che il menubutton non sia l'unico e posizionato come primo button della toolbar...

Secondo me forse si potrebbe provare a chiedere a Minisini di aggiungere se possibile l'evento focus (o enter e leave) dei menu.
Se si è interessati basta iscriversi al bugtracker e postare una richiesta.
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.720
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:[Risolto]Intercettare selezione di menù
« Risposta #16 il: 12 Marzo 2020, 18:27:38 »
Secondo me forse si potrebbe provare a chiedere a Minisini di aggiungere se possibile l'evento focus (o enter e leave) dei menu.
Se si è interessati basta iscriversi al bugtracker e postare una richiesta.

Corvina, effettivamente devi valutare questa possibilità suggerita da Gianluigi.
« 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.720
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:[Risolto]Intercettare selezione di menù
« Risposta #17 il: 12 Marzo 2020, 19:44:53 »
mi scuso perché si tratta di un post di richiesta aiuto e non uno per dare aiuto.
Non c'è necessità di scusarsi, poiché il forum intende in particolare offrire proprio "aiuto" a chi riscontra problemi e ostacoli nella programmazione con Gambas.


... dato che sono neofita di questo linguaggio...
Colgo l'occasione per segnalare nuovamente collegamenti web per lo studio di Gambas:

Sito ufficiale di Gambas:
 - http://gambas.sourceforge.net/en/main.html

Wiki ufficiale di Gambas:
 - http://gambaswiki.org/wiki

Forum, Wiki ed altri siti esistenti su Gambas:
 - https://www.gambas-es.org/forum.php
 - http://www.gambasforge.org/
 - http://www.gambas-club.de/index.php
 - https://forum.gambas.one/
 - http://www.gambaslinux.fr/
 - https://www.gambas-it.org/smf/
 - http://www.gambas-it.org/wiki/index.php?title=Pagina_principale
 - https://de.wikibooks.org/wiki/Gambas
 - http://www.gambasforge.org/wiki
 - http://sologambas.blogspot.it/p/indice.html
 - https://cursogambas.blogspot.com/p/indice.html
 - https://pigalore.miraheze.org/wiki/Main_Page
 - http://icculus.org/piga/

Testi e manuali esistenti:
 - http://gambaswiki.org/wiki/doc/book?nh&l=en
 - https://en.wikibooks.org/wiki/Programming_Gambas_from_Zip
« Ultima modifica: 13 Marzo 2020, 00:27:38 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 Corvina

  • Gamberetto
  • *
  • Post: 10
    • Mostra profilo
Re:[Risolto]Intercettare selezione di menù
« Risposta #18 il: 13 Marzo 2020, 09:41:06 »
Ciao, certo chiedere di inserire l'evento sarebbe la cosa più pulita da fare, anche perchè ovviamente un timer è un controllo "dispendioso" (almeno in Windows)

In attesa però ho implementato e modificato il codice di vuott e ho ottenuto il risultato che volevo, sia per il menù (che appare premendo il menù button), sia per l'eventuale sotto menù.

Gianluigi , perchè dici che i menù button non stanno sempre nella stessa posizione?

In ogni caso io non considerato nessuna coordinata fissa. Ogni controllo (tranne i menù) ha la proprietà ScreenX e ScreenY, dunque sappiamo sempre dove sono e il menù parte sempre dalla X del bottone e dalla sua Y + la sua H.  Stessa cosa i sotto menù che hanno una X che parte dalla X del bottone + la len della parola più lunga, e una Y che si riferisce al menù selezionato. Non è preciso al millimetro ma per adesso che sono all'inizio dell'applicazione pò bastare.

Qui il codice, magari viene fuori un idea per ottimizzarlo

Codice: [Seleziona]
Public Sub tmrMouse_Timer()
 
  Dim c As Menu
  Dim cc As Menu
  Dim rects As New Rect[]
  Dim rt As Rect
  Dim idxs As New Integer[]
  Dim idxs2 As New Integer[]
  Dim idx As Integer = 0
  Dim iRt As Integer
  Dim longStr As String
 
  If Not IsNull(selMenu)
      If Not selMenu.Closed Then
     
        For Each c In selMenu.Children
          rt = New Rect(scrnX, (scrnY + (25 * rects.Count)), rectW, rectH)
          rects.Add(rt)
          idxs.Add(rects.Count)
          idxs2.Add(0)
        Next
       
        For Each c In selMenu.Children
          If c.Children.Count > 0 Then
           
            If Not c.Closed Then
           
              'prima cercare la stringa piç lunga
              For iRt = 0 To (c.Children.count - 1)
                 If Len(c.Children[iRt].Caption) > Len(longStr) Then
                   longStr = c.Children[iRt].Caption
                 Endif
              Next
             
              rectW = Me.Font.TextWidth(longStr) + 50
           
              For iRt = 0 To (c.Children.count - 1)
             
                rt = New Rect((scrnX + rectW), (rects[idx].Y + (25 * iRt)), rectW, rectH)
             
                rects.Add(rt)
                idxs.Add(idx)
                idxs2.Add(iRt)
             
              Next
            Endif
          Endif
         
          idx = idx + 1   
       
        Next
       
        lblMessage.Text = Null
       
        For iRt = 0 To (rects.count - 1)
         
          If rects[iRt].Contains(Mouse.ScreenX, Mouse.ScreenY) Then
             
              If iRt < selMenu.Children.Count Then
                lblMessage.text = selMenu.Children[iRt].Tag
              Else
                lblMessage.text = selMenu.Children[idxs[iRt]].Children[idxs2[iRt]].Tag
              Endif
             
              Break
          Endif
         
        Next
    Endif
  Endif
End

Public Sub btnMenu_Enter()
 
  Dim c As Menu
  Dim cc As Menu
 
 
  Dim longStr As String
 
  scrnX = Last.ScreenX + 10
  scrnY = (Last.ScreenY + Last.Height + 10)
 
  For Each c In Me.Menus
    If c.name = Last.Menu Then
       
       selMenu = c
       
       If c.Children.Count > 0 Then
          For Each cc In c.Children
            If Len(cc.Caption) > Len(longStr) Then
                longStr = cc.Caption
            Endif
          Next
       Endif     
    Endif
  Next
 
  rectH = Last.Font.TextHeight(longStr)
  rectW = Last.Font.TextWidth(longStr) + 30

End

« Ultima modifica: 13 Marzo 2020, 11:31:11 da Gianluigi »

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.720
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:[Risolto]Intercettare selezione di menù
« Risposta #19 il: 13 Marzo 2020, 10:16:28 »
certo chiedere di inserire l'evento sarebbe la cosa più pulita da fare...
E' vero, ma bisogna pur dire che non avere sempre la "pappa pronta" a disposizione stimola l'apprendimento e la curiosità.   ;D



...un timer è un controllo "dispendioso" (almeno in Windows)
Come puoi vedere, infatti, nel mio breve codice l'oggetto "Timer" viene attivato per il solo tempo di apertura della finestra del Menu: quando il Menu poi viene chiuso (cfr. subroutine Menu1_Hide() ), il Timer viene contestualmente arrestato.



Gianluigi , perchè dici che i menù button non stanno sempre nella stessa posizione?
Questo resta il mistero principale.
« 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.720
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:[Risolto]Intercettare selezione di menù
« Risposta #20 il: 13 Marzo 2020, 10:28:05 »
  Dim idx As Integer = 0
In Gambas, a differenza del C, una variabile è sempre impostata a 0 in modo predefinito.


   
  If Not IsNull(selMenu)
Che cosa è "selMenu" ?



... dato che sono neofita di questo linguaggio...
Eh, però vedo che te la cavi bene !
« Ultima modifica: 13 Marzo 2020, 10:31:11 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 Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.243
  • Tonno verde
    • Mostra profilo
Re:[Risolto]Intercettare selezione di menù
« Risposta #21 il: 13 Marzo 2020, 11:41:02 »


Gianluigi , perchè dici che i menù button non stanno sempre nella stessa posizione?

... Ogni controllo (tranne i menù) ha la proprietà ScreenX e ScreenY, ...


Hai perfettamente ragione, mai dare per scontato qualcosa senza prima provarlo, scusa.
Io ho ragionato (si fa per dire) basandomi sul codice di vuott riferito ai menu.

Ho inserito il codice del tuo post tra i tag corretti (pulsante #) la prossima volta fallo tu, grazie.

@Corvina @vuott
A me il MenuButton sulla master non funziona a dovere (oppure non so più farlo funzionare  :-\ ) a voi?
Ho anche chiesto sulla ML

 :ciao:
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.720
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:[Risolto]Intercettare selezione di menù
« Risposta #22 il: 13 Marzo 2020, 12:05:04 »
Io ho ragionato (si fa per dire) basandomi sul codice di vuott riferito ai menu.
Eeeeeh ?!   :o :rolleyes:
« 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 Corvina

  • Gamberetto
  • *
  • Post: 10
    • Mostra profilo
Re:[Risolto]Intercettare selezione di menù
« Risposta #23 il: 13 Marzo 2020, 12:18:07 »
  Dim idx As Integer = 0
In Gambas, a differenza del C, una variabile è sempre impostata a 0 in modo predefinito.


   
  If Not IsNull(selMenu)
Che cosa è "selMenu" ?

selMenù è il menù del menù button su cui sono. Io ho 6 menù button raggruppati e nell'evento [group]_enter imposto selMenu con quello del bottone in cui sono. E' per creare solo i rettangoli dello specifico menù, se no li avrei dovuti creare tutti...




... dato che sono neofita di questo linguaggio...
Eh, però vedo che te la cavi bene !

Offline Corvina

  • Gamberetto
  • *
  • Post: 10
    • Mostra profilo
Re:[Risolto]Intercettare selezione di menù
« Risposta #24 il: 13 Marzo 2020, 12:24:07 »

Ho inserito il codice del tuo post tra i tag corretti (pulsante #) la prossima volta fallo tu, grazie.


Grazie non sapevo come fare....effettivamente non frequento molti forum

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.243
  • Tonno verde
    • Mostra profilo
Re:[Risolto]Intercettare selezione di menù
« Risposta #25 il: 13 Marzo 2020, 12:30:11 »
Io ho ragionato (si fa per dire) basandomi sul codice di vuott riferito ai menu.
Eeeeeh ?!   :o :rolleyes:

 :violent:

Invece di fare tanto il furbo, potresti rispondere alla domanda:
Riesci a creare via Editor dalla IDE un menu con sotto-menu che funzioni come popup in un MenuButton?
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.243
  • Tonno verde
    • Mostra profilo
Re:[Risolto]Intercettare selezione di menù
« Risposta #26 il: 13 Marzo 2020, 12:32:06 »

Ho inserito il codice del tuo post tra i tag corretti (pulsante #) la prossima volta fallo tu, grazie.


Grazie non sapevo come fare....effettivamente non frequento molti forum

Prego, dai un'occhiata qui:
https://www.gambas-it.org/smf/index.php?topic=7397.msg47180#new
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.720
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:[Risolto]Intercettare selezione di menù
« Risposta #27 il: 13 Marzo 2020, 12:49:36 »
Invece di fare tanto il furbo, potresti rispondere alla domanda:
Riesci a creare via Editor dalla IDE un menu con sotto-menu che funzioni come popup in un MenuButton?
Stamattina non posso.
Comunque io l'oggetto MenuButton non l'ho mai usato.
« 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 Corvina

  • Gamberetto
  • *
  • Post: 10
    • Mostra profilo
Re:[Risolto]Intercettare selezione di menù
« Risposta #28 il: 13 Marzo 2020, 17:56:55 »
Io ho ragionato (si fa per dire) basandomi sul codice di vuott riferito ai menu.
Eeeeeh ?!   :o :rolleyes:

 :violent:

Invece di fare tanto il furbo, potresti rispondere alla domanda:
Riesci a creare via Editor dalla IDE un menu con sotto-menu che funzioni come popup in un MenuButton?

Dall' editor per creare un popup_menu basta che nell'elemento padre la proprietà caption sia vuota. Poi nel menu button valorizzi la proprietà menù (ti spunta l'elenco dei popup_menu) e io ho anche settato menuonly a true.

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.243
  • Tonno verde
    • Mostra profilo
Re:[Risolto]Intercettare selezione di menù
« Risposta #29 il: 13 Marzo 2020, 18:30:23 »

Dall' editor per creare un popup_menu basta che nell'elemento padre la proprietà caption sia vuota. Poi nel menu button valorizzi la proprietà menù (ti spunta l'elenco dei popup_menu) e io ho anche settato menuonly a true.

Si, corretto, ma pare che nella master (la versione di sviluppo) ci sia un bug, almeno credo.
Se clicchi sul menu Help della IDE (quello col punto interrogativo) > Informazioni di sistema, nella finestra che appare, sotto System c'è il tipo di Gambas che stai usando.
Puoi comunicarmelo?
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro