Autore Topic: [Risolto] Associazione tasti funzione  (Letto 8388 volte)

Offline tornu

  • Gran Maestro dei Gamberi
  • *****
  • Post: 855
    • Mostra profilo
Re:Associazione tasti funzione
« Risposta #15 il: 14 Settembre 2015, 22:40:01 »
...ma dal Form2 cosa deve succedere, invece ?

Ciao vuott,
 ??? mi meraviglio della tua domanda.
Cerco di chiarire meglio il motivo per cui ho chiesto aiuto al Forum.
Il progetto a cui stò lavorando come ho detto nel post precedente e ben più corposo del piccolo test
che ho allegato alla discussione, questo perchè per mia abitudine cerco di non intasare la discussione
postando l'intero progetto, con annesso database, spiegazioni sulla logica per cui ho implementato
certe funzioni, ecc..., quindi cerco, come in questo caso spunti dal Forum per ragionare e magari trovare una soluzione
al problema che mi si presenta con dei piccoli esempi.
Cosa deve succedere in Form2?
Ammetti di avere in Form1 un'anagrafica articoli, dovendo inserire per esempio il fornitore, si apre Form2 che nell' ipotesi
mi da la possibilità ci ricercare la ragione sociale del fornitore, da cui lo prelevo, se per errore premo F3 che nel codice di
Gianluigi chiude l'applicazione, secondo te che succede ai dati già inseriti in Form1???
Questo e solo un'esempio, ma ti posso dire (per mia abitudine di lavoro) che in molti casi l'uso dei tasti funzione è molto
più comodo e veloce del mouse, e per tanti altri motivi.
Il software è come il sesso, è meglio quando è libero. (Linus Torvalds)

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.309
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:Associazione tasti funzione
« Risposta #16 il: 15 Settembre 2015, 10:58:20 »
se per errore premo F3 che nel codice di Gianluigi chiude l'applicazione, secondo te che succede ai dati già inseriti in Form1???
Mi domando che fine facciano quei dati anche ricreando un nuovo Form1, come previsto nella routine " Public Sub Button1_Click() " della Classe Form2.class del tuo progetto allegato.



ti posso dire (per mia abitudine di lavoro) che in molti casi l'uso dei tasti funzione è molto
più comodo e veloce del mouse, e per tanti altri motivi.
Sì, questa è una cosa nota che io condivido ed applico costantemente.
« Ultima modifica: 15 Settembre 2015, 10:58:57 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 Picavbg

  • Senatore Gambero
  • ******
  • Post: 1.620
    • Mostra profilo
Re:Associazione tasti funzione
« Risposta #17 il: 15 Settembre 2015, 12:52:26 »
Ciao Gianluigi,
continuando a cercare una soluzione, ho riprovato attentamente il tuo codice per cercare qualche spunto per
una soluzione senza rivoluzionare totalmente il codice (circa 30 Form) del mio progetto quasi terminato
e mi sono accorto che non fuziona come vorrei io, ti spiego:
se apri la Form2 e la tieni aperta senza ripassare in Form1 premendo il tasto funzione F3 il progetto si chiude.
A me serve che si chiuda solamente dalla Form1 dove si trova il pulsante Chiudi (F3)
Quando richiami  la Form2 , devi utilizzare il metodo Frm2.ShowModal() . Così facendo rendi la Form2 subordinata alla Form1 e qualsiaisi azione svolgi dentro la Form2, estranea alla stessa, non viene intercettata. Per agire sugli objetct della Form1 dvovrai uscire dalla Form2, tornando alla Form1 con:
Me.Close inserita in qualsiasi punto della Form2,class
 :ciao:
:ciao:

Offline tornu

  • Gran Maestro dei Gamberi
  • *****
  • Post: 855
    • Mostra profilo
Re:Associazione tasti funzione
« Risposta #18 il: 15 Settembre 2015, 20:42:31 »
Mi domando che fine facciano quei dati anche ricreando un nuovo Form1, come previsto nella routine " Public Sub Button1_Click() " della Classe Form2.class del tuo progetto allegato.
Scusa vuott se non rispondo direttamente alla tua domanda, altrimenti discuttiamo di una logica che non esiste,
in quanto la tua domanda è rivolta all'esempio test che serviva solo per avere uno spunto e la mia spiegazione
precedente era solo per farti un'esempio di applicazione.
Quindi il problema non è capire che fine fanno i dati di Form1 dell'esempio test, ma capire come il metodo KeyPress
funziona (e a me non è ancora del tutto chiaro), perchè questo mi sembra dai vostri suggerimenti che devo usare.

