UserForm : randomizzare il colore di fondo. - pagina vista: volte Funzione QBColor - che restituisce un valore Long che rappresenta il codice di colore RGB corrispondente a un numero di colore specificato. Se ci può interessare far cambiare colore al BackColor delle nostre UserForm, ad ogni click sulle stesse, fra i vari sistemi colore, possiamo far ricorso ad una (vecchia) funzione Basic, la funzione QBColor. Questa funzione (poi sostituita dalla più versatile funzione RGB, vedi anche l'articolo Funzione RGB x colori ) si basa su un'istruzione che richiede, come argomento della funzione, di specificare un valore compreso tra 0 e 15, valore che specifica e restituisce i valori di rosso, verde e blu utilizzati per l'impostazione del colore appropriato nel sistema RGB. Questo esercizio che può essere considerato poco interessante, può invece avvicinare i neofiti, a capire che in vba, è necessario abituarci a prendere in considerazione le "proprietà" che gli oggetti "Controlli ActiveX" possiedono, e che non sempre le "proprietà" simili, di oggetti "Controlli ActiveX" diversi, richiedono le medesime impostazioni, o sopportano le stesse costanti. Infatti potremmo essere portati a ritenere che se per cambiare il colore (con cui vediamo) una UserForm, usiamo la sua proprietà BackColor, lo stesso potremmo fare per cambiare il colore (con cui vediamo) il Font della Caption di una Label. Ma anche la Label possiede la proprietà BackColor, che si riferisce quindi al suo colore di fondo, e che può sfruttare la funzione QBColor, ma per cambiare il colore del Font dovremo usare un'altra proprietà della Label, la proprietà ForeColor, che però non sopporta la funzione QBColor, ma qualsiasi valore intero che rappresenta un colore valido, oppure la funzione RGB. Queste brevi note solo per puntualizzare la necessità di "informarsi" circa le "proprietà" che gli oggetti "Controlli ActiveX" possiedono, in modo da sfruttare le giuste impostazioni per ogni proprietà. La guida in linea è ben "fornita" circa questi argomenti, e per trovarli (gli argomenti) si può seguire anche questa strada:
Ritornando all' esercizio, useremo la funzione QBColor per modificare o impostare il colore di fondo di una UserForm, agendo sulla "proprietà" BackColor della Userform; ma in genere su una UserForm inseriamo altri "Controlli ActiveX", come ad esempio delle Label (etichette), oppure dei CommandButton, ed avremo necessità di poter modificare anche il colore dei caratteri delle Label (o dei CommandButton che di default è impostato a nero), in un colore di contrasto rispetto al fondo che risulterà (per effetto della randomizzazione) per lo sfondo della Userform. Se anche questo fosse nero, o comunque blu scuro, o rosso scuro, o verde scuro, il testo (Caption) delle Label (nero) sarebbe difficilmente ben leggibile. Ora vediamo una tabellina con i 16 colori ottenibili con la funzione QBColor e relativo numero indice:
La randomizzazzione agirà quindi sul numero indice per restituire il colore associato al numero indice casualizzato, e l'istruzione per ottenere questo risultato sarà questa:
La nostra UserForm la vedremo col colore corrispondente al numero generato dalla funzione Rnd. Questa istruzione potremo inserirla nell'evento Activate dell'UserForm (ed ad ogni avvio della stessa avremo un colore diverso), oppure sfruttare l'evento Click della UserForm, e saremo noi, cliccando in una zona libera della UserForm, ad attivare l'istruzione. Per la questione di far cambiare in contemporanea al colore della UserForm, il colore di fondo delle Label, ed il colore dei Font delle Caption delle stesse, possiamo toglierci un dente impostando la proprietà BackStyle della Label a "trasparente", cioè a : 0 - fmBackStyleTransparent ; in questo modo non dovremo preoccuparci del suo colore di fondo, sarà trasparente e vedremo quindi il colore sotto della UserForm. Per impostare il colore dei Font della Caption della Label, dovremo usare la sua proprietà ForeColor, che però non sopporta la funzione QBColor, ma solo un colore RGB (Red, Green, Blue). Bisogna precisare che la Funzione QBColor non restituisce il suo valore indice corrispondente al colore (come nella tabellina sopra), ma il valore RGB corrispondente al colore. Poichè dovremo istruire un'istruzione condizionale che, verificando il colore di fondo della UserForm, modifichi il colore dei Font delle Label, dovremmo poter conoscere il valore di codice RGB che risulterà dalla randomizzazione generata con QBColor. Per semplificarvi e suggerirvi i codici colori RGB corrispondenti, vi riporto questa tabella con inseriti i codici colore RGB accanto al valore indice QBColor:
Se vorrete conoscere i codici colori RGB corrispondenti ai valori indice della Funzione QBColor, provate questa istruzione inserita nell'evento Click di un commandbutton posto su una userform: ad ogni click vedrete il colore ed un messaggio con il codice corrispondente RGB:
Bene, chiariti questi aspetti, vediamo la nostra routine per randomizzare il colore di fondo della UserForm, alternando il ForeColor delle Label : bianco con il fondo scuro, nero con il fondo chiaro: sfruttiamo l'evento Click della Userform
Ovviamente nella stessa istruzione Case potremo modificare tutti i BackColor o i ForeColor di altri componenti ActiveX posti sulla UserForm, come i colori di fondo di commandbutton, textbox, combobox, listbox, ecc. ecc. come pure il ForeColor degli stessi oggetti.
Buon lavoro. prelevato sul sito www.ennius.altervista.org |