Newsgroup: it.comp.appl.access
Titolo: Colori maschera

Un saluto a tutti. Qualche giorno fa ho chiesto come avrei dovuto fare
per cambiare colore di sfondo alla mia maschera su una condizione.
Ho ricevuto, come sempre, la gentile attenzione di qualcuno di voi, che
ha corretto il mio "artigianale" tentativo di riuscirci da solo, con
questo codice:
Private Sub Data_uscita_AfterUpdate()
If Not IsNull(Me.Data_uscita) Then
Me.Corpo.BackColor = 8421504
Else
Me.Corpo.BackColor = 5610858
End If
End Sub
Che funziona perfettamente, messo anche nell'evento Current della
maschera.
Mi sono reso conto in un secondo momento, come spesso accade, che "Data
uscita" non era l'unica condizione affinchè la maschera si scurisse
segnalando che quel record era dismesso, avevo anche "Data Spedizione"
Ho risolto creando per la casella di testo lo stesso evento dopo
aggiornamento e mettendo:
Private Sub Form_Current()
If Not IsNull(Me.Data_uscita) Or Not IsNull(Me.Data_spedizione)
Me.Corpo.BackColor = 8421504
Else
Me.Corpo.BackColor = 5610858
End If
End Sub
Essendo un pò perfezionista ed avendo visto che la mia maschera ha
anche due campi scadenziari, vorrei che ad una prima scadenza la
maschera diventasse arancione e rossa alla seconda scadenza.
Ora, per la vostra ilarità posto il codice che ho provato:
Private Sub Form_Current()
If Not IsNull(Me.Data_uscita) Or Not IsNull(Me.Data_Spedizione) Then
Me.Corpo.BackColor = 8421504
Else
Me.Corpo.BackColor = 5610858
End If
If Not Me.PrimaScad <= Date() - 3 Then
Me.Corpo.BackColor = 33023
Else
Me.Corpo.BackColor = 5610858
End If
If Not Me.SecondaScad <= Date() - 3 Then
Me.Corpo.BackColor = 255
Else
Me.Corpo.BackColor = 5610858
End If
End Sub
Se qualcuno, ripresosi dalle risate, volesse essere così gentile da
indicarmi la Via, si guadagnerebbe eterna riconoscenza......

T_A_O ha scritto:

non so cosa esattamente tu voglia fare, ma il codice è corretto e
sicuramente funzionante. Tieni conto però che, così facendo, se
vengono soddisfatte più condizioni delle varie IF che hai messo, sarà
l'ultima quella che avrà effetto.
P.S.: grazie per il momento ironico :)
ciao

wlady ha scritto:

Non va....non va......grazie per la risposta wlady ma proprio non
va....vorrei che scorrendo i records della maschera, ad esempio con la
rotella del mouse, si evidenziassero i records prossimi alla scadenza,
so che esistono modi sicuramente molto più eleganti per ottenere
questo risultato, ma mi basta che ad un'occhiata questi siano
individuabili, anche per le operazioni connesse alle scadenze.
Il discorso riguardante le If non lo avevo preso in considerazione,
quindi su un report dismesso, quindi grigio, se comunque raggiungesse
la data vicina alla scadenza cambiarebbe colore così come l'ho scritto
io mi sembra di capire....
Ovviamente io invece vorrei che l'uscita (o il trasferimento)
escludessero la possibilità della scadenza.
Come posso dare un ordine di priorità agli eventi?
Sto prendendo le misure per la tua statua nel mio giardino......

T_A_O ha scritto:
[cut]


Prova un diverso approccio al problema utilizzando SelectCase.
Una cosa di questo genere:
Dim intA As Integer 
If (Prima tua condizione) Then intA  1 
If (Seconda tua condizione) Then intA  2 
If (Terza tua condizione) Then intA  3 
.
.
.
Select Case intA 
Case 1 
MsgBox "Questa è la prima condizione" 
Case 2 
MsgBox "Questa è la seconda condizione" 
Case 3 
MsgBox "Questa è la terza condizione" 
.
.
.
End Select 
--
rgrds
SC
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

