Autore Topic: [Risolto] Bottoni che cambiano troppo presto rispetto al procedere del programma  (Letto 988 volte)

Offline Franco_da_vc

  • Grande Gambero
  • ***
  • Post: 215
  • Non è mai troppo tardi!
    • Mostra profilo
Mi riferisco allo stesso codice che avevo inserito nella scorsa discussione e che riporto qui sotto per chiarezza:

Codice: [Seleziona]
Public Sub ListLavori_Select()
'######################################################################### Sceglie il lavoro dalla lista proposta #####

  pos3 = ListLavori.Index
  If pos3 = 0
    sw_altro = True
    If FMain.tipoBll - 1 = 2
      TextPersona.SetFocus
      Endif
    TextDescr.SetFocus
    INS_PREZZO(0)
    Else
    descr$ = lavori$[pos3]
    TextDescr.Text = descr$
    prezzoUnit = prezzoVis[pos3]
    INS_PREZZO(1)
    Endif
  ListCapi.Enabled = False
  ButtonInsert.Background = &FF0000
  ButtonInsert.Enabled = False
  ButtonCancel.Background = &FF0000
  ButtonCancel.Enabled = False
  ButtonConf.Background = &00FF00
  ButtonConf.Enabled = True

  TextDescr.SetFocus

End

Il blocco finale di istruzioni, a parte l'ultima inserita per i ben noti accadimenti,  serve a settare i vari bottoni del form dopo gli input richiesti, succede però che i vari pulsanti si settano gia prima di aver in particolare eseguito l'input del prezzo, questo fa cadere la procedura in condizione di errore, naturalmente bloccando il programma (ciò succedeva anche prima di inserire l'istruzione TextDescr.SetFocus ).

E' possibile evitare questo comportamento? E come?

Vi ringrazio ancora e saluto.
« Ultima modifica: 15 Luglio 2017, 11:28:59 da Franco_da_vc »
Bye by Afo

Offline Arco

  • Gambero
  • **
  • Post: 93
    • Mostra profilo
Re: Ma sarà giusto o no questo codice??? 2/2
« Risposta #1 il: 28 Aprile 2017, 10:52:13 »
Io sposterei
Codice: [Seleziona]
  ButtonInsert.Background = &FF0000
  ButtonInsert.Enabled = False
  ButtonCancel.Background = &FF0000
  ButtonCancel.Enabled = False
  ButtonConf.Background = &00FF00
  ButtonConf.Enabled = True
in una sub a parte che viene chiamata alla fine delle inserzioni di input.

Offline Franco_da_vc

  • Grande Gambero
  • ***
  • Post: 215
  • Non è mai troppo tardi!
    • Mostra profilo
Re: Ma sarà giusto o no questo codice??? 2/2
« Risposta #2 il: 28 Aprile 2017, 11:11:43 »
Grazie Arco per l'ipotesi,

Anch'io vedendola la giudicavo valida, ma dopo averla sperimentata non ha prodotto cambiamenti di sorta.
Penso proprio che dovrò rivolgermi alla gestione degli errori, me lo confermate?

Ciao.
Bye by Afo

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.239
  • Tonno verde
    • Mostra profilo
Re: Ma sarà giusto o no questo codice??? 2/2
« Risposta #3 il: 28 Aprile 2017, 13:15:37 »
La metto li così come pensata:

Prima di eseguire i cambiamenti sui bottoni li testi se sono bloccati li sbocchi li cambi e li riblocchi.
Utilizzerei comunque il suggerimento di Arco.

 :ciao:

P.s. Potresti per cortesia cambiare dando dei titoli più significativi ai tuoi quesiti? Questo serve un domani per la ricerca da parte di altri alle soluzioni.
« Ultima modifica: 28 Aprile 2017, 15:53:02 da Gianluigi »
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline Franco_da_vc

  • Grande Gambero
  • ***
  • Post: 215
  • Non è mai troppo tardi!
    • Mostra profilo
Re:Bottoni che cambiano troppo presto rispetto al procedere del programma
« Risposta #4 il: 29 Aprile 2017, 20:54:37 »
Scusa GianLuigi,

ma come si bloccano e si sbloccano i bottoni, ho fatto un giro tra i vari metodi, ma ci ho capito un po' poco!

Scusa.
« Ultima modifica: 01 Maggio 2017, 10:54:21 da Franco_da_vc »
Bye by Afo

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.725
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:Bottoni che cambiano troppo presto rispetto al procedere del programma
« Risposta #5 il: 29 Aprile 2017, 21:19:48 »
ma come si bloccano e si sbloccano i bottoni

Possiamo distinguere due condizioni:
1) il blocco dell'azione sull'Oggetto;
2) il blocco del sollevare eventi legati all'Oggetto.

