Ciao
Problema :
Ho una collection al cui interno salvo svariate class :
DIM oggetto AS NEW OGGETTIdisegnati
WITH oggetto
.tipo = tipo
.x = x0
.y = y0
END WITH
tutti_gli_oggetti.Add(oggetto, conteggio)
la class è composta così ( è più lunga ) :
PUBLIC tipo AS String
PUBLIC x AS Integer
PUBLIC y AS Integer
....
Come si fà a salvare la collection per averla disponibile al nuovo avvio ???
Devi usare il compinente gb.setting....e poi lo gestisci con la sintassi:
setting[nome_variabile/tipo] = nome_stringa
setting[nome_variabile/x] = valore_numerico
ecc....
e dai
per salavre i setaggi
per leggere i dati invece usi
variabile_tipo = setting[nome_variabile/tipo]
variabile_x = setting[nome_variabile/x]
In realtà, essendo un semplice file, configurato in modo simile ai vecchi INI di windoz, puoi scriverci di tutto, ma non in formato binario; per intenderci, il file è un file di testo, puro e semplice testo, per cui l'inserimento di caratteri binari, potrebbe portare a qualche problema.
Nel qual caso, è possibile convertire il tutto in valori esadecimali (o decimali), ma rappresentati sempre in formato ASCII.
In pgDesigner 1.x, ho usato questo approccio per salvare le impostazioni dell'applicazione, ma poi ho sostituito il tutto in XML. La cosa, ovviamente, non cambia l'aspetto ascii, perchè anche xml è in definitiva un file di testo, solo che ha una sintassi particolare, per una lettura specifica.
In Gambas, non puoi esportare l'oggetto, come è localizzato effettivamente in memoria, ma solo i valori delle sue proprietà correnti. Queste devono comunque essere convertire un stringhe, per poter essere salvate con Setting.
Come suggerito da leo, è quello di salvare le coordinate e le dimensioni di una Form (x,y,w,h), ad esempio, ma non è possibile salvare il blocco binario dell'oggetto stesso.
Ritornando a pgDesigner, io uso sia Setting che Xml (a scelta dell'utente), per salvare la configurazione di un progetto, ovvero i dati immessi dall'utente, le coordinate di un oggetto, i link, e varie altre cose, ma sempre in formato ascii. Per esempio, salvo anche i colori di un singolo oggetto, convertendo opportunamente il valore RGB nei singoli elementi, li trasformo in stringhe, e poi ci faccio un bel Join(array, ",") con la virgola come separatore, con il risultato di avere una stringa così:
Abbinando la stringa ad uno nome specifico, posso salvarla nel file con Setting, in questo modo:
Setting["COLORS/BgColor"] = "255,0,192"
E' ovvio che, nella rilettura del valore, devo fare l'operazione contraria, ovvero splittare la stringa nei singoli elementi, trasformarli in numeri interi, e ricreare il colore con la funzione appropriata.