Quando richiami  la Form2 , devi utilizzare il metodo Frm2.ShowModal() . Così facendo rendi la Form2 subordinata alla Form1 e qualsiaisi azione svolgi dentro la Form2, estranea alla stessa, non viene intercettata. Per agire sugli objetct della Form1 dvovrai uscire dalla Form2, tornando alla Form1 con:
Me.Close inserita in qualsiasi punto della Form2,class
 :ciao:
Ciao Picavbg,
ho provato ed effettivamente con l'utilizzo del metodo ShowModal funziona. Però non posso applicarlo perchè il progetto reale
come ho spiegato qualche post precedente l'ho impostato con la logica di apertura e chiusura delle Form inserito nell'esempio
test che ho allegato, dovrei sconvolgere tutto.

Quello che non riesco a spiegarmi prendendo in esame il mio codice (a prescindere dal metodo di gestione delle Form) ed inserendo il metodo KeyPress in Form1, e che all'avvio con Form1 visibile premo immediatamente F3 il programma si chiude, se passo in Form2 e ritorno in Form1 F3 non funziona più.

Il software è come il sesso, è meglio quando è libero. (Linus Torvalds)

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.309
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:Associazione tasti funzione
« Risposta #19 il: 15 Settembre 2015, 21:15:25 »
Quello che non riesco a spiegarmi prendendo in esame il mio codice (a prescindere dal metodo di gestione delle Form) ed inserendo il metodo KeyPress in Form1, e che all'avvio con Form1 visibile premo immediatamente F3 il programma si chiude, se passo in Form2 e ritorno in Form1 F3 non funziona più.
Ho notato che per far accadere quello che chiedi - prendendo il tuo codice - è necessario nella Classe Form2.class eliminare le parole As "Form1", nonché il Form principale deve essere nascosto e poi mostrato nuovamente.
..insomma a me funziona (con la seguente modalità un po' rozza) apportando queste modifiche nell'unica routine presente nella Classe Form2.class:
Codice: [Seleziona]
Public Sub Button1_Click()

  Dim FrmForm1 As Form1

   Me.Close()
   FrmForm1 = New Form1(FMain)
 
   FMain.Hide
   FMain.Raise

' ...o in alternativa:
'    FMain.Visible = False
'    FMain.Visible = True
 
End
« Ultima modifica: 15 Settembre 2015, 21:18:29 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 sotema

  • Maestro Gambero
  • ****
  • Post: 467
    • Mostra profilo
Re:Associazione tasti funzione
« Risposta #20 il: 15 Settembre 2015, 22:24:43 »
Ciao Tornu,
avevo inserito una risposta, non so se l'hai vista, che ho subito cancellata perché mi sono accorto di aver allegato i sorgenti errati.
Il problema consiste nel ciclo di attivazione/disattivazione di una Form. Quando apri la FMain ci inserisci Form1 che diviene la ActiveWindow
Nel momento in cui apri Form1 da Form2 ActiveWindow diventa FMain, quindi l'evento KeyPress non viene scatenato. Prova con i sorgenti che ti allego ora (sono quelli giusti)

Per approfondire il concetto di Application.ActiveWindow vedere: http://gambaswiki.org/wiki/comp/gb.qt4/application/activewindow
L'uomo ha inventato la bomba atomica, ma nessun topo al mondo costruirebbe una trappola per topi.
Albert Einstein

Offline tornu

  • Gran Maestro dei Gamberi
  • *****
  • Post: 855
    • Mostra profilo
Re:Associazione tasti funzione
« Risposta #21 il: 15 Settembre 2015, 22:53:58 »
..insomma a me funziona (con la seguente modalità un po' rozza) apportando queste modifiche nell'unica routine presente nella Classe Form2.class:
Codice: [Seleziona]
Public Sub Button1_Click()

  Dim FrmForm1 As Form1

   Me.Close()
   FrmForm1 = New Form1(FMain)
 
   FMain.Hide
   FMain.Raise

' ...o in alternativa:
'    FMain.Visible = False
'    FMain.Visible = True
 
End

Per me non ci sono modalità rozze, ma più strade percorribili per risolvere un problema, specialemente in
un liguaggio di programmazione, e comunque ti ringrazio per l'impegno che ci metti per cercare di dare una
mano di aiuto a tutti.
Tornando al codice che mi hai suggerito, mi spieghi in poche parole perchè quelle due istruzioni hanno fatto
funzionare il tutto (o quasi)?
Il quasi è dovuto al fatto che andando avanti nelle prove, sempre per cercare di capire, ho associato in Form2
un tasto funzione ad un oggetto come in Form1 ma non funziona >:(
Ancora non capisco completamente l'interazione del metodo KeyPress con le varie Form.

@sotema
Ciao sotema,
interessante la tua soluzione, devo studiarla e capirla bene per vedere se fà al caso mio.
Ho provato il codice che hai allegato, ma ha il problema già riscontrato in un suggerimento precedente, e cioè:
avviato il programma e Form1 visualizzata premendo F3, viene chiuso, e fin qui ok, ma se passi in Form2 e
ritorni in Form1, F3 non funziona più.
Riguardo la tua risposta cancellata, che ho fatto in tempo a leggere, hai ragione per quanto rigurda il fatto di
dare suggerimenti su un progetto non reale e di cui non vedi tutte le sue parti, rischiando che il tuo suggerimento
per quanto formalmente corretto (come successo in questa discussione) magari va ad impattare su altre parti di codice
e non funzionare.
Però penso che avvolte postare programmi interi, magari dotati di database (come nel mio caso) possa comunque non
sempre essere di aiuto, nel senso che dovresti poi spiegarne il funzionamento e la logica, specialmente se gestionali come
quelli a cui io mi dedico principalmente.
Il software è come il sesso, è meglio quando è libero. (Linus Torvalds)

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.309
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:Associazione tasti funzione
« Risposta #22 il: 15 Settembre 2015, 23:27:42 »
Per me non ci sono modalità rozze, ma più strade percorribili per risolvere un problema
Che vi siano più strade percorribili, questo è vero. Però, come ha affermato sotema: " ...la strada migliore deve essere ricercata a seconda delle condizioni esistenti e delle esgenze del momento. ". Da ciò deriva implicitamente che alcune delle restanti possibili strade sono più rozze.



Tornando al codice che mi hai suggerito, mi spieghi in poche parole perchè quelle due istruzioni hanno fatto
funzionare il tutto (o quasi)?
A mio modesto parere la motivazione va ricercata nella spiegazione che sotema, nuovamente, ti ha dato nel precedente suo intervento:
" Il problema consiste nel ciclo di attivazione/disattivazione di una Form. Quando apri la FMain ci inserisci Form1 che diviene la ActiveWindow "
Anche io avevo intuito questa circostanza; ed avevo infatti effettuato dei tentativi con la proprietà MainWindow ed altre della Classe Application, ma poi ho desistito. Resta il fatto che la soluzione un po' grezza, da me suggerita, è figlia di quell'intuizione.



Il quasi è dovuto al fatto che andando avanti nelle prove, sempre per cercare di capire, ho associato in Form2
un tasto funzione ad un oggetto come in Form1 ma non funziona
Tornerei, ricorrendo al Principio di Autorità, ancora una volta a sotema ed alla sua spiegazione .

Con ciò, dunque, aggiungerei nella Classe Form2.class una routine/evento Form_Open(), nuovamente adottando grezzamente i due metodi precedentemente adottati.
L'intera classe Form2.class diventerebbe allora così:
Codice: [Seleziona]
Public Sub Form_Open()

   FMain.Hide
   FMain.Raise
 
End


Public Sub Button1_Click()

Dim FrmForm1 As Form1

  Me.Close()
 
  FrmForm1 = New Form1(FMain)
 
   FMain.Hide
   FMain.Raise
   
End


Public Sub Form_KeyPress()
 
  Print "Sub Sotema auctoritate !"
 
End

Va aggiunto che la routine " Button2_Click() " della Classe Form1.class va leggermente modificata come segue:
Codice: [Seleziona]
Public Sub Button2_Click()

  Dim FrmForm2 As Form2

  Me.Close()

     FrmForm2 = New Form2(FMain)

End
« Ultima modifica: 16 Settembre 2015, 10:43:04 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 sotema

  • Maestro Gambero
  • ****
  • Post: 467
    • Mostra profilo
Re:Associazione tasti funzione
« Risposta #23 il: 16 Settembre 2015, 08:22:00 »

Ciao sotema,
interessante la tua soluzione, devo studiarla e capirla bene per vedere se fà al caso mio.
Ho provato il codice che hai allegato, ma ha il problema già riscontrato in un suggerimento precedente, e cioè:
avviato il programma e Form1 visualizzata premendo F3, viene chiuso, e fin qui ok, ma se passi in Form2 e
ritorni in Form1, F3 non funziona più.


Sicuro di usare la versione corretta?  A me funziona perfettamente, anche passando attraverso Form2. Forse stai usando il pacchetto allegato alla prima risposta che avevo eliminato proprio per quel motivo.
Ti allego nuovamente il codice. Per cortesia provalo, nel caso non funzioni mi alleghi le System Informations?

L'uomo ha inventato la bomba atomica, ma nessun topo al mondo costruirebbe una trappola per topi.
Albert Einstein

Offline tornu

  • Gran Maestro dei Gamberi
  • *****
  • Post: 855
    • Mostra profilo
Re:Associazione tasti funzione
« Risposta #24 il: 16 Settembre 2015, 20:44:48 »
Sicuro di usare la versione corretta?  A me funziona perfettamente, anche passando attraverso Form2. Forse stai usando il pacchetto allegato alla prima risposta che avevo eliminato proprio per quel motivo.
Ti allego nuovamente il codice. Per cortesia provalo, nel caso non funzioni mi alleghi le System Informations?
Si, ho usato la versione ultima da te postata, comunque ho cancellato tutto è riscaricato, ma niente da fare
con la Form2 aperta F3 continua a chiudere il programma.

[System]
Gambas=3.8.1
OperatingSystem=Linux
Kernel=3.19.0-28-generic
Architecture=x86_64
Distribution=Ubuntu 14.04.3 LTS
Desktop=GNOME
Theme=Cleanlooks
Language=it_IT.UTF-8
Memory=7975M

[Libraries]
Cairo=libcairo.so.2.11301.0
Curl=libcurl.so.4.3.0
DBus=libdbus-1.so.3.7.6
GStreamer=libgstreamer-0.10.so.0.30.0
GStreamer=libgstreamer-1.0.so.0.204.0
GTK+2=libgtk-x11-2.0.so.0.2400.23
GTK+3=libgtk-3.so.0.1000.8
OpenGL=libGL.so.1.2.0
Poppler=libpoppler.so.44.0.0
QT4=libQtCore.so.4.8.6
QT5=libQt5Core.so.5.2.1
SDL=libSDL-1.2.so.0.11.4

[Environment]
CLUTTER_IM_MODULE=xim
COMPIZ_BIN_PATH=/usr/bin/
COMPIZ_CONFIG_PROFILE=ubuntu
DBUS_SESSION_BUS_ADDRESS=unix:abstract=/tmp/dbus-BDhnLUD5RZ
DEFAULTS_PATH=/usr/share/gconf/ubuntu.default.path
DESKTOP_SESSION=ubuntu
DISPLAY=:0
GB_GUI=gb.qt4
GDMSESSION=ubuntu
GDM_LANG=it
GIO_LAUNCHED_DESKTOP_FILE=/usr/share/applications/gambas3.desktop
GIO_LAUNCHED_DESKTOP_FILE_PID=2693
GNOME_DESKTOP_SESSION_ID=this-is-deprecated
GNOME_KEYRING_CONTROL=/run/user/1000/keyring-B9ZO1E
GNOME_KEYRING_PID=1892
GPG_AGENT_INFO=/run/user/1000/keyring-B9ZO1E/gpg:0:1
GTK_IM_MODULE=ibus
GTK_MODULES=overlay-scrollbar:unity-gtk-module
HOME=<home>
IM_CONFIG_PHASE=1
INSTANCE=
JOB=dbus
LANG=it_IT.UTF-8
LANGUAGE=it
LOGNAME=<user>
MANDATORY_PATH=/usr/share/gconf/ubuntu.mandatory.path
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
PWD=<home>
QT4_IM_MODULE=xim
QT_IM_MODULE=ibus
QT_QPA_PLATFORMTHEME=appmenu-qt5
SELINUX_INIT=YES
SESSION=ubuntu
SESSIONTYPE=gnome-session
SESSION_MANAGER=local/<hostname>:@/tmp/.ICE-unix/2051,unix/<hostname>:/tmp/.ICE-unix/2051
SHELL=/bin/bash
SHLVL=0
SSH_AUTH_SOCK=/run/user/1000/keyring-B9ZO1E/ssh
TEXTDOMAIN=im-config
TEXTDOMAINDIR=/usr/share/locale/
TZ=:/etc/localtime
UPSTART_SESSION=unix:abstract=/com/ubuntu/upstart-session/1000/1896
USER=<user>
XAUTHORITY=<home>/.Xauthority
XDG_CONFIG_DIRS=/etc/xdg/xdg-ubuntu:/usr/share/upstart/xdg:/etc/xdg
XDG_CURRENT_DESKTOP=Unity
XDG_DATA_DIRS=/usr/share/ubuntu:/usr/share/gnome:/usr/local/share/:/usr/share/
XDG_GREETER_DATA_DIR=/var/lib/lightdm-data/<user>
XDG_MENU_PREFIX=gnome-
XDG_RUNTIME_DIR=/run/user/1000
XDG_SEAT=seat0
XDG_SEAT_PATH=/org/freedesktop/DisplayManager/Seat0
XDG_SESSION_ID=c2
XDG_SESSION_PATH=/org/freedesktop/DisplayManager/Session0
XDG_VTNR=7
XMODIFIERS=@im=ibus
Il software è come il sesso, è meglio quando è libero. (Linus Torvalds)

Offline sotema

  • Maestro Gambero
  • ****
  • Post: 467
    • Mostra profilo
Re:Associazione tasti funzione
« Risposta #25 il: 16 Settembre 2015, 21:24:08 »
Se vuoi prova ora, dovrebbe essere meglio.

edit----
ho inserito dei menu in Fmain ed eliminato l'apertura automatica di Form1. Fammi sapere.
« Ultima modifica: 16 Settembre 2015, 21:33:35 da sotema »
L'uomo ha inventato la bomba atomica, ma nessun topo al mondo costruirebbe una trappola per topi.
Albert Einstein

Offline tornu

  • Gran Maestro dei Gamberi
  • *****
  • Post: 855
    • Mostra profilo
Re:Associazione tasti funzione
« Risposta #26 il: 16 Settembre 2015, 22:43:18 »
@ vuott
Ultimi suggerimenti  :ok:

Se vuoi prova ora, dovrebbe essere meglio.

edit----
ho inserito dei menu in Fmain ed eliminato l'apertura automatica di Form1. Fammi sapere.


Ok funzionano entrambi gli esempi

Bene ora dopo tutti questi suggerimenti e le spiegazioni di cui vi ringrazio, mi studio bene le varie procedure
e cerco di applicarle al mio progetto, vi informerò degli sviluppi.
Il software è come il sesso, è meglio quando è libero. (Linus Torvalds)

Offline Picavbg

  • Senatore Gambero
  • ******
  • Post: 1.620
    • Mostra profilo
Re:Associazione tasti funzione
« Risposta #27 il: 17 Settembre 2015, 15:44:49 »
@ tornu
Eppur ... showmodal si muove meglio.
Ti saresti risparmiato infatti un sacco di fastidi gestionali sulle Form.  Come dice vuott, fra le tante strade percorribili, dopo avere scoperto che quella impiegata è un pò rozza, bisogna trovare ed impiegare quella più adatta alla snellezza funzionale del programma.
Ti sembro noiosamente pedante? Ti prego di scusarmi per questo mio ulteriore intervento. :-X
:ciao:

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.309
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:Associazione tasti funzione
« Risposta #28 il: 17 Settembre 2015, 17:09:29 »
... fra le tante strade percorribili, dopo avere scoperto che quella impiegata è un pò rozza, bisogna trovare ed impiegare quella più adatta alla snellezza funzionale del programma.
Tornu, io... torno a confermare questa tesi.


Ad ogni modo resta il fatto che la scelta finale la devi fare tu.     
« 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 sotema

  • Maestro Gambero
  • ****
  • Post: 467
    • Mostra profilo
Re:Associazione tasti funzione
« Risposta #29 il: 17 Settembre 2015, 20:49:27 »
... fra le tante strade percorribili, dopo avere scoperto che quella impiegata è un pò rozza, bisogna trovare ed impiegare quella più adatta alla snellezza funzionale del programma.
Tornu, io... torno a confermare questa tesi.


Ad ogni modo resta il fatto che la scelta finale la devi fare tu.     

Ragazzi, scusate, ma non condivido. Ho sempre apprezzato chi sceglie la soluzione più articolata e/o complessa per affrontare un problema. A scuola avevo un insegnante che al posto della calcolatrice usava il regolo. Era affascinante vederlo risolvere equazioni con il semplice scorrere del regolo.
Inoltre è inebriante percorrere strade nuove, finanche tracciare nuovi sentieri. Infine anche l'aspetto estetico ha il suo perché.
L'unico consiglio che mi sento di dare a Tornu è: considera il l'oggetto Workspace del componente gb.form.mdi, trattandosi di un gestionale può essere che l'utente necessiti di mantenere attive contemporaneamente più funzioni.

Buon gambas a tutti.
L'uomo ha inventato la bomba atomica, ma nessun topo al mondo costruirebbe una trappola per topi.
Albert Einstein