Newsgroup: it.comp.appl.access
Titolo: colore delle textbox

Salve a tutti.
Quancuno potrebbe dirmi come faccio in VBA a far cambiare colore di sfondo 
ad una casella testo quando è attivo il setfocus?
Grazie in anticipo
Ciao 

 Ciao
Un modo molto semplice e quello di settare lo "Stile sfondo" del controllo
a "Trasparente" e come colore sfondo mettere il colore che ti aggrada...
da codice per intercettare lo stato attivo del controllo..
 
Screen.ActiveControl.ControlName 
oppure:
Me.ActiveControl.ControlName 
--
sv
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it


Se vuoi, per esempio, fare lampeggiare il controllo attivo, sull'evento 
timer della maschera metti:
Dim xxx As Control
Set xxx = Me.ActiveControl
If xxx.BackColor = -
2147483643
 Then
    xxx.BackColor = 255
Else
    xxx.BackColor = -
2147483643
End If
e come Intervallo Timer (nelle proprietą della maschera) metti 500 (ad 
indicare che deve cambiare ogni secondo).
Ciao
Antonio


Ho provato a implementare la funzione ma non funge.
Cortesemente potresti farmi un esempio completo.
Tiringrazio per la cortesia. 


Ciao 

 ha scritto nel messaggio 
news:86XFh.11444$J11.2...@twister1.libero.it...

Quello seguente è il codice di esempio per maschere standard e non maschere 
continue:
Private Sub NomeControllo_GotFocus()
Me.Descrizione.BackColor = 255 'rosso
End Sub
Private Sub NomeControllo_LostFocus()
Me.Descrizione.BackColor = 10079487 'nocciola
End Sub
In GotFocus (su attivato) del controllo metti il colore che vuoi compaia 
all'attivazione; in LostFocus (su disattivato) dovresti mettere il colore 
che aveva prima del focus...per conoscere questo colore puoi sfogliare le 
proprietà del controllo fino alla voce "Colore Sfondo" e copiare il valore.
Se la maschera è a schede continue devi usare la formattazione condizionale.
Ciao, Carlo 

 ha scritto nel messaggio 
news:ese0ee$ots$1...@tdi.cu.mi.it...

Per cui dovrei scrivere tanto codice quanti sono i controlli. Non c'è una 
procedura con meno codice? Qualcosa che agisca su tutti i controlli, senza 
dover creare del codice per ogni controllo.
Grazie per la pazienza 

 ha scritto nel messaggio 
news:miAGh.12955$J11.2...@twister1.libero.it...

Ti sono stati descritti diversi tipi di soluzione: forse quello che vorresti 
è quello che ti avevo indicato io, ma hai detto che non ha funzionato. Credo 
comunque che hai commesso qualche errore perchè a me funzionava. Riepilogo 
quello che dovresti fare.
Relativamente alla maschera, ha la possibilità di definire un evento 
particolare, chiamato "su timer". Questo evento si verifica ogni x 
cinquecentesimi di secondo: il valore x lo devi indicare nella casellina 
successiva ("Intervallo timer") a quella dell'evento, o ancha via codice. 
Per comodità io avevo indicato di impostare il valore 500 direttamente nella 
casellina "Intervallo timer" e sta ad indicare che ogni secondo viene 
attivata la routine indicata nella casella "su timer".
Perciò, quando è attiva questa funzionalità, il controllo passa ogni secondo 
a questa routine:
Private Sub Form_Timer()
    Dim xxx As Control
    Set xxx = Me.ActiveControl
    If xxx.BackColor = -
2147483643
 Then
        xxx.BackColor = 255
    Else
        xxx.BackColor = -
2147483643
    End If
End Sub
Questa routinetta agisce solo sul controllo attivo, ovvero quello che ha il 
focus, ed alterna il colore di fondo tra rosso e bianco con un intervello di 
un secondo. Se vuoi, puoi modificare questo tempo agendo su quel valore 
detto prima.
Ciao
Antonio


Sì, c'è. Anzi ce ne possono essere diversi.
Quello segnalato da Antonio potrebbe andare bene.
Esiste il whiteEvent ma credo troppo difficile se sei alle prime armi.
Esiste anche un'altra procedura facile facile:
Apri la maschera in struttura, per ogni controllo setta il colore che vuoi 
appaia appena lo si seleziona; per esempio il verde.
Salva la maschera che ora avrà tutti i controlli verdi. Riapri la maschera 
in struttura e tutti i controlli che avevi impostato a verde li imposti a 
trasparente come colore di sfondo. Salva e chiudi.
Ora riapri la maschera e vedi cosa succede ogni volta che selezioni un 
controllo...noterai che assume il colore verde per ridiventare trasparente 
quando sposti il focus.
Il tutto senza scrivere una sola riga di codice.
Ciao; Carlo 

 ha scritto nel messaggio 
