Autore Topic: [Risolto] Consecutio temporum deile varie classi  (Letto 402 volte)

Offline Franco_da_vc

  • Grande Gambero
  • ***
  • Post: 213
  • Non è mai troppo tardi!
    • Mostra profilo
[Risolto] Consecutio temporum deile varie classi
« il: 21 Ottobre 2017, 16:26:31 »
Ciao a tutti, nuovo problema in vista ???, lo so, lo so! ma non mandatemi a quel paese. ;D

Ho iniziato ad affrontare la registrazione dei dati negli appositi file, per fare ciò devo fare apparire una form che mi permetta di cambiare il mese in cui andrò a fatturare il lavoro catalogato, niente di più facile, si tratta di una form piccolina con solo una combo (la scelta del mese) ed un bottone (Ok!).

Dove sta il problema, direte voi, il problema è che, naturalmente per fare funzionare la form ho descritto una nuova classe e dalla scelta del mese varia anche il nome del file che andro ad aprire o creare a secondo del caso; quello che non funziona è che il codice non attende che si sia scelto il mese e poi confermato premendo ok sulla form e succede che il "nome file" viene creato sbagliato e ancor peggio l'anteprima di stampa della bolla si attiva abbastanza celermente e va a ricoprire la succitata form.

La Flow chart (se mi è concesso il termine) del pezzo di programma incriminato è la seguente:
Codice: [Seleziona]
        |
        |
        |
    Public Sub ButtonStampaNorm_Click()
        |
        |
    Chiamta a procedura SALVA_HEADER() (Registrazione prima parte dati)
                |
                |
            Chiamata SalvaHeader.Show
                Form SalvaHeader.form
              Classe SalvaHeader.class (scelta del mese e conferma scelta con settaggio della variabile che identifica il mese)
                |
                |
            Creazione del nome del file da aprire o creare
            Elaborazioni varie
            Registrazione dei dati
                |
                |
            Chiamta a procedura STAMPA_NORMALE() con visualizzazione dell'anteprima ed eventuale stampa.
                |
                |

Dovrei fare in modo che il programma non avvanzi finché non viene compiuta la scelta nel form, ma come? Ho provato a visualizzare il form senza aver descritto la classe, ma non riesco poi a controllare i due oggetti.

Cosa mi suggerite?

Vi ringrazio per i vostri interventi.

Ciaooooo  :ciao: :ciao:
« Ultima modifica: 23 Ottobre 2017, 20:47:02 da Franco_da_vc »
Bye by Afo

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.145
  • Tonno verde
    • Mostra profilo
Re:Consecutio temporum deile varie classi
« Risposta #1 il: 21 Ottobre 2017, 19:26:30 »
Non sono sicuro di aver capito cosa stai chiedendo.
Normalmente un programma Gambas3 segue una logica a eventi, vale a dire che il programma esegue un loop infinito che monitora delle informazioni, al verificarsi di queste esegue l'istruzione.
In pratica c'è una finestra con dei pulsanti e menu e quando l'operatore agisce con mouse o tastiera su di essi si scatena l'evento che attiva una porzione di codice.
Pertanto non dovrebbe esserci una sequenza di eventi prestabilita ma una sequenza decisa dall'operatore, naturalmente sempre in base a una certa logica voluta dal programmatore.
Ciò detto se tu apri una finestra modale il codice può proseguire solo ad avvenuta chiusura della stessa.
Dai un occhiata a questo esempio

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

Offline Franco_da_vc

  • Grande Gambero
  • ***
  • Post: 213
  • Non è mai troppo tardi!
    • Mostra profilo
Re:Consecutio temporum deile varie classi
« Risposta #2 il: 22 Ottobre 2017, 12:11:09 »
Hai ragione GianLuigi, aprendo con ShowModal il form ottengo di bloccare lo scorrimento del programma ed non avere tutta la casistica che avevo descritto più sopra, solo una cosa, le variabili con questa opzione passano normalmente o c'è qualche diversità?

Ciaoooo  :ciao: :ciao:
Bye by Afo

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.145
  • Tonno verde
    • Mostra profilo
Re:Consecutio temporum deile varie classi
« Risposta #3 il: 22 Ottobre 2017, 13:14:03 »
Diversità in che senso?
Dovresti fare un esempio semplificato e postarlo così vediamo cosa non ti funziona e perché.

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

Offline Franco_da_vc

  • Grande Gambero
  • ***
  • Post: 213
  • Non è mai troppo tardi!
    • Mostra profilo
Re:Consecutio temporum deile varie classi
« Risposta #4 il: 22 Ottobre 2017, 14:05:58 »
Vero GianLuigi

Ti inserisco la parte del codice interessata:
Codice: [Seleziona]
  SalvaHeader.ShowModal
  Anno$ = Year(Now)
  Anno$ = Right$(Anno$, 2)
  CodCliente = FNormale.serv$[FNormale.NumCliente, 4]
Print SalvaHeader.MeseText
  FileName = "DDT" & CodCliente & "@" & SalvaHeader.MeseText & Anno$ & ".dbl"
Print FileName

il codice della classe SalvaHeader:
Codice: [Seleziona]
''################################################################### Menu per la scelta del mese di fatturazione #####
Public MeseText As String = Null '##### Numero del mese in formato stringa                                        #####
Private PuntMese As Integer '##### Puntatore al numero del mese corrente                                          #####
Public SwFormClosed As Boolean = False '##### Switch di conferma di scelta effettuata                             #####


