Visualizza post

Questa sezione ti permette di visualizzare tutti i post inviati da questo utente. N.B: puoi vedere solo i post relativi alle aree dove hai l'accesso.


Post - Corvina

Pagine: [1]
1
Programmazione / Re:[Risolto]Intercettare selezione di menù
« 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

2
Programmazione / Re:[Risolto]Intercettare selezione di menù
« 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

3
Programmazione / Re:[Risolto]Intercettare selezione di menù
« 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

4
Programmazione / Re:[Risolto]Intercettare selezione di menù
« 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.

5
Programmazione / Re:[Risolto]Intercettare selezione di menù
« 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

6
Programmazione / Re:[Risolto]Intercettare selezione di menù
« 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 !

7
Programmazione / Re:[Risolto]Intercettare selezione di menù
« 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


8
Programmazione / Re:Intercettare selezione di menù
« il: 12 Marzo 2020, 10:08:41 »
Citazione
"...Poi d'un tratto a me doni, benigno, la tua luce."
Beato te, qui buio più totale!  :'(
 :ciao:
PS Sono contento per Corvina. San Midi ti ha salvato!

Da oggi San Midi ha una devota in più!

9
Programmazione / Re:Intercettare selezione di menù
« il: 12 Marzo 2020, 09:47:20 »
Grazie vuott, il tuo codice funziona perfettamente. Purtroppo avevo dimenticato un particolare. Il mio è un popup menù che viene fuori da un menuButton. Ho testato il tuo codice , sostituendo a Me il nome del menuButton, ma i riferimenti risultano un pò sballati. Comunque lavorando un pò sulle coordinate dovrei riuscire. Grazie mille!

10
Programmazione / [Risolto]Intercettare selezione di menù
« il: 11 Marzo 2020, 17:57:03 »
Ciao a tutti. Questo è il mio primo post e mi scuso perché si tratta di un post di richiesta aiuto e non uno per dare aiuto. Ma dato che sono neofita di questo linguaggio non poteva forse essere altrimenti. Vado al dunque. Ho creato una semplice form con un menù (fatto con l'editor). Volevo sapere se è possibile intercettare l'evento select del menuItem, no il click solo la selezione. In pratica in basso alla form ho una label che dovrebbe contenere la descrizione estesa del menù che sto via via scorrendo con il mouse (o tasto ovviamente). Idee?

Pagine: [1]