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

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.720
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:[Risolto]Intercettare selezione di menù
« Risposta #30 il: 13 Marzo 2020, 18:49:54 »
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.
...e brava la "neofita" !   ;D

Dalla tua  spiegazione ho generato un'apposita pagina della nostra Wiki, ovviamente citando l'autrice del suggerimento:

    https://www.gambas-it.org/wiki/index.php?title=Creare_via_Editor_dalla_IDE_un_Menu_con_sotto-menu_che_funzioni_come_popup_in_un_MenuButton
« 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.244
  • Tonno verde
    • Mostra profilo
Re:[Risolto]Intercettare selezione di menù
« Risposta #31 il: 13 Marzo 2020, 19:02:49 »

...e brava la "neofita" !   ;D

...

Si brava davvero infatti, se non specificava la procedura non mi sarei accorto che infilavo il menu in popupmenu invece che in menu.  :rolleyes:

Pazienza, da quando mi sono incartato con Git non ne azzecco più una...

Proverò con una cura ricostituente.

Va da se che non serve più sapere con che versione di Gambas sta operando Corvina.

 :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 #32 il: 13 Marzo 2020, 19:15:29 »
Pazienza, da quando mi sono incartato con Git non ne azzecco più una...

Proverò con una cura ricostituente.

Mac-chi-na del Tem-po ! Mac-chi-na del Tem-po !
Da quando hai abbandonato il Codice dei Codici, da scrivere, ti sei perso.
« 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.244
  • Tonno verde
    • Mostra profilo
Re:[Risolto]Intercettare selezione di menù
« Risposta #33 il: 13 Marzo 2020, 20:08:02 »
Mac-chi-na del Tem-po ! Mac-chi-na del Tem-po !
Da quando hai abbandonato il Codice dei Codici, da scrivere, ti sei perso.

Ben altri e più capaci di me, come tu sai bene, sono impegnati in cotanto codice  ;D
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.244
  • Tonno verde
    • Mostra profilo
Re:[Risolto]Intercettare selezione di menù
« Risposta #34 il: 15 Marzo 2020, 17:34:41 »
Qui il codice, magari viene fuori un idea per ottimizzarlo
...

Ho dato un'occhiata al tuo codice purtroppo non approfondita come avrei voluto, e sembra che le mie prime impressioni siano confermate.
Nota che dico sembra :)

Vedo troppi numeri fissi es. 25 per posizionare l'Y del rettangolo.
Questo numero non può essere fisso, deve essere recuperato dall'altezza del menu che probabilmente deriva dall'altezza del carattere più una percentuale per il padding, altrimenti su un OS con carattere diverso (più grande o più piccolo) causerà dei malfunzionamenti.

Lo stesso discorso vale per la larghezza.

A proposito di larghezza andrebbe tenuto conto delle scorciatoie da tastiera (If cc.Shortcut Then Print "TRUE").
Se ti attieni alla riga più lunga per tutti i menu e sotto-menu (mancano i sotto sotto-menu) cosa accadrebbe se i menu fossero molto più corti dei sotto-menu?

Insisto iscriviti al bugtraker e chiedi a Benoit Minisini di inserire un evento utile allo scopo.
Però tieni conto che l'eventuale nuova opzione sarà immediatamente disponibile solo sulla versione master di Gambas.
È meglio sbrigarsi se si vuole poterne usufruire sulla prossima stabile.

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

Offline Corvina

  • Gamberetto
  • *
  • Post: 10
    • Mostra profilo
Re:[Risolto]Intercettare selezione di menù
« Risposta #35 il: 16 Marzo 2020, 09:02:36 »
Citazione
Dalla tua  spiegazione ho generato un'apposita pagina della nostra Wiki, ovviamente citando l'autrice del suggerimento:

    https://www.gambas-it.org/wiki/index.php?title=Creare_via_Editor_dalla_IDE_un_Menu_con_sotto-menu_che_funzioni_come_popup_in_un_MenuButton

Troppo onore
Grazie

Offline Corvina

  • Gamberetto
  • *
  • Post: 10
    • Mostra profilo
Re:[Risolto]Intercettare selezione di menù
« Risposta #36 il: 16 Marzo 2020, 09:06:40 »

Ho dato un'occhiata al tuo codice purtroppo non approfondita come avrei voluto, e sembra che le mie prime impressioni siano confermate.
Nota che dico sembra :)

Vedo troppi numeri fissi es. 25 per posizionare l'Y del rettangolo.
Questo numero non può essere fisso, deve essere recuperato dall'altezza del menu che probabilmente deriva dall'altezza del carattere più una percentuale per il padding, altrimenti su un OS con carattere diverso (più grande o più piccolo) causerà dei malfunzionamenti.

Lo stesso discorso vale per la larghezza.

A proposito di larghezza andrebbe tenuto conto delle scorciatoie da tastiera (If cc.Shortcut Then Print "TRUE").
Se ti attieni alla riga più lunga per tutti i menu e sotto-menu (mancano i sotto sotto-menu) cosa accadrebbe se i menu fossero molto più corti dei sotto-menu?

