Scrivere dati nel Registro di Sistema (Regedit) e recuperarli quando servono. - pagina vista: volte Seconda parte Requisiti: buona conoscenza procedure VBA - Conoscenza accesso e struttura del Registro di Sistema (Registro di configurazione). Al lettore consiglio di leggere la prima parte contenente suggerimenti e spiegazioni sulle Istruzioni e Funzioni utilizzate e che utilizzeremo anche qui. A completamento delle funzioni viste nella Prima parte, inizio questa seconda parte parlando della Funzione GetAllSettings che restituisce un elenco di impostazioni di chiave e dei rispettivi valori (creati in origine con SaveSetting) da una voce del Registro di configurazione di Windows. La sintassi è semplice e richiede due argomenti obbligatori: appname e section (gia spiegati nella prima parte), quindi :
GetAllSettings restituisce un valore Variant costituito da una matrice bidimensionale di stringhe contenenti tutte le impostazioni di chiave della sezione specificata e i valori corrispondenti. Se appname o section non esistono, la funzione GetAllSettings restituisce un valore Variant non inizializzato. Abbiamo visto che la registrazione di dati tramite l'istruzione SaveSetting genera un doppio elenco di valori: le "chiavi" nella colonna a sinistra e i "settaggi" nella colonna di destra: la funzione GetAllSettings restituisce in un colpo solo entrambi gli elenchi, e li restituisce in forma di una matrice a due dimensioni: tanti "indici di riga" (della matrice) quante sono le righe memorizzare nella sezione specificata del Registro, ogni riga contenente le due colonne di dati memorizzati e cioè la colonna (0) di matrice contenente le "chiavi" e la colonna (1) contenente i "settaggi". Per reperire i dati quindi scorreremo i limiti di matrice (dall'inferiore al superiore) usando un contatore che per ogni riga in matrice ci restituisca i dati della colonna 0 e della colonna 1 di quella riga scorsa; cosa ne facciamo? in questo esempio semplifichiamo restituendo i dati in una tabella posta sul Foglio1, a partire dalla riga 1 dove scriveremo le intestazioni di riga; vediamo la routine impostata sui dati salvati nel Registro, dalla ListBox Multipla, ultimo esempio dell'articolo precedente:
e queste le istruzioni:
Nella routine non ho impostato il controllo degli errori, comunque necessario, ma provvederà il lettore se userà le istruzioni di esempio.
Ultimo esempio. In questo esempio ci occuperemo del salvataggio e successivo recupero di dati e/o valori contenuti in Oggetti ActiveX (Controlli ActiveX) posti su userform, e più precisamente di alcune TextBox, di alcune OptionButton e di alcune CheckBox. Anche in questo caso l'esercizio è un esercizio didattico che deve servire solo ad illustrare il meccanismo necessario all'identificazione dei "Controlli" (che formeranno le "Key" nell'apposita sezione del registro, con i relativi contenuti (per le TextBox) e i valori (Value, per le OptionButton e le CheckBox) che formeranno i "Setting"). Il lettore adatterà gli esempi alle proprie esigenze ed ai "Controlli" che impiegherà sulle proprie UserForm. Allorchè posizioniamo dei "Controlli ActiveX" in una UserForm, automaticamente ad ogni "Controllo" inserito viene assegnato un indice identificativo, il TabIndex, che inizia dall'indice 0 e si incrementa di 1 per ogni "Controllo" inserito facente parte della stessa "Classe" di controlli; Il TabIndex è una "proprietà" che ogni "Controllo ActiveX" possiede ed è univoco all'interno della stessa "Classe". Un altro aiuto nell'identificazione di un "Controllo" ci viene fornito dal Nome stesso del controllo: se ad esempio vogliamo identificare il TextBox1 che avrà come TabIndex il valore 0 in quanto il primo tra le TextBox, potremmo istruire l'istruzione
Lo stesso faremo legando nome-controllo e suo Tabindex per i vari controlli che avremo inserito, "leggendoli" con un ciclo che "scorra" tutti i controlli, e lo stesso schema di istruzioni lo potremo usare sia per le istruzioni di salvataggio sia per il recupero dei dati salvati. Possiamo usare due eventi della UserForm, l'evento Activate per lanciare il richiamo dei dati e l'evento Terminate per salvare i dati; useremo due macro il cui nome inseriremo negli eventi; useremo la variabile Ctrl come variabile in comune alle due macro poste nel modulo della stessa userform, e la posizioniamo quindi nella sezione "Generale - Dichiarazioni", così:
prima delle macro, vediamo l'immagine di una possibile UserForm (sotto) con i dati da memorizzare nelle tre textbox e le scelte delle optionbutton, delle checkbox, e della voce che avremo selezionato in una ListBox collegata ad una Label il cui valore di Caption sarà salvato, e a destra ciò che alla chiusura registreremo nel Registro: ho usato come nome di programma (appname) "I Miei Dati", e come sezione (section) il nome "Form2"
Le istruzioni. bene, vediamo le istruzioni che non sono difficili da capire; ho separato le due azioni (salvataggio e recupero) in due routine che poi faremo richiamare negli eventi della Userform; in entrambe le macro ho inserito due semplici controlli per avvisare se mancano registrazioni precedenti, e se non si è scritto almeno cognome e nome nel salvataggio; la prima istruzione è quella per il salvataggio dei dati che vediamo nell'esempio dell'immagine sopra a sinistra, e l'effetto nel Registro è visibile nell'immagine sopra, a sinistra:
Queste due macro le richiameremo nei due eventi sotto esemplificati: con L'Activate provvediamo pure a caricare la ListBox1 con i dati che formeranno il "Tipo di Domicilio"
e
e infine l'istruzione per trasferire l'elemento che sarà selezionato nella ListBox, nella e come Caption della Label4:
Ovviamente potremo usare anche l'istruzione DeleteSetting per cancellare dal Registro le chiavi desiderate.
Conclusioni. Ognuno potrà sfruttare questi suggerimenti per migliorare i propri lavori, e potrà sfruttare i concetti di identificazione proposti, per tutte le Classi di "Controlli ActiveX" che impiegherà, ma ricordo di fare attenzione: conviene non scherzare col Registro di Configurazione.
prelevato sul sito www.ennius.altervista.org |