sv ha scritto:

Proverò ad adattare ciò che mi hai scritto al mio problema, purtroppo
solo ora sto cominciando a capire il funzionamento delle if (forse...)
con il select case non mi sono mai cimentato, ti ringrazio comunque
molto per il suggerimento.

T_A_O ha scritto:

Ultima versione riveduta e corretta con l'If
Private Sub Form_Current()
If Not Me.PrimaScad <= Date + 3 Then
Me.Corpo.BackColor = 33023
Else
Me.Corpo.BackColor = 5478760
End If
If Not Me.SecondaScad <= Date + 3 Then
Me.Corpo.BackColor = 255
Else
Me.Corpo.BackColor = 5478760
End If
If Not IsNull(Me.Data_uscita) Or Not IsNull(Me.Data_spedizione)
Me.Corpo.BackColor = 5855577
Else
Me.Corpo.BackColor = 5478760
End If
End Sub
Ho messo per ultima la condizione fondamentale, cioè la dismissione ed
ho cambiato la condizione per la scadenza perchè quella di prima mi
avrebbe indicato quelli già scaduti da tre giorni.
In ogni caso ancora non funziona.
Non ho messo nessun codice in Primascad e Secondascad perchè non so su
che evento potrei inserirlo, quindi il codice è solo su current della
maschera e....non va....

T_A_O ha scritto:

Eccomi ancora qui...spero che qualcuno ancora mi legga...
Ho provato ad adattare il SelectCase che mi ha suggerito SC in questo
modo
Private Sub Form_Current()
Dim intA As Integer
If (Not IsNull(Me.Data_uscita)) Then intA 1
If (Not IsNull(Me.Data_spedizione)) Then intA 2
If (Me.PrimaScad <= Date + 3) Then intA 3
If (Me.SecondaScad <= Date + 3) Then intA 4
SelectCase intA
Case1
Me.Corpo.BackColor = 5855577
Else
Me.Corpo.BackColor = 5478760
Case2
Me.Corpo.BackColor = 5855577
Else
Me.Corpo.BackColor = 5478760
Case3
Me.Corpo.BackColor = 33023
Else
Me.Corpo.BackColor = 5478760
Case4
Me.Corpo.BackColor = 255
Else
Me.Corpo.BackColor = 5478760
End Select
End Sub
Sul terzo rigo, evidenziando intA mi dice "Errore di compilazione,
prevista Sub, Function o Property"
Siate clementi......

 SelectCase intA





Effettivamente manca il segno = (uguale).. (ero sicuro di averlo inserito).
Essendo intA un integer abbiamo:
 Dim intA As Integer
 If (Not IsNull(Me.Data_uscita)) Then intA = 1
 If (Not IsNull(Me.Data_spedizione)) Then intA = 2
 If (Me.PrimaScad <= Date + 3) Then intA = 3
 If (Me.SecondaScad <= Date + 3) Then intA = 4
.
.
.


sv ha scritto:

Ehm.....Su "SelectCase intA", settimo rigo, mi da sub o function non
definita....ci sto perdendo la salute... ma un giorno diventerò
bravissimo e non vi scoccerò più (sembra vero eh... :)

 bravissimo e non vi scoccerň piů (sembra vero eh... :)
Vedi che deve essere Case (spazio) 1 e non Case1...


 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it
Fatto, ho separato anche Select Case che infatti ora non ringhia
più....in compenso ora mi dice blocco else senza if...
Se ogni tanto mi facessi i fatti miei invece di farmi venire queste
idee così creative.....
Porta pazienza ancora un pò SC, non mi mollare...

 Porta pazienza ancora un pň SC, non mi mollare...