Il primo caso si attua assegnando il valore booleano "False" alla proprietà ".Enabled" dell'oggetto Button. Così, pur cliccando sul tasto, non è abilitata la possibilità di premerlo, neppure visivamente.
Per sbloccare la proprietà ".Enabled", basterà assegnarle ovviamente il valore di True.

Il secondo caso si attua mediante l'uso del Metodo ".Lock( )" della Classe statica "Object". In questo caso, cliccando sull'Oggetto, lo vedremo virtualmente muoversi, ossia schiacciarsi, ma risulterà inibita ogni capacità di sollevare un evento previsto per quell'Oggetto.
Per sbloccare la capacità del Button di sollevare un proprio evento, sarà necessario utilizzare il previsto Metodo ".Unlock( )" della Classe statica "Object".

Mostriamo di seguito un semplice esempio pratico:
Codice: [Seleziona]
Public Sub ToggleButton1_Click()

  If ToggleButton1.Value Then
    Button1.Enabled = False
  Else
    Button1.Enabled = True
  Endif

End

Public Sub ToggleButton2_Click()

  If ToggleButton2.Value Then
    Object.Lock(Button1)
  Else
    Object.Unlock(Button1)
  Endif

End

Public Sub Button1_Click()

   Print "Il Button è agibile"

End
« Ultima modifica: 29 Aprile 2017, 21:20:30 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.725
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:Bottoni che cambiano troppo presto rispetto al procedere del programma
« Risposta #6 il: 29 Aprile 2017, 21:29:37 »
Possiamo distinguere due condizioni:
In vero potremmo aggiungere un'altra possibilità: quella offerta dalla proprietà ".Visible" dell'Oggetto, che - se posta a False - annulla completamente la visibilità dell'Oggetto sul Form, inibendo così il suo uso.

Volendo, dunque, completare il codice sopra mostrato:
Codice: [Seleziona]
Public Sub ToggleButton3_Click()

  If ToggleButton3.Value Then
    Button1.Visible = False
  Else
    Button1.Visible = True
  Endif

End
« 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.239
  • Tonno verde
    • Mostra profilo
Re:Bottoni che cambiano troppo presto rispetto al procedere del programma
« Risposta #7 il: 29 Aprile 2017, 22:16:17 »
Scusa GianLuigi,

ma come si bloccano e si sbloccano i bottoni, ho0 fatto un giro tra i vari metodi, ma ci ho capito un po' pocfo!

Scusa.