news:45eafc2b$0$7738$5fc...@news.tiscali.it...

Ciao Antonio e' grazie ancora per la pazienza.
Si sono riuscito a far funzionare il codice che mi hai gentilmente 
trascritto sopra, pero' ci sono due problemi:
1) Il campo lampeggia quando il cursore si trova nella casella, ma io 
desidererei fosse fisso e quando esco dalla casella torni al colore bianco.
2)Il campo non e' fisso ma lampeggia e se io esco dal campo mentre 
quest'ultimo e' di colore rosso rimane tale, invece io vorrei diventasse 
nuovamente bianco all'uscita dal campo.
Ho provato a inserire il tuo codice sotto l'evento Form_current ma non mi 
funge.
Ciao

 ha scritto nel messaggio 
news:esf5kd$qmr$1...@tdi.cu.mi.it...

Effettivamente la procedura facile facile funge, pero' io desideravo 
qualcosa da codice vba anche per avere cosi sempre piu' padronanza.
Grazie 

 Grazie
La via più facile, se raggiunge perfettamente lo scopo, è sempre quella da 
preferire.
Se poi vuoi fare delle esercitazioni su VBA allora avresti dovuto 
specificarlo nel soggetto del post, perchè, come ti dicevo, esistono molte 
strade, anche molto complesse.
Io ho pensato che volessi risolvere un problema...
Ciao, Carlo 

 Grazie.
Vedi questa soluzione... :
http://www.accessgroup.it/HomeArgomenti.asp?ID=167&Oggetto2=Evidenziare%20i%20controlli


 ha scritto nel messaggio 
news:esgq0p$gjf$1...@news.newsland.it...

Perfetto ci siamo gazie mille a tutti. 

 ha scritto nel messaggio 
news:esgn2o$u4n$1...@tdi.cu.mi.it...

Io effettivamente ho bisogno di risolvere un problema e nel contempo cerco 
anche di apprendere il VBA.
Inoltre mi, mi piace usare il VBA, mi da un senso di padronanza.
Se mi fai la cortesia di aiutarmi ti ringrazio.
Ciao 

 Ciao
La soluzione che ti ha proposto "sv" va benissimo. Provale e cerca di 
capirci qualcosa.
Eventualmente posta il problema che si vede di darti una mano.
Ciao, Carlo 

 ha scritto nel messaggio 
news:eskctq$3ok$1...@tdi.cu.mi.it...

Innanzitutto di ringrazione.
Dunque venivamo al problema. Ho scaricato la demo che mi ha segnalato "sv" è 
sono riuscito ad implementare il relativo codice all'interno del mio 
database, solo che funge su tutti i campi testo, infatti alcuni non cambiano 
colore quando sono in setfocus. Inoltre nella vi sono anche delle combobox 
ed anche queste non vanno.
Se eventualmente cosi non mi si puo' aiutare, io posso inviare via mail il 
database e magari cosi vedere cosa non va modificarlo con acanto le relative 
spiegazioni.
Un grazie gigatensco.
Ciao 

 Ciao
Ho modificato la classe di Salvino che ora funziona solo per il colore delle 
textbox e delle combobox a patto che anche il TAG delle combo sia E.
Questa la classe che andrebbe sostituita a quella originale.
Option Compare Database
Option Explicit
'Salvino Crucitti Gennaio 2007
'modificato da Carlo Costarella
Private WithEvents txt As TextBox
Private WithEvents Cxt As ComboBox
Dim BC As Long
'Sull'evento Attivato dei controlli con TAG "E" della maschera OPEN ME
Private Sub txt_GotFocus()
BC = txt.BackColor
txt.BackColor = 10092543
End Sub
'Sull'evento Disattivato dei controlli con TAG "E" della maschera OPEN ME
Private Sub txt_LostFocus()
txt.BackColor = BC
End Sub
Private Sub Cxt_GotFocus()
BC = Cxt.BackColor
Cxt.BackColor = 10092543
 End Sub
Private Sub Cxt_LostFocus()
     Cxt.BackColor = BC
End Sub
'Funzione che viene richiamata sull'evento Load della maschera OPEN ME
Public Function Espansione(tx As TextBox)
    Set txt = tx
    txt.OnGotFocus = "[Event Procedure]"
    txt.OnLostFocus = "[Event Procedure]"
End Function
Public Function EspansioneCombo(Ctx As ComboBox)
    Set Cxt = Ctx
    Cxt.OnGotFocus = "[Event Procedure]"
    Cxt.OnLostFocus = "[Event Procedure]"