Insisto iscriviti al bugtraker e chiedi a Benoit Minisini di inserire un evento utile allo scopo.
Però tieni conto che l'eventuale nuova opzione sarà immediatamente disponibile solo sulla versione master di Gambas.
È meglio sbrigarsi se si vuole poterne usufruire sulla prossima stabile.

 :ciao:

Grazie dei suggerimenti. Per il bugtraker lo faccio entro oggi

Offline Corvina

  • Gamberetto
  • *
  • Post: 10
    • Mostra profilo
Re:[Risolto]Intercettare selezione di menù
« Risposta #37 il: 16 Marzo 2020, 09:08:44 »

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?

Ecco, ma non mi fare domande hardware perchè lì sono una vera schiappa. Lavoro su di una macchina virtuale che mi ha preparato il mio collega spagnolo.

Codice: [Seleziona]
[System]
Gambas=3.11.4
OperatingSystem=Linux
Kernel=3.10.0-957.27.2.el7.x86_64
Architecture=x86_64
Distribution=redhat CentOS Linux release 7.6.1810 (Core)
Desktop=MATE
Theme=Windows
Language=es_ES.UTF-8
Memory=7803M

[Libraries]
Cairo=libcairo.so.2.11512.0
DBus=libdbus-1.so.3.14.14
GTK+2=libgtk-x11-2.0.so.0.2400.31
OpenGL=libGL.so.1.7.0

[Environment]
B_LKPATH=<home>/pgr:.
B_MACAD=00:19:5B:6F:59:FE
B_MACLO=15
B_MACNA=1
B_MACNU=8
B_MACPC=118
B_MACPW=DFHLLH
B_MACSN=2130
B_PATH=<home>/files:.
B_TERMTYPE=COHERENT
B_YR2000=50
DBUS_SESSION_BUS_ADDRESS=unix:abstract=/tmp/dbus-QzvpQP3gX2,guid=d6a35df8f49987b239af415b5e6f1c63
DESKTOP_SESSION=mate
DISPLAY=:0
EDITOR=vi
GB_GUI=gb.qt4
GDMSESSION=mate
GDM_LANG=es_ES.UTF-8
GIO_LAUNCHED_DESKTOP_FILE=<home>/Escritorio/GAMBAS.desktop
GIO_LAUNCHED_DESKTOP_FILE_PID=6965
GTK_IM_MODULE=gtk-im-context-simple
GTK_OVERLAY_SCROLLING=0
HISTCONTROL=ignoredups
HISTSIZE=1000
HOME=<home>
HOSTNAME=<hostname>
IMSETTINGS_INTEGRATE_DESKTOP=yes
IMSETTINGS_MODULE=none
LANG=es_ES.UTF-8
LESSOPEN=||/usr/bin/lesspipe.sh %s
LOGNAME=<user>
MAIL=/var/spool/mail/<user>
MATE_DESKTOP_SESSION_ID=this-is-deprecated
OLDPWD=<home>
PATH=<home>/bin:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin:<home>/pgr:<home>/bin
PWD=<home>/files
QT_GRAPHICSSYSTEM_CHECKED=1
QT_IM_MODULE=xim
SESSION_MANAGER=local/unix:@/tmp/.ICE-unix/4808,unix/unix:/tmp/.ICE-unix/4808
SHELL=/bin/bash
SHLVL=1
SSH_AGENT_PID=4971
SSH_AUTH_SOCK=/run/user/1001/keyring/ssh
TERM=dumb
TTY=
TZ=:/etc/localtime
USER=<user>
USERNAME=<user>
WINDOWPATH=1
XAUTHORITY=/run/gdm/auth-for-<user>-UMYZf4/database
XDG_CURRENT_DESKTOP=MATE
XDG_DATA_DIRS=<home>/.local/share/flatpak/exports/share/:/var/lib/flatpak/exports/share/:/usr/local/share/:/usr/share/
XDG_RUNTIME_DIR=/run/user/1001
XDG_SEAT=seat0
XDG_SESSION_DESKTOP=mate
XDG_SESSION_ID=1
XDG_SESSION_TYPE=x11
XDG_VTNR=1
XMODIFIERS=@im=none
_=/usr/bin/mate-session
« Ultima modifica: 16 Marzo 2020, 09:11:14 da Corvina »

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.244
  • Tonno verde
    • Mostra profilo
Re:[Risolto]Intercettare selezione di menù
« Risposta #38 il: 16 Marzo 2020, 23:56:58 »
Grazie dei suggerimenti. Per il bugtraker lo faccio entro oggi

Prego, speriamo che ti risponda positivamente...
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.244
  • Tonno verde
    • Mostra profilo
Re:[Risolto]Intercettare selezione di menù
« Risposta #39 il: 17 Marzo 2020, 00:03:41 »

