Newsgroup: it.comp.appl.access
Titolo: Come 'sbiadire' alcuni controlli grafici?

Ho una form con alcuni command button colorati, ad esempio la schermata 
tavoli pizzeria col tavolo verde che indica libero, tavolo rosso per 
occupato, viola per prenotato, e cosi' via
Avrei bisogno di 'sbiadirli' in certi momenti per segnalare 
all'operatore che non sono utilizzabili
Non voglio pero' usare la proprieta' disable perche' il command button 
deve mantenere la propria efficacia se premuto
Il primo approccio e' stato tentare di 'schiarire' il colore
Ma essendo che ogni tavolo e' composto da 4 command button, ognuno col 
suo sfondo, bordo, ecc..  ed essendo che 'schiarire' un colore non e' 
cosa banale (dato un colore X, qual'e' il colore Y che rappresenta X 
sbiadito?) almeno per me (sigh), son qui mestamente a chiedere aiuto
 
La domanda e': come fare per 'schiarire' un gruppo di command button, 
mantenendone la funzionalita' (se operatore preme l'evento click deve 
partire)?
 
 

Io ho risolto in un modo diverso, ma come sempre non comodo per tutti...!
 
Questo è un Demo per farti capire come ho approcciato alla gestione dei Tavoli:
 
https://1drv.ms/u/s!ALe2sGzrs4WCojk
 
 
(quando lo apri in alto a Sx c'è una Listbox con precaricati 2 Layout... vedi un po)
Questo esempio parziale gestisce i colori, e la cosa è semplice se la fai diventare un Metodo della Classe...
 
Se vuoi gestire invece l'Enabled, ho fatto anche quello, ma in un contesto un poco differente e non ho nulla da mostrarti, ma ho usato di base questo... ho implementato la proprietà ENABLE come proprietà di classe
oltre che alla posizione del Tavolo ma ho coperto l'area con un CommandButton TRASPARENTE in primo piano, quindi gli eventi vanno gestiti su questo MAIN CONTROL, ed in base alla posizione X/Y nel MAIIN CONTROL in primo piano trovo il Tavolo che c'è sotto, ciclando la Collection di Classi dei tavoli comparandoli con X/Y, ed a quel punto recupero la Classe e gestisco l'Enabled...
Essendo la Classe tavolo, PADRE delle Sedie, l'applicazione di ENABLED automaticamente va a condizionare tutte le Classi Figlie delle sedie...
 
Il tutto è semplice... ma so che questo approccio OOP non è sempre capito e condiviso.
 
@Alex

 
 
potresti mettere sul pulsante una immagine "schiarita" e scambiarla 
all'uopo con quella meno pastellosa, oppure chiedi su 
it.arti.fotografia.digitale la formula magica da applicare alle componenti 
RGB/CYMK, vedo anche oggi che ogni tanto parlano di programmi di 
fotoritocco
 
-- 
/-\ /\/\ /\/\ /-\ /\/\ /\/\ /-\ T /-\
-=- -=- -=- -=- -=- -=- -=- -=- - -=-
........... [ al lavoro ] ...........

 sbiadito?) almeno per me (sigh), son qui mestamente a chiedere aiuto 
 
 
Non mi è capitato ma googlando vedo parecchia robetta, specialmente per Excel.
Questo è specifico per Access:
 
https://francescofoti.com/2021/07/how-to-darken-or-lighten-an-rgb-color-in-vb-a/
 
 
'Sembra' fare al caso tuo, ma non posso testarlo non avendo Access installato sul PC.
Provalo e facci sapere.
 
Saluti 2022


NON HAI ACCESS INSTALLATO????
Ehhh qua' devi andare a confessarti e raccontargli tutto
 
:)  :)  :)


Bellissimo esempio di programmazione Access, as usual
Ho pensato anch'io a disabilitare il controllo vero e proprio e 
mantenerci sopra un controllo trasparente ma non mi piace come soluzione 
mi sembra un po' un pastrocchio
 
In realta', visto che e' arrivata questa strana necessita', vorrei 
trovare LA soluzione e poi non pensarci piu', mi sto incaponendo sul 
cercare un algoritmo che mi permetta di 'sbiancare' un colore qualsiasi
Se vai su Paint, nella scelta del colore, oltre al Red/Green/Blu hai 
anche il trittico Tonalita/Saturazione/Luminosita
E per qualsiasi colore scegli, se gli abbassi la sola Saturazione 
ottieni l'effetto che vorrei ottenere io, quindi lo stesso colore ma 
spento, come disabilitato
In sostanza vorrei realizzare una funzione del tipo
 
rgb_sbiancato=modifica_colore(red, green, blu, d_ton,d_sat,d_lum)
 
Gli passi R,G,B nei primi tre parametri, e poi il delta Tonalita, il 
delta Saturazione, il delta Luminosita, e la funzione ti restituisce il 
colore modificato
E quindi per ottenere un rosso 'sbiancato'
 
rosso_sbiancato=modifica_colore(255,0,0,-100,0,0)
 
Dovrebbe essere una soluzione usabile con qualsiasi colore
Non ho ancora ben visto se sia possibile leggere/scrivere tonalita, 
saturazione e luminosita

 
 
Si avevo pensato alla grafica sul pulsante ma non sarebbe usabile con 
qualsiasi colore mi capitasse da sbiancare
Sto cercando di capire se sia leggibile tonalita/saturazione/luminosita 
del colore di un tasto, perche' se lo fossero allora potrei ottenere un 
nuovo rgb partendo da un rgb di origine e modificando 
tonalita/saturazione/luminosita
 

 

Si ho provato
E' esattamente quello che cercavo
La routine prima converte un rbg in hsv
Poi cambia valore del V (credo sia la saturazione)
(ma da codice si potrebbe cambiare qualsiasi dei tre valori)
Poi riconverte da hsv in rgb
Muchas gracias

 Muchas gracias
 
L'esempio postato da Simone ha a logica giusta, verifica bene che il codice sia perfettamente REVERSIBILE altrimenti devi memorizzare il colore base, cosa che non serve se scrivendo la Funzione di Darkening e Lightening fossero perfettamente reversibili.
 
Qui mi pare sia un esempio simile con le 2 Funzioni:
https://www.thespreadsheetguru.com/blog/vba-macro-code-lighten-darken-fill-colors-excel
 
 
P.S. usare l'enabled senza il controllo trasparente sopra non sarebbe possibile in quanto una volta Enabled=False non risponde più agli eventi rendendo tutto poco fruibile... pertanto è sicuramente meglio la gestione dei colori.
 
Ciao
@Alex


Da una prima occhiata il codice sembra molto simile
Si, non avevo pensato alla reversibilita' della funzione
In effetti io coloro perche' so gia' il colore, poi a volte sbiadisco 
con la nuova funzione per restituire un rgb sbiadito
Ma per ripristinare il colore pieno uso sempre la variabile iniziale, 
quindi in effetti nel mio caso particolare neanche servirebbe
Pero' per essere perfetta deve pure essere reversibile
Grazie