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 - Franco_da_vc

Pagine: 1 ... 11 12 [13] 14 15
181
Programmazione / Re: Dati globali in più classi di un listato gambas
« il: 29 Dicembre 2014, 16:13:07 »
Beh non potevi darmi una risposta migliore!

Però quale è l'alternativa? Il secondo form io l'ho attivato in questo modo:

Codice: gambas [Seleziona]


    Select Case tipo_bll
      Case 0 '######################################### Bolla di tipo XXXXXXXX #####
        'Input_Diverso(n_cli, sw_menu)
      Case 1 '######################################### Bolla di tipo YYYYYYYYY #####
        FNormale.Show
        'Input_Normale(0, n_cli, sw_menu)
      Case 2 '######################################### Bolla di tipo ZZZZZZ #####
        FNormale.Show
        'Input_Normale(1, n_cli, sw_menu)
    End Select


Devo confessarti che per scrivere questo mi sono ispirato ad un listato Gambas trovato nel sito (penso si chiami Azerotrope e parte del compito lo assolve, infatti la classe FNormale si avvia, ma con il problema di cui sopra!

Grazie!

182
Ciao a tutti,

Rieccomi, mi sono gia di nuovo incartato, forse uno di questi giorni mi manderete a fare Un bagno (di questa stagione a Vercelli non è il massimo)!

Il fatto è che ho già descritto un primo form con una classe abbinata che può essere benissimo la classe principale della procedura ove ho descritto alcune variabili che dovrebbero essere globali in tutta la gestione nella dichiarazione iniziale le ho inserite in questo modo:

Codice: gambas [Seleziona]


Public modello As Integer '##### tipo di modello usato                                                            #####
Public n_cli As Integer = -1 '##### Numero del cliente in elaborazione                                            #####
Public punt_mese As Integer = 0 '##### puntatore al nome del mese                                                 #####
Public shift As Integer '##### alineamento bolla                                                                  #####
Public tipo_bll As Integer '##### seleziona il tipo di bolla in base al cliente selezionato                       #####
Public tot_cli As Integer = 0 '##### numero totali di clienti visualizzati                                        #####
Public _base As String '##### definisce la directori di base del programma                                        #####
Public homedir As String = User.home '##### percorso file della home dello user                                   #####



Se avevo letto bene la keyword Public dovrebbe rendere le variabili globali, in effetti il tutto funzionava nelle varie sub e procedure seguenti, le dolenti note arrivano quando attivo il secondo form e quindi penso passo in una seconda Class, come prima azione ho previsto di lanciare la procedura che va a inserire i dati già noti nel nuovo form e lo faccio con questa istruzione:

Codice: gambas [Seleziona]

Public Sub _new()
  
  Input_Normale(0, n_cli, sw_menu)
  
End


Questa struttura l'interprete non la digerisce e in dice che n_cli non è dichiarato:
Codice: [Seleziona]
[b]Unknown identifier: n_cli[/b] in FNormale class: 8
A quanto pare la globalità della variabile n_cli dichiarata nella classe FMain non riguarda il secondo ambito cioè la classe FNormale, ho cercato tutta la sera ieri nell'Help in linea ma non ho trovato alternative alla situazione, infatti pensavo di ricadere nel caso della vostra discussione:
Codice: [Seleziona]
Passaggio dati tra due Form 

Francamente però ero convinto che le variabili globali lo fossero rispetto a più classi, quindi starò sbagliando qualcosa in qualche parte del listato?

Voi che ne dite?

Rigrazio già fin d'ora!

183
Programmazione / [Risolto] Utilizzo di una ListBox
« il: 27 Dicembre 2014, 11:54:32 »
Per inserire una lista dei mesi ho usato una ListBox, ma sto pensando di non aver usato la struttura adatta.

In poche parole i vari mesi dovrebbero assumere una particolare colorazione se esiste o meno del file relativo al mese stesso, il problema e che ho trovato il modo per imporre il colore di background, ma ciò avviene per tutta la lista e non trovo il comando per imporlo ad un solo elemento della stessa.

Esiste il comando adatto per la ListBox o veramente devo usare un'altra struttura e quale?

A proposito:
:ot: ho notato che richiedendo l'anteprima del post non si ottiene nulla, è un problema del mio sistema o c'è qualcosa che non va nella struttura del forum? :ot:

Grazie e ciao a tutti!

184
Grazie Vuott,

scritto (da te) ed eseguito (da me), perfetto: il form funziona sempre meglio.

Beh! per oggi penso di aver approfittato fin troppo della tua bravura.

A te in special modo e comunque a tutti gli amici del forum Buon Natale.

185
Grazie Vuott,

è vero,  non ho fatto altro che seguire il post che mi avevi consigliato e il problema si è risolto non era colpa di Gambas , ma del mio sistema......
o però una domanda di riserva: nel programma che sto realizzando è previsto che possa resettare i dati, i pulsanti quindi dovrebbero ritornare al grigio di default, esiste un comando per riportare i pulsanti al colore di default con cui compaiono?

Grazie ancora e..... buon Natale a tutti.

Bue Bye AFo

186
Saluti a tutti,

Recentemente ho potuto reinstallare il Gambas, ma ho installato la versione 3 al posto della versione 2 che avevo in precedenza ed un po di differenze ci sono e quindi vi chiedo e penso chiederò un po di aiuti.

Ho caricato il vecchio programma sviluppato con la precedente ide e pare che per molta parte sia funzionale; il form ho dovuto adattarlo leggermente, solo le due ListBox da adattare come dimensioni e mi pareva che tutto quadrasse.

Ora però ho notato che non riesco ad impostare il colore di background da listato il codice che usavo in precedenza è il seguente:

Codice: [Seleziona]
ButtonStamp.Background = &H00FF0000

Mi ricordo che questa parte di programma in precedenza funzionava, ma a quanto pare qualcosa deve essere cambiata il fatto è che la riga non determina variazioni aprezzabili su ciò che ottengo, inoltre, per completezza devo dire che ho provato ad impostare il colore di background anche dalla ide ed anche in quel caso non succede proprio nulla.

Devo dirvi che mentre scrivo mi sta balenando l'idea che ci sia qualcosa nel codice del form non più compatibile con la precedente versione, ma come faccio a vederlo, dovrò reimpostare i bottoni

Attendo vostre istruzioni e in ogni caso vi ringrazio

Bye by AFo

187
Ciao a tutti,

ora il tutto funziona, forse a qualcuno questa soluzione non piacerà, ma e molto funzionale, semplicemente nella dichiarazione della procedura non  passo alcun parametro

Codice: [Seleziona]
Public Procedure LETTURA_FILE_CLIENTI()

la variaqbile num la dichiaro come locale nella procedura stessa mentre la variabile tot_cli è una varibile globale ed alla fine della procedura passo il valore di num in tot_cli

Codice: [Seleziona]
tot_cli = num

in modo da lavorare  tranquillamente in locale e solo alla fine passare il valore ottenuto nella variabile da me fissata.

Con questo messaggio termino i miei post in questa area perchè avendo ora Gasmbas 3 inserirò i miei post nell'area pertinente.

Ciao a tutti

188
Rispondo in questa discussione (ho visto il warning comparso all'atto della richiesta di risposta) proprio per cercare di ricollegarmi con gli amici con cui stavo dialogando.

Come è possibile che ricompaia dopo molto più di due anni di buco e di ciò mi scuso con vuott e Picavbg? Semplicemente in quel periodo ci fù una nuova versione della mia Suse e non c'era più la possibilità di poter installare il povero Gambas che pian piano cadde nel dimenticatoio, inoltre dopo poco tempo presi la gestione di un sito gestito da un cms che mi impegnò moltissimo.

Solo ora con l'avvento della 13.2 della Suse ho ritrovato la possibilità di riavere gambas e l'ho subito scaricato nella sua versione 3, penso che ciò che sia cambiato sia la Ide e non il linguaggio.

Comunque  rileggendo questo post ho inquadrato a che punto stavo ed ho formulato un modus operandi da seguire che posterò entro breve se funzionerà come penso e poi mi dedicherò a continuare il programma perchè ne avrei proprio bisogno.

Saluti a tutti.

AFo

189
Domande tecniche (Gambas 2) / Re: Strano comportamento dell'editor
« il: 29 Luglio 2012, 23:07:18 »
Prima cosa mi scuso per il lungo buio che vi ho lasciato, ciò non era dovuto ad una poca soddisfazione da parte mia sia verso questo sistema di programmazione pittosto che, verso questo forum o questa comunità; la verità è semplicemente che per vari motivi il tempo a mia disposizione per potermi divertire a programmare si è praticamente azzerato.

Solo in questi giorni ho potuto riprendere il programma che avevo iniziato a tradurre, ed ho potuto, a mente fredda, scoprire il problema che mi stava affliggendo, semplicemente avevo incluso nel listato un pezzo di quello vecchio in superbasic ed il sistema, chissà perché aveva chiuso la procedura dopo quello e non prima; ciò interferiva e causava quello strano errore di cui vi avevo scritto in questa discussione.

Ho aperto la classe con Kate ed ho visto il problema, dopo di cui ho commentato tutto il listato alieno ed ora il tutto ha preso a funzionare normalmente, penso che in futuro riprenderò a tempestarvi delle solite mie domande, sempre tempo permettendo (penso che comunque potrò avere un po' più di tempo in futuro).

Ciao a tutti.

190
Domande tecniche (Gambas 2) / Re: Strano comportamento dell'editor
« il: 24 Giugno 2012, 14:09:15 »
Dunque:

Il mio codice è lungo per il momento è lungo 302 righe e non è ancora stato compilato e non contiene nessuna funzione Feditor, sono in possesso della versione 2 di gambas ed è appena stato upgradato tramite il sistema della mia distribuzione che è una Suse 12.1.

191
Non so cosa può essere successo, ho notato che nel frattempo c'è stato un aggiornamento di gambas, lo strano che dopo l'aggiornamento il sistema mi apre il forma ma non la classe associata e mi rende un errore con questa scritta:

Non riesco ad aprire il file

Hunknown operator
Feditor.Reload.2057


Cosa può essere successo?

192
Programmazione (Gambas 2) / Re: Dichiarazioni di array globali
« il: 01 Aprile 2012, 22:08:42 »
scusami, ma mi sfugge, forse, qualcosa del ragionamento... però vedendo il codice continuo a non capire.   :hard:
Allora... va be'... facciamo finta che ora hai trasformato la sub-routine da Procedure a Function... dunque sarebbe così:
Codice: gambas [Seleziona]

PUBLIC FUNCTION LETTURA_FILE_CLIENTI(num AS Integer)

oh... però non mi pare che la sostanza cambi.... il che continua a significare che, non appena la procedura del programma passa a questa routine-Funzione, la variabile num viene riempita dall'intero passato da tot_cli (qualunque intero le passi).
Procedendo, però, il programma s'imbatte nella riga:
Si, se però ti focalizzi sulla chiamata sarebbe plausibile questa sintassi:
Codice: gambas [Seleziona]
tot_cli=LETTURA_FILE_CLIENTI()

Ragion per cui la dichiarazione diverrebbe:
Codice: gambas [Seleziona]
PUBLIC FUNCTION LETTURA_FILE_CLIENTI()



Citazione
Codice: gambas [Seleziona]

  num = 0

...qualunque cosa num contenesse, avendoglielo passato tot_cli, ora viene azzerato.
Nel caso che ti ho illustrato io a questo punto avrebbe perfettamente senso sia la dichiarazione come variabile locale sia il settaggio a zero della stessa, considera anche che num non è un campo di comodo ma un contatore e chiaramente tranne casi particolari i contatori è buona norma settarli prima di porli in funzione, ma..........

Citazione
Domanda: ma se volevi semplicemente dichiarare il tipo di variabile nella Funzione, non era più corretto un:
Codice: gambas [Seleziona]

  Dim num As Integer
E proprio qui ho paura di aver dato per scontato qualcosa che non dovrei dare per scontato, nel basic da cui provengo le variabili di passaggio nelle proc e nelle function non dovevano essere dichiarate come variabili locali perché si sarebbe generato un errore sia a livello interprete che in fase di compilazione quindi una sintassi del genere non si poteva scrivere:
Codice: gambas [Seleziona]
PUBLIC FUNCTION LETTURA_FILE_CLIENTI(num AS Integer)
Dim num As Integer

Ma qui, in gambas, è valida questa sintassi? Ho gia visto che le variabili che devono essere fatte ritornare nelle function:
Codice: gambas [Seleziona]
Return nome_variabile

qui in gambas devono essere dichiarate come locali nel precedente basic invece no!

Grazie! Ciao. :ciao:

193
Programmazione (Gambas 2) / Re: Dichiarazioni di array globali
« il: 01 Aprile 2012, 18:11:55 »
Comunque, una domanda relativa all'intero listato di codice che hai allegato:
PUBLIC PROCEDURE LETTURA_FILE_CLIENTI(num AS Integer)

  DIM ch_file AS File
  DIM ...... etc etc
  etc etc

  ch_file = OPEN _base & "CLIENTINEW.dat" FOR READ
  INPUT #ch_file, filler$
  INPUT #ch_file, num_rec
  num = 0
  ..... etc etc

perché alla variabile num prima passi un valore  con LETTURA_FILE_CLIENTI(num AS Integer), e poi lo azzeri:  num = 0 ?  ???

...non ho... capito...
Uhm... la variabile num deriva da tot_cli che è una variabile globale che viene dichiarata ma non settata in pratica num non riceve valori validi dalla chiamata della procedura, ma ne restituisce, ecco perché concordo con l'osservazione di Picavbg che mi rimarcava che era meglio che questa procedure fosse trasformata in una function.

Grazie, ciao :ciao:

194
Programmazione (Gambas 2) / Re: Dichiarazioni di array globali
« il: 01 Aprile 2012, 18:01:26 »
Ho letto comunque la tua routine di lettura del file sequenziale ed ho notato che non contiene un controllo di sicurezza sull'esistenza del file, a meno che tu non lo faccia altrove.
E' vero, non lo controllo perchè questo file fa parte dei file di controllo del programma e senza di esso non avrei i dati per stampare l'indirizzo sulla bolla, infatti il programma mi serve per emettere bolle di accompagnamento

Citazione
Poi ho visto che apri più volte il file. Credo di capire che la prima volta lo fai, dopo avere valorizzato num-rec, solamente allo scopo di determinare il numero di record validi:
Codice: [Seleziona]
 FOR i = 1 TO num_rec   
     FOR j = 1 TO 13                  ==> 13 dovrebbero sono i campi interni a  ciascun record, vero ?
       LINE INPUT #ch_file, filler$ 
     NEXT 
     visione$ = ESTRAI(filler$) 
     IF visione$ = "1" THEN 
       num = num + 1                 ==> hai trovato un record valido
     END IF 
   NEXT 
   CLOSE #ch_file 
Vere entrambi le osservazioni num_rec contiene il numero totale dei rekord registrati nell'archivio mentre il conteggio num mi restituisce quanti rekord validi ci sono; inoltre come dici tu ogni rekord contiene 13 campi interni: uno viene memorizzato nella matrice clienti1$ (che è monodimensionale di x rekord), i secondi sei vengono inseriti nella matrice clienti2$ (bidimensionale, pari numero di record, 6 campi) e gli ultimi 6 campi vanno nella matrice serv$ (sempre bidimensionale, sempre pari numero di rekord e sempre 6 campi)

Citazione
In realtà vi manca il controllo del fine-file (EOF), però se sei sicuro del contenuto di num-rec, va bene anche così.
In effetti il file CLIENTINEW.dat viene mantenuto da un secondo programma a se stante che si tiene calcolo del numero di rekord che stà gestendo e lo va a scrivere all'inizio del file.


Citazione
nella documentazione ufficiale di Gambas l'errore  "Bad number of dimension" fa presente che
Si tenta di accedere a un array, indicando una serie di indici diverso dal numero di dimensioni della matrice.
E' proprio ciò di cui avevo sentore io!

Citazione
Cosa intendi per "se lo interrogo"?
Intendo dirti che facendo avvanzare il programma passo passo con il debugger ed evidenziando le variabil o gli arrays si ottiene come risposta il valore di ciò che si è evidenziato, evidenziando clienti1$ ottengo uno specchietto con i valori dei vari campi, mentre  evidenziando clienti2$ ottengo per i primi 5 campi "Bad number of dimension" e per i restanti campi Out of bounds

Citazione
Proviamo a farci dire dallo stesso Gambas quanti elementi sono dentro a  clienti2$[num, j] subito dopo la sua creazione:
Codice: [Seleziona]
PUBLIC PROCEDURE LETTURA_FILE_CLIENTI(num AS Integer)  
....bla....bla....bla....
clienti2$ = NEW String[num, 6] 
print num
print clienti2$.count
....bla....bla....bla....
END
Se è come ti aspetti, dovresti anche dirmi come ottieni calculus.
Interrogazione eseguita ed il responso non è difforme da ciò che mi attendevo per il primo array è 5 mentre per gli alti è 30 cioè 5 rekord da 6 campi ognuno.... piuttosto mi stai scrivendo di una entità  calculus, ma guarda che non esiste nel mio listato e non so cosa potrebbe essere.

In ogni caso ti ringrazio.
Ciao! :ciao:

195
Programmazione (Gambas 2) / Re: Dichiarazioni di array globali
« il: 31 Marzo 2012, 23:15:23 »
Effettivamente Picavbg ti devo delle spiegazioni supplimentari, perchè le tue obiezioni che hai mosso sono sensate, ma c'è perti della procedura che io non ho pubblicato che mutano del tutto la logica che tu presumi abbia il mio listato:

Tra la linea 27 e la linea 29 c'è una parte di codice molto significativa che va ad analizzare il file (li non si vedeva "CLIENTINEW.dat") ed alla fine la variabile num ha un valore ben determinato, nella prova che ho eseguito per esempio era 5; la variabile num_rec non deriva da un calcolo o da un conteggio, ma è scritto direttamente all'inizio del file e comunque è il totale dei record contenuti; num alla fine del codice che ti dicevo sopra contiene invece il totale dei record validi da visualizzare, e questa informazione è scritta nell'ultimo carattere di ogni record.

Dalla riga 33 in poi il codice legge nell variabile e negli array _tmp$ I record del file e poi li passa nella matrice definitiva solo se il record è valido e deve essere visualizzato, oltretutto non lo avevo postato ma nel codice esiste un secondo vettore serv$ che contiene sempre dati del file.

Per maggiore chiarezza ti posto quindi la routine completa:

Codice: gambas [Seleziona]

PUBLIC PROCEDURE LETTURA_FILE_CLIENTI(num AS Integer)
'########################################################################## PROCEDURA LETTURA FILE ELENCO CLIENTI #####
  DIM ch_file AS File '##### Identificatore del file
  DIM clienti1_tmp$ AS String '##### Variabile navetta - Nome ditta
  DIM clienti2_tmp$ AS NEW String[] '##### Array navetta - Dati ditta
  DIM serv_tmp$ AS NEW String[] '##### Array navetta - Dati di servizio per il programma
  DIM filler$ AS String '##### Lettura dati non usabili
  DIM buffer$ AS String '##### Lettura diretta di un record
  DIM visione$ AS String '##### Determinazione record da visualizzare
  DIM i AS Integer '##### puntatore numero del record
  DIM j AS Integer '##### Puntatore numero del campo
  DIM y AS Integer '##### Puntatore alternativo numero del record
  DIM num_rec AS Integer '##### Numero totale dei record

  ch_file = OPEN _base & "CLIENTINEW.dat" FOR READ
  INPUT #ch_file, filler$
  INPUT #ch_file, num_rec
  num = 0
  y = 0
  IF num_rec <> 0 THEN
    FOR i = 1 TO num_rec
      FOR j = 1 TO 13
        LINE INPUT #ch_file, filler$
      NEXT
      visione$ = ESTRAI(filler$)
      IF visione$ = "1" THEN
        num = num + 1
      END IF
    NEXT
    CLOSE #ch_file
    clienti1$ = NEW String[num]
    clienti2$ = NEW String[num, 6]
    serv$ = NEW String[num, 6]
    clienti2_tmp$ = NEW String[6]
    serv_tmp$ = NEW String[6]
    ch_file = OPEN _base &/ "CLIENTINEW.dat" FOR READ
    INPUT #ch_file, filler$
    INPUT #ch_file, filler$
    FOR i = 0 TO num_rec - 1
      LINE INPUT #ch_file, buffer$
      clienti1_tmp$ = ESTRAI(buffer$)
      FOR j = 0 TO 5
        LINE INPUT #ch_file, buffer$
        clienti2_tmp$[j] = ESTRAI(buffer$)
      NEXT
      FOR j = 0 TO 5
        LINE INPUT #ch_file, buffer$
        serv_tmp$[j] = ESTRAI(buffer$)
      NEXT
      IF serv_tmp$[5] = "1" THEN
        clienti1$[y] = clienti1_tmp$
        FOR j = 0 TO 5
          clienti2$[y, j] = clienti2_tmp$[j]
        NEXT
        FOR j = 0 TO 5
          serv$[y, j] = serv_tmp$[j]
        NEXT
        y = y + 1
      END IF
    NEXT
  END IF
  CLOSE #ch_file

END


Un'ultima cosa: riflettendo l'obiezione che mi muovi sul fatto di tramutare la procedure in function effettivamente è molto condivisibile, la variabile num all'esterno tot_cli in entrata non prevede valori ma solo essere dichiarata mentre restituisce poi il totali dei rekord visualizzati e quindi la function è senz'altro più che giustificata.

Ciao a tutti e saluti.

Pagine: 1 ... 11 12 [13] 14 15