Ecco,


Grazie, ma come detto il bug era nella mia testa  ;)

Citazione
ma non mi fare domande hardware perchè lì sono una vera schiappa.

Tranquilla anche io con l'hardware non ho un buon rapporto  :)
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 #40 il: 17 Marzo 2020, 01:04:28 »
Tranquilla anche io con l'hardware non ho un buon rapporto  :)

.......figuriamoci, allora, con la costruzione di una Macchina del Tempo !

« 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.244
  • Tonno verde
    • Mostra profilo
Re:[Risolto]Intercettare selezione di menù
« Risposta #41 il: 18 Maggio 2020, 17:16:21 »
Grazie dei suggerimenti. Per il bugtraker lo faccio entro oggi

Prego, speriamo che ti risponda positivamente...

Visto che Minisini ha risposto picche riguardo alla richiesta delle nuova proprietà Select per i menu, propongo questo nuovo calcolo della dimensione dei menu che dovrebbe tener conto delle diverse situazioni Desktop.

Codice: [Seleziona]
Private Menu1 As Menu
Private Menu2 As Menu
Private Menu3 As Menu
Private Menu4 As Menu
Private tm As Timer
Private $iOLdText As Integer
Private $iNewText As Integer
Private $iOldShortcut As Integer
Private $iNewShortcut As Integer
Private $iPicture As Integer
Private $iFirstMenuWidth As Integer
Private $hLabel As Label

Public Sub Form_Open()

  Dim DS As Integer = Desktop.Scale
  Dim hMenu, hMenu2 As Menu
  Dim hSpring As Spring
  Dim hHBox As HBox

  With Menu1 = New Menu(Me) As "Menu1"
    .Caption = "Menu1"
  End With
  With Menu2 = New Menu(Menu1) As "Menu2"
    .Caption = "Menu2"
    .Shortcut = "ALT+O"
    .Picture = Picture["icon:/16/open"]
    .Tag = "Questo è il Menu2 !"
  End With
  With Menu3 = New Menu(Menu1) As "Menu3"
    .Caption = "Menu menu menu3"
    .Tag = "Questo è il Menu3 !"
  End With
  With Menu4 = New Menu(Menu1) As "Menu4"
    .Caption = "Menu menu 4"
    .Shortcut = "CTRL+M"
    .Tag = "Questo è il Menu4 !"
  End With
  Me.Arrangement = Arrange.Vertical
  Me.Margin = True
  hSpring = New Spring(Me)
  hHBox = New HBox(Me)
  hHBox.H = 40
  $hLabel = New Label(hHBox)
  $hLabel.Expand = True
  ' Calcolo che dovrebbe tenere conto degli spazi basandosi su Desktop.Scale
  For Each hMenu In Me.Menus
    Print hMenu.Name
    If hMenu.Children.Count > 0 Then Print "CHILDREN"
    For Each hMenu2 In hMenu.Children
      Print hMenu2.Name
      If hMenu2.Picture Then $iPicture = 16
      If hMenu2.Shortcut Then
        $iNewShortcut = Me.Font.TextWidth(hMenu2.Shortcut)
        If $iOldShortcut < $iNewShortcut Then $iOldShortcut = $iNewShortcut
      Endif
      $iNewText = Me.Font.TextWidth(hMenu2.Caption)
      If $iOLdText < $iNewText Then $iOLdText = $iNewText
    Next
    $iFirstMenuWidth = DS + $iPicture + (DS * 3) + $iOLdText + (DS * 6) + $iOldShortcut
  Next

End

Public Sub Menu1_Show()

  With tm = New Timer As "Tempus"
    .Delay = 50
    .Start
  End With

End

Public Sub Tempus_Timer()

  Dim DS As Integer = Desktop.Scale
  Dim hRect2 As New Rect(Menu1.Window.X + DS, Menu1.Window.Y + (DS * 3), $iFirstMenuWidth, DS * 3)
  Dim hRect3 As New Rect(Menu1.Window.X + DS, Menu1.Window.Y + (DS * 3) * 2, $iFirstMenuWidth, DS * 3)
  Dim hRect4 As New Rect(Menu1.Window.X + DS, Menu1.Window.Y + (DS * 3) * 3, $iFirstMenuWidth, DS * 3)

  $hLabel.Text = Null
  If hRect2.Contains(Mouse.ScreenX, Mouse.ScreenY) Then $hLabel.Text = Menu2.Tag
  If hRect3.Contains(Mouse.ScreenX, Mouse.ScreenY) Then $hLabel.Text = Menu3.Tag
  If hRect4.Contains(Mouse.ScreenX, Mouse.ScreenY) Then $hLabel.Text = Menu4.Tag

End

Public Sub Menu1_Hide()

  tm.Stop

End

 :ciao:

Dimenticavo naturalmente usando il componente gb.gui.qt (no gtk)
« Ultima modifica: 18 Maggio 2020, 18:00:57 da Gianluigi »
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro