Newsgroup: it.comp.appl.access
Titolo: indicatore consumo su sottomaschera (larghezza casella di testo)

in una sottomaschera ho tre campi attinti direttamente da una query:
 
- Disponibile
- Consumato
- Avanzam (il rapporto consumato/disponibile).
 
Ho una casella di testo "label1"
All'interno di label1 e allineata a sinistra ho una seconda casella di testo "label5" la cui larghezza vorrei modificare in base all'[avanzam], in pratica una barra che mi indichi quanto già eroso del disponibile.
 
Sull'evento dopo aggiornamento del campo Avanzam della sottomaschera ho scopiazzato questo codice:
 
Private Sub avanzam_AfterUpdate()
 
'visualizza e valorizza la label della percentuale
Dim rapporto As String
Me.Label1.Width = 660
rapporto = Me.avanzam
'If Me.avanzam = 0 Or Me.avanzam = "" Then Me.rapporto = 1
'Me.label5.Width = (660 * rapporto)
Me.Label1.Visible = True
Me.label5.Visible = True
Me.avanzam.Visible = True
 
End Sub
 
Ovviamente, per chi ne capisce, non funziona....
Per me, oltre a non funzionare, mi inquieta perchè non ne capisco, causa la mia ignoranza, il motivo.
 
grazie infinite a tutti...


A occhio e' solo un problema di quale controllo e' in primo piano
Metti label5 in primo piano
..... e, le due label devono essere di colore diverso
-- 
 
ac (x=y-1) e non uso il KillFile.
La violenza e' l'ultimo rifugio degli incapaci (Salvor Hardin)


P.S,
Perche' ci sono le due istruzioni /annotate/ ?
Sempre a occhio sono quelle che fanno funzionare la cosa


ho riprovato cosi: 
 
Private Sub avanzam_AfterUpdate()
 
'valorizza e visualizza la label della percentuale
Dim rapporto As Strin
Me.Label1.Visible = True
Me.avanzam.Visible = True
Me.Label1.Width = 66
rapporto = Me.avanzam
'If Me.avanzam = 0 Or Me.avanzam = "" Then Me.rapporto = 1
Me.label5.Width = (66 * rapporto)
Me.label5.Visible = True
End Sub
 
ma nulla da fare, le label sono di colore diverso....ma la label5 non si ridimensiona mai..
 
Ovviamente se qualcuno, sulla scorta della sua esperienza, avesse qualche suggerimento o alternativa ben venga.

ho aggiunto un MsgBox ("ciao") al codice sugli eventi:
- dopo aggiornamento della sottomaschera
- alla variazione della casella di testo disponibile
- alla modifica di avanzam
 
ma la sottomaschera, oltre a non aggiornare la larghezza di label5, non mi da alcun msgbox. E' un problema di sottomaschera ?
 
Continuo a capirne sempre meno, chiedo umilmente lumi....


Da quanto dici sembra che l'evento non viene innescato.
Normalmente questa roba si usa quando si e' in loop in una routine di 
lunga durata o richiamata via timer.
Che io mi ricordi, inoltre, i valori di Width sono in twips e 66 sara' 
roba di millimetri (grossomodo pixel) metti almeno un valore di 1000
Chi modifica avanzam ?
E soprattutto cosa contiene avanzam(deve contenere un valore compreso 
fra 0 e 1)?
 
 
Questa semplice routine, dati i due controlli visibili /deve/ funzionare
 
Sub event_routine()
Dim rapporto as single
Rapporto = valore compreso fra 0 e 1
Me.Label5.width = Me.Label1.width * rapporto
doevents
End sub
 
 
P.S. Impara ad usare il debug. Con il suo uso non serve mettere msgbox 
di segnalazione e si puo' seguire l'esecuzione del codice passo-passo


 roba di millimetri (grossomodo pixel) metti almeno un valore di 1000
 
Anzi. Disegna le due labels e usa direttamente il valore di width della 
label di cui /non/ devi modificare la ampiezza e da quella calcoli l'altra
i.e.
Me.Label5.width = Me.Label1.width * rapporto
 
 


grazie Alessandro.
ho provato a modificare ma senza alcun esito. La label1 ha larghezza pari a 12 cm. e il codice è questo:
 
Private Sub Form_AfterUpdate()
 
'valorizza e visualizza la label della percentuale
Dim rapporto As String
Me.Label1.Visible = True
Me.avanzam.Visible = True
Me.Label1.Width = 6600
rapporto = Me.avanzam
'If Me.avanzam = 0 Or Me.avanzam = "" Then Me.rapporto = 1
MsgBox ("ciao")
Me.label5.Width = Me.Label1.Width * rapporto
Me.label5.Visible = True
DoCmd.Requery
 
End Sub
 
Quello che non mi convince e che mi fa inc.. è questo:
 
la mia sottomaschera attinge da una query :
- Disponibile
- Consumato
- Avanzam (il rapporto consumato/disponibile).
 
Se io visualizzo da struttura la sola sottomaschera vedo 162 record che regolarmente mi visualizzano i valori dei succitati tre campi.
Non capisco nemmeno il perchè, ma forse la chiave stà proprio li, nel passare da un record all'altro, oltre a non dimensionarmi la label5, non mi mostri la textbox "ciao" ovvero che da codice non riesco a far acquisire alcun comando alla sottomaschera.
grazie mille.

P.S. Impara ad usare il debug. Con il suo uso non serve mettere msgbox 
di segnalazione e si puo' seguire l'esecuzione del codice passo-passo 
 
giuro che ci ho provato ma non riesco, dopo aver messo il punto di interruzione a capire cosa fare per vedere se la variabile rapporto varia o rimane invariata.
 
grazie ciao


Se metti il punto di interruzione e in fase di esecuzione non si ferma 
vuol dire che quell'evento non viene innescato (non passa da quel 
codice) e da quanto mi racconti e' facile che sia cosi'
Metti il codice sull'evento di /current/  (su corrente) di form (o 
subfom che dir si voglia)


confermo il funzionamento utilizzando l'istruzione su corrente.
Adesso risolvo il problema di qualche dato vuoto che non mi consente il rapporto.
Visto che l'appetito vien mangiando ora vorrei fare questo. Ci provo e se non riesco (sicuramente) torno a postare se avete voglia e tempo di darmi una mano.
 
Vorrei fare una barra verde da 0 a 90%, una gialla da 90 a 100% e una rossa oltre il 100%.
Queste barre ovviamente vengono dimensionate in base al valore ad esempio per il 96 % avrò la barra verde totalmente accesa e il 6/10 di gialla.
 
Posso continuare a stressarVi ?
grazie a tutti.
 

Sono riuscito a confezionare un lavoro abbastanza discreto e ringrazio tutti i miei "suggeritori" per i sempre preziosissimi consigli.
Nello spirito del forum, presumo sia gradito lasciare a memoria, e a disposizione di altri ne ravvisassero la necessità il codice che ho utilizzato.
 
Label1 è il "contenitore 100%" delle tre barre: label 5 (90 verde) label6 (90/100 giallo) label7 (rosso oltre 100).
Il top serebbe riuscire a inserire una specie di barra/etichetta con alcune gradazioni che renndano l'idea del consumo ma non voglio inserire gif o altro....
Se qualcuno avesse idee in merito sono ovviamente ben gradite.
saluti a tutti.
 
Private Sub Form_Current()
'valorizza e visualizza la label della percentuale
Dim rapporto As String
'NASCONDE LE BARRE AVANZAMENTO
Me.label5.Visible = False
Me.label6.Visible = False
Me.label7.Visible = False
Me.avanzam.Visible = True
Me.Label1.Width = 6325
rapporto = Me.avanzam
 
Select Case avanzam
 
Case 0 To 90
 
Me.label5.Visible = True
Me.label5.Width = (5625 * avanzam) / 90
Me.label6.Visible = False
Me.label7.Visible = False
 
Case 90 To 100
Me.label5.Visible = True
Me.label5.Width = 5625
Me.label6.Visible = True
Me.label6.Width = 625 * (avanzam - 90) / 10
Me.label7.Visible = False
 
Case Is > 100
Me.label5.Visible = True
Me.label5.Width = 5625
Me.label6.Visible = True
Me.label6.Width = 625
Me.label7.Visible = True
Me.label7.Width = 625 * (avanzam - 100) / 10
 
End Select
End Sub

prova anche cosi
 
Private Sub Consumato_AfterUpdate()
Call hhhh
End Sub
 
Private Sub Disponibile_AfterUpdate()
Call hhhh
End Sub
 
Private Sub hhhh()
 
If Nz(Me.Disponibile.Value, "") = "" Or Me.Disponibile.Value = 0 Then GoTo Annulla
 
Dim LB As Integer
LB = 660  ' La Lunghezza base delle 2 etichetta
 
Dim Rapp As Double
Rapp = Nz(Me.Consumato.Value, 0) / Me.Disponibile.Value
 
Me.label1.Width = LB
Me.label5.Width = (LB * Rapp)
Me.label1.Visible = True
Me.label5.Visible = True
 
Exit Sub
 
Annulla:
Me.label1.Visible = False
Me.label5.Visible = False
 
End Sub