Sarebbe stata una cosa giusta vedere un po' nell'Help :-))
Allora scrivi il tutto cosě:
 Private Sub Form_Current()
 Dim intA As Integer
 If (Not IsNull(Me.Data_uscita)) Then intA 1
 If (Not IsNull(Me.Data_spedizione)) Then intA 2
 If (Me.PrimaScad <= Date + 3) Then intA 3
 If (Me.SecondaScad <= Date + 3) Then intA 4
 Select Case intA
 Case 1
 Me.Corpo.BackColor = 5855577
 Case 2
 Me.Corpo.BackColor = 5855577
 Case 3
 Me.Corpo.BackColor = 33023
 Case 4
 Me.Corpo.BackColor = 255
 Case Else
 Me.Corpo.BackColor = 5478760> 
 End Select
 End Sub
--


 Allora scrivi il tutto così:

Lo stavo facendo adesso, non avevo mai saputo che selezionando
l'istruzione con l'F1 ti forniva le spiegazioni...ho sempre solo usato
l'help facendo le ricerche.
Ora mi rimetto al lavoro, grazie mille (anche 2000...)

T_A_O ha scritto:

Allora, funziona tutto correttamente ora ma.....non era ciò che
volevo.
Praticamente così ho quasi tutti i record arancioni o rossi, anche
quelli scaduti da tempo immemore....
Proverò a cercare di risolvere da solo, ormai è una questione di
puntiglio...
Se la tua pazienza non si fosse esaurita ed avessi ancora voglia di
aiutarmi provo a riepilogarti il mio problema.
Se data_uscita è compilato (not null) maschera grigia
Se data-Spedizione è compilato maschera grigia
in subordine (cioè se ne data uscita ne data spedizione sono
compilati) e prima scadenza o seconda scadenza avverranno da quì a tre
giorni maschera rispettivamente arancio o rossa.
Grazie ancora.

 Grazie ancora.
Ma queste sono proprio le condizioni che devi considerare a monte. Da
quello che capisco hai quattro controlli e su i valori che prendono devi
impostare le varie If.
If controllo1>0 And... Or...    Then intA=1
If controllo2<0 And... Or...    Then intA=2
.
.
.
Se nessuna condizione č soddisfatta allora
Case Else
.
.
End Select


 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it
eccomi ritornato...TAO mandami questo db che te lo metto a posto io :)

 > > giorni, maschera rispettivamente arancio o rossa.
Aggiungo: in tutti gli altri casi maschera verde.
Prima e seconda scad sono campi che si autocompilano dopo aggiornamento
di un campo data di ricevimento  con DateAdd rispettivamente a 60 e 90
gg.
Sono tutte caselle di testo e, non so se possa essere rilevante, lavoro
in access 2003
Un saluto.

T_A_O ha scritto:

Credo che il problema stia nel fatto che, mentre per datauscita e
datasped., che sono caselle dove posso mettere sull evento after update
la condizione di cambio colore in quanto vi è simultaneità tra il
loro aggiornamento ed il cambio colore della maschera in grigio, oltre
che sul current della maschera, in prima e seconda scad, i cui valori
vengono aggiornati all'atto dell'inserimento del record per poi
rimanere invariati fino alla scadenza, non trovo nessun evento dove
potrei inserire la routine per il cambio colore, ho la routine solo sul
current della maschera quindi, facendo l'esperimento, cancellando tutto
e mettendo solo su current il cambio colore se la data primascad è <=
+3, praticemente mi diventano arancioni quasi tutti i records, anche
quelli che non corrispondono alla condizione impostata.
Credo che la select case sviluppata con l'aiuto di SC vada bene, ma ho
bisogno di mettere una condizione anche su un evento, non saprei quale,
di prima e seconda scad.
Non so se la mia analisi, per quanto possa risultare comprensibile, sia
anche esatta, se abbia focalizzato il problema.
Se è così, qui davvero mi fermo perchè non so proprio come potrei
ovviare al problema, se ci fosse ancora qualcuno disposto a perdere un
pò di tempo per chiarirmi le idee ed indicarmi una strada, mi farà
davvero un grande piacere.
Un saluto a tutti.