Scusa te, leggendo questo:
Citazione
Il blocco finale di istruzioni, a parte l'ultima inserita per i ben noti accadimenti,  serve a settare i vari bottoni del form dopo gli input richiesti, succede però che i vari pulsanti si settano gia prima di aver in particolare eseguito l'input del prezzo, questo fa cadere la procedura in condizione di errore, naturalmente bloccando il programma (ciò succedeva anche prima di inserire l'istruzione TextDescr.SetFocus ).

E' possibile evitare questo comportamento? E come?

Sono caduto in errore pensando che dei "settaggi" sui button "bloccati" vale a dire "Enabled = False" potessero essere la causa dell'errore e da li la risposta.

È evidente che non può essere quella la causa.

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

Offline Franco_da_vc

  • Grande Gambero
  • ***
  • Post: 215
  • Non è mai troppo tardi!
    • Mostra profilo
Re:Bottoni che cambiano troppo presto rispetto al procedere del programma
« Risposta #8 il: 01 Maggio 2017, 14:20:13 »
Grazie per le risposte fin ora inserite,

Il discorso di Gianluigi che comunque è molto sensato, in qualche modo era già stato codificato nella routine che avevo inserito e che ripeto per vostra comodità:
Codice: [Seleziona]
Public Sub ListLavori_Select()
'######################################################################### Sceglie il lavoro dalla lista proposta #####

  pos3 = ListLavori.Index
  If pos3 = 0
    sw_altro = True
    If FMain.tipoBll - 1 = 2
      TextPersona.SetFocus
      Endif
    TextDescr.SetFocus
    INS_PREZZO(0)
    Else
    descr$ = lavori$[pos3]
    TextDescr.Text = descr$
    prezzoUnit = prezzoVis[pos3]
    INS_PREZZO(1)
    Endif

  ListCapi.Enabled = False
  ButtonInsert.Background = &FF0000
  ButtonInsert.Enabled = False
  ButtonCancel.Background = &FF0000
  ButtonCancel.Enabled = False
  ButtonConf.Background = &00FF00
  ButtonConf.Enabled = True

  TextDescr.SetFocus

End
In allegato ho anche postato la schermata del form su cui si va ad interagire;  Come funziona l'inserimento dati? Semplicemente grazie al tasto insert si sceglie dalla lista sopra di esso un tipo di capo su cui si intende eseguire un lavoro, il tasto Cancel serve solo a togliere un tipo di capo in caso di sccelta sbagliata, la scelta fatta viene visualizzata nella grid soppra a cancel e nella lista a fianco vengono visualizzati i lavori eseguibili su quel tipo di capo.
Eseguendo una scelta tra i lavori presenti si entra nella Public Sub ListLavori_Select() con pos3 diverso da zero a questo punto viene eseguita la If pos3 = 0 dopo la else ove vengono passati i dati relativi alla scelta fatta ed eseguita la procedura INS_PREZZO(1), cioè senza nessun input.
In questa fase il problema non si manifesta, si manifesta invece inserendo la scelta Altro...., appena eseguita questa scelta si entra nella Public Sub ListLavori_Select() con pos3 uguale a zero a questo punto viene eseguita la If pos3 = 0 prima della la else ove trova l'istruzione TextDescr.SetFocus e di seguito la chiamata alla procedura INS_PREZZO(0) che in questo caso viene eseguita con l'input dell'importo del lavoro; Come vedete seguendo il mio ragionamento il bottone di Conferma non dovrebbe essere interessato da nessun sblocco e quindi dovrebbe rimanere inusabile. Nella pratica invece appena il campo descrizione attraverso il ben noto Public Sub ListLavori_Select() prende fuoco, cioè subito dopo la pressione dell'item Altro.... il bottone Conferma, lo si ritrova di colore verde ed è quindi attivo.

L'unica alternativa a questa situazione, a quanto mi può sembrare, è quindi gestire l'errore relativo alla eventuale errata pressione  del tasto Conferma.

Cosa ne pensate della mia disanima, siete d'accordo con le mie conclusioni.

Vi ringrazio e vi saluto ancora.
« Ultima modifica: 01 Maggio 2017, 15:04:48 da Franco_da_vc »
Bye by Afo

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.239
  • Tonno verde
    • Mostra profilo
Re:Bottoni che cambiano troppo presto rispetto al procedere del programma
« Risposta #9 il: 01 Maggio 2017, 23:10:36 »
Per me l'ora è tarda e quindi sono a rischio strafalcioni, ma io qui:
Codice: [Seleziona]
  ButtonConf.Background = &00FF00
  ButtonConf.Enabled = True
leggo che il pulsante Conferma viene azionato e colorato di verde prima di dare il focus alla casella descrizioni.

Pertanto è normale che accada quello  :-\

Se non vuoi che in un dato caso il pulsante si attivi devi inserirne il comportamento anch'esso in una scelta (If).

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

Offline Franco_da_vc

  • Grande Gambero
  • ***
  • Post: 215
  • Non è mai troppo tardi!
    • Mostra profilo
Re:Bottoni che cambiano troppo presto rispetto al procedere del programma
« Risposta #10 il: 02 Maggio 2017, 22:56:27 »
Grazie Gianluigi per la risposta,

non voglio confutare ciò che hai scritto, ma nel listato, almeno il mio ragionamento era questo, il blocco di settaggio dei bottoni è scritto dopo la IF che contiene i comandi *.setFocus, ricordo che l'ultimo TextDescr.SetFocus è stato messo in quel posto altrimenti non prendeva fuoco l'analogo comando posto prima dell'ELSE della If pos3 = 0.

Mamma mia che zuppa che ho scritto, sarò riuscito almeno a farmi capire? Almeno spero! :rolleyes:

Il problema è forse proprio li, quale dei due TextDescr.SetFocus funziona? Quello dentro la IF o l'ultimo in fondo? A vedere dall'evoluzione del programma (che ho descritto nel precedente mio) dovrebbe essere il primo, ma a questo punto non ne sono più sicuro.

C'è forse qualcosa che mi sfugge?
Bye by Afo

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.239
  • Tonno verde
    • Mostra profilo
Re:Bottoni che cambiano troppo presto rispetto al procedere del programma
« Risposta #11 il: 02 Maggio 2017, 23:30:40 »
Franco,
l'unica via che hai è quella di piazzare uno Stop all'inizio della Sub ListLavori_Select e poi fare partire il debug selezionando la voce quindi cliccando sulla linea blu dello Stop per portare in primo piano l'area di scrittura codice, premere F8 e seguire passo passo quello che fa il codice (premendo via via F8)  e vedere perché rende attivo il pulsante prima di quanto ti aspetteresti.

A proposito, vedo che la routine non ha proprie variabili quindi è facile, usando variabili globali, che qualche altra routine ti cambi le carte in tavola, per scoprirlo non c'è altro modo che il passo passo o meglio l'effe otto effe otto del debug.
 :ciao: :ciao:
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline Franco_da_vc

  • Grande Gambero
  • ***
  • Post: 215
  • Non è mai troppo tardi!
    • Mostra profilo
Re:Bottoni che cambiano troppo presto rispetto al procedere del programma
« Risposta #12 il: 15 Luglio 2017, 11:27:36 »
Finalmente il problema si è risolto.
 :2birre:
Da quanto ho capito non era un problema di Gambas, ma esterno: avevo scritto in uno dei miei post che il mio sistema aveva problemi e forse questi influenzavano anche il programma che sto scrivendo.

In pratica avevo dei problemi grafici, e questi si sono risolti con un aggiornamento dei driver grafici del sistema, e dei problemi di lentezza sempre legati alla grafica a cui ho posto rimedio aumentando la memoria della macchina da due a sei giga.

Ora i bottoni che mi davano problemi cambiano come io avevo preventivato; ho anche notato un piccolo cambiamento dei font: si sono ingranditi un pochino, infatti ho dovuto rimodellare tutti i campi di input e di testo dei form, ma questo non mi ha dato assolutamente noia, anzi preferisco così.

Quindi.... problema risolto!

Ciao e grazie a tutti.
Bye by Afo

Offline Arco

  • Gambero
  • **
  • Post: 93
    • Mostra profilo
Sono contento che hai trovato la soluzione.