Public Sub _New()

  ASSEGNAZIONI()

End
Public Sub ASSEGNAZIONI()

  PuntMese = FMain.mMese$
  ComboMesi.List = FMain.mese
  ComboMesi.Current.Text = FMain.mese[PuntMese]

End

Public Sub ComboMesi_Click()
'#################################################################### Scelta del mese di fatturazione da ComboBox #####
  Dim var$ As String '##### Variabile di comodo per riferimento alla matrice CodCapo$                             #####
  Dim i As Integer = 0 '##### Contatore per ciclo DO sulla matrice CodCapo$                                       #####

  var$ = ComboMesi.Current.Text
  Do
    i = i + 1
  Loop Until var$ = FMain.mese[i]
  MeseText = i
  If Len(MeseText) < 2 Then MeseText = "0" & MeseText

End

Public Sub ButtonOk_Click()
'################################################################### Conferma del mese scelto per la fatturazione #####

  PuntMese = FMain.mMese$

  If MeseText = Null
    MeseText = PuntMese
    If Len(MeseText) < 2 Then MeseText = "0" & MeseText
  Endif
  SwFormClosed = True
Print MeseText
  SalvaHeader.Close

End

ed il responso della console sui tre print che ho inserito per vedere come reagiva la variabile interessata:
Codice: [Seleziona]
10

DDTcon@17.dbl

Come vedi nei due listati, il primo print ad essere eseguito è quello della classe SalvaHeader.class, nel report della Console come puoi vedere compare il numero 10 ciò vuol dire che la variabile è settata (in questo caso con il valore di default), continuando con lo sviluppo del codice si arriva al secondo print, come puoi vedere nel primo listato, che è inserito nella classe FNormale.class, questo secondo print non fa altro che interrogare la stessa variabile di prima, ma come vedi il secondo responso della console è una stringa vuota, ciò vuol dire che la variabile non è passata ed infatti il terzo print stampa il nome che dovrebbe essere dato al file da creare o da aprire, ma quest'ultimo è sbagliato, infatti dovrebbe essere DDTcon@1017.dbl.

La variabile MeseText è comunque una dichiarata come string e Public, ragion per cui dovrebbe passare e già nel formato adeguato alla elaborazione successiva, ecco il perche della domanda precedente, spiegandomi un po' meglio (li ero effettivamente un po' criptico), quando si apre un form in modale le variabili dichiarate Public passano normalmente o ci sono delle diversità?

Mamma che pizza che vi ho scritto! :o :o

Ciaooooo :ciao:
Bye by Afo

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.145
  • Tonno verde
    • Mostra profilo
Re:Consecutio temporum deile varie classi
« Risposta #5 il: 22 Ottobre 2017, 14:42:43 »
Visto che hai difficoltà a semplificare le cose, cerco di farlo io.
Vedi se l'esempio allegato può aiutarti.

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

Offline Franco_da_vc

  • Grande Gambero
  • ***
  • Post: 213
  • Non è mai troppo tardi!
    • Mostra profilo
Re:Consecutio temporum deile varie classi
« Risposta #6 il: 23 Ottobre 2017, 20:45:49 »
 :D :D Funziona, ma tu non ne avevi dubbi, io con poco adattamento, anzi pochissimo ho avuto la routine che mi serviva.

Ma vedi GianLuigi, oltre la pratica vale anche la grammatica, dove posso trovare qualche documento sulle form modali, in questo momento sto usando questa opzione, ma non so ne come ne perché.

Comunque grazie veramente.

Ciaoooooo  :ciao: :ciao: :ciao:
Bye by Afo

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.145
  • Tonno verde
    • Mostra profilo
Re:[Risolto] Consecutio temporum deile varie classi
« Risposta #7 il: 23 Ottobre 2017, 22:55:42 »
Questa è la pagina wikipedia sull'argomento.
Purtroppo lo sai bene che le notizie occorre andarsele a cercare qui e la.
Ad esempio questo codice io l'ho copiato (arrangiandolo) direttamente da Minisini e precisamente da gb.form imputbox e message.
Minisini usa una funzione run in abbinamento al metodo speciale _call io ho provato a usarla direttamente e funziona, da allora l'ho adottata per avere dati di ritorno dalle modali.
Ma non è l'unico modo anche se questo trovo che sia il più comodo puoi passare tutte le informazioni che vuoi e averne altrettante di ritorno ad esempio usando un vettore magari di tipo variant.
Ti consiglio vivamente di studiare direttamente dal codice della IDE e dei componenti.

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

Offline Franco_da_vc

  • Grande Gambero
  • ***
  • Post: 213
  • Non è mai troppo tardi!
    • Mostra profilo
Re:[Risolto] Consecutio temporum deile varie classi
« Risposta #8 il: 24 Ottobre 2017, 21:05:17 »
Non posso che darti ragione, ma con sto dannato ufficio, spesse volte torno a casa ed ho appena il tempo di cenare e di controllare la posta che è già tardi, vedi stasera.

Comunque con mia somma soddisfazione ho letto il wiki e guarda caso una delle frasi diceva
Citazione
Un altro esempio sono i dialoghi di apertura e di salvataggio dei file in un'applicazione.
.

Direi che ha proprio centrato l'argomento! E' proprio quello l'utilizzo.

Ti ringrazio. Ciaooooooooo  :ciao: :ciao:
Bye by Afo