End Function
'----------------------------------------------------------------
Questo il codice da usare su form load:
Private Sub Form_Load()
Dim EspandiTxt As Espandi
Dim EspandiCombo As Espandi
Dim Ctl As Control
Dim c As ComboBox
    For Each Ctl In Me.Controls
        If Ctl.Tag = "E" Then
            If Ctl.ControlType = 111 Then
            Set EspandiCombo = New Espandi
            EspandiCombo.EspansioneCombo Ctl
            Istanze.Add EspandiCombo
            Else
            Set EspandiTxt = New Espandi
            EspandiTxt.Espansione Ctl
            Istanze.Add EspandiTxt
            End If
        End If
    Next
End Sub
Ciao, Carlo 

 ha scritto nel messaggio 
news:esmmv7$ap1$1...@tdi.cu.mi.it...

Ok. Grazie. Lo provo e ti faccio sapere.
Ciao 

 ha scritto nel messaggio 
news:esmmv7$ap1$1...@tdi.cu.mi.it...

Carlo grazie tante funziona benissimo.
Pero volevo alcune delucidazioni in merito al codice.
Perche' nel codice sottostante c'è "set txt = tx. questo tx a cosa serve? 
Stessa cosa per le combobox come mai set cxt = ctx?
Public Function Espansione(tx As TextBox) 'questo a cosa serve?
    Set txt = tx                                            ' questo 
perche'?
    txt.OnGotFocus = "[Event Procedure]"
    txt.OnLostFocus = "[Event Procedure]"
End Function
Public Function EspansioneCombo(Ctx As ComboBox) 'questo a cosa serve?
    Set Cxt = Ctx 
' questo perche'?
    Cxt.OnGotFocus = "[Event Procedure]"
    Cxt.OnLostFocus = "[Event Procedure]"
End Function
Grazie ancora carlo sei grande. 


cut
Per capire bene il tutto bisogna parlare di classi, cioè di oggetti modulo.
La classe è per esempio il modulo associato alla maschera; ma può essere un 
modulo a parte che contiene nel suo interno tutta una serie di proprietà, 
eventi, variabili ecc. Le classi possono contenere nuovi oggetti.
Comunemente si dice che la classe va istanziata per dire che bisogna farvi 
riferimento per poter accedere alla classe stessa.
Quando nel codice, all'apertura della maschera, si scrive
Dim EspandiTxt As Espandi
vuol dire che si sta dichiarando una variabile EspandiTxt definendo il tipo 
di oggetto come "Espandi", cioè il nome della classe.
Da questo momento a EspandiTxt si possono applicare tutti gli eventi o le 
proprietà stabiliti nell'oggetto classe Espandi.
Quando nella classe scrivo: Private WithEvents txt As TextBox
sto dichiarando una variabile di tipo TextBox e sto dicendo che txt è una 
variabile oggetto usata nella classe.
Quando poi e sempre nella classe scrivo la funzione:
Public Function Espansione(tx As TextBox)
con Set txt = tx sto dicendo al codice di attribuire all'oggetto txt 
(l'oggetto appena visto nella classe) l'oggetto tx passato alla funzione 
stessa (cioè quel ctl - controllo - ogni controllo nella maschera di tipo 
textbox).
Nota bene che se alla funzione avessi passato una variabile di tipo Date, la 
successiva istruzione Set txt = tx avrebbe generato un errore perchè txt è 
dichiarato come textbox e non come date.
Lo stesso dicasi per cxt che però è una variabile, un oggetto, di tipo 
combobox.
txt.OnGotFocus = "[Event Procedure]"
txt.OnLostFocus = "[Event Procedure]"
indicano due eventi gestiti dalla classe per l'ggetto txt e più esattamente 
l'evento su selezionato e su deselezionato. "[Event Procedure]" è la parola 
riservata, in italiano "Procedura Evento", per indicare appunto che quando 
si seleziona o si deseleziona l'oggetto txt la classe gestisce questi 
eventi. Ma come li gestisce? Con le due sub Private Sub txt_GotFocus() e 
Private Sub txt_LostFocus() entrambi ovviamente nella classe già istanziata 
all'apertura della maschera.
In definitiva il codice all'apertura della maschera istanzia la classe e fa 
gestire a questa i due eventi (su selezionato e su deselezionato) di ogni 
textbox (casella di testo) e di ogni ComboBox (casella combinata) presenti 
nella maschera stessa.
Mi rendo conto che non è proprio immediata la comprensione ma questo può 
servirti come base per un tuo approfondimento.
Ciao, Carlo 


Grazie sei geniale, intuitivo e veramente preparato.
Grazie davvero.
Ciao


Prego.
Ciao, Carlo 

 ha scritto nel messaggio
news:esr7qc$kv2$1...@tdi.cu.mi.it...

E mecojoni (Tm.)
Antonio

"Antonio Biso" <ch...@NOSPAMetruria.net> ha scritto nel messaggio 
news:DJ9Ih.17395$zG1.1...@twister2.libero.it...

Mi trovavo di vena buona....
Ciao, Carlo