Newsgroup: it.comp.lang.visual-basic
Titolo: Verificare FontStrikethru: impossibile ?

Vorrei mediante una verifica dello stato del font delle caption di alcune
label stabilire se queste sono state barrate (FontStrikethru = True) come
eseguite, ciň che permette di stabilire, qualora lo siano tutte che la
terapia č finita.
Nella Sub qui sotto c'č qualcosa che non funziona e non capisco cosa, lo
strano č che sembra non essere "riconosciuta" la verifica di
FontStrikethru...
Private Sub DataFineCura()
'verifica se le lbl prestazioni sono tutte barrate: cure finite
Dim Msg, Style, Title, Response
Dim i As Integer, EndCare As Boolean
For i = 0 To 31
If Len(lblPrest(i).Caption) > 1 Then
  'se ne trova una di non  barrata esce senza dare il messaggio
  If lblPrest(i).FontStrikethru = False Then
  Exit Sub
  End If
End If
Next i
Msg = "Le cure risultano terminate, il programma" _
& vbNewLine & "sta impostando " & Date & " come data di" _
& vbNewLine & "fine terapia. Vuoi Confermare?"
Style = vbYesNo + vbQuestion + vbDefaultButton2 ' Definisce i pulsanti.
Title = "CONFERMA FINE TERAPIA"  ' Definisce il titolo.
Response = MsgBox(Msg, Style, Title) ' Visualizza il messaggio.
    If Response = vbYes Then    ' L'utente sceglie il pulsante Sě.
        MaskDataFine.Text = Date
    End If
End If
End Sub
--
Gulp
....forse mi sono perso qualcosa !

Gulp© wrote:
Beh...nessuno ha avuto tempo o voglia di fare una prova con una matrice di
solo cinque label per vedere cosa succede ?


 solo cinque label per vedere cosa succede ?
ho preso l'esempio sul mio sito con 5 label e 5 text e gli ho aggiunto 2
command:
Private Sub Command1_Click()
    Dim j As Integer
    For j = 0 To 5
        Label1(j).FontStrikethru = Not Label1(j).FontStrikethru
    Next
End Sub
Private Sub Command2_Click()
    Dim j As Integer, s As String
    For j = 0 To 5
        If Label1(j).FontStrikethru Then s = s & "1"
    Next
    MsgBox s
End Sub
se le etichette sono barrate, questo e' il msgbox (preso con ctrl-c):
---------------------------
ctrl_appear
---------------------------
111111
---------------------------
OK
---------------------------
quindi la proprieta' viene letta.
guardiamo il tuo codice:
Private Sub DataFineCura()
'verifica se le lbl prestazioni sono tutte barrate: cure finite
    Dim Msg, Style, Title, Response
    Dim i As Integer, EndCare As Boolean
'-- a cosa serve endcare ?
    For i = 0 To 31
    If Len(lblPrest(i).Caption) > 1 Then
'-- occhio che se una e' lunga un solo carattere qui non passa.
'-- volevi fare if lblprest(i)<>"" ?
  'se ne trova una di non  barrata esce senza dare il messaggio
          If lblPrest(i).FontStrikethru = False Then
              Exit Sub
          End If
        End If
    Next i
    Msg = "Le cure risultano terminate, il programma" _
        & vbNewLine & "sta impostando " & Date & " come data di" _
        & vbNewLine & "fine terapia. Vuoi Confermare?"
    Style = vbYesNo + vbQuestion + vbDefaultButton2 ' Definisce i pulsanti.
    Title = "CONFERMA FINE TERAPIA"  ' Definisce il titolo.
    Response = MsgBox(Msg, Style, Title) ' Visualizza il messaggio.
    If Response = vbYes Then    ' L'utente sceglie il pulsante Sě.
        MaskDataFine.Text = Date
    End If
End If '<------------- endif di che if ?
End Sub
proviamo a semplificare:
Private Sub DataFineCura()
    Dim i As Integer
    For i = 0 To 31
        If lblPrest(i)<>"" Then
            If lblPrest(i).FontStrikethru = False Then
                msgbox "l'etichetta # " & i & " non e' barrata"
                Exit Sub
            endif
        endif
    Next
    if msgbox( "Le cure risultano terminate, imposto" & Date & _
        vbnewline " come data di fine terapia ?", vbyesno) <> vbyes then
exit sub
    MaskDataFine.Text = Date
End Sub
cosi' la conferma dovrebbe venire chiesta anche se ci sono etichette vuote
ma quelle piene sono tutte barrate. se devono essere tutte compilate e
barrate puoi mettere i due if in or, o denidificare il secondo if:
    For i = 0 To 31
        If lblPrest(i)<>"" Then
            msgbox "l'etichetta # " & i & " e' vuota"
            Exit Sub
        endif
        If lblPrest(i).FontStrikethru = False Then
            msgbox "l'etichetta # " & i & " non e' barrata"
            Exit Sub
        endif
    Next
-- 
hth, ciao, j.
http://www.sundaysw.com

javalab wrote:
Ti ringrazio moltissimo per la tua disponibilità
Ciao
Egidio


javalab wrote:
Ho trovato il motivo del non funzionamento della Sub...infatti nel mio
listato nemmeno la tua funzionava.
Per comodità con un doppio clic sulla label determino il passaggio a
FontStrikethru
Private Sub lblPrest_DblClick(Index As Integer)
'Conferisce le caratteristiche di 'eseguito'
    Select Case
        ...fa alcune cose tra cui convertire il font in FontStrikethru
    End select
DataFineCura    <---- chiamata alla sub oggetto di studio
End Sub
La tua Sub in realtà funziona benissimo se chiamata tramite un
CommandButton, ma non funziona se
chiamata dalla sub che ti ho citato più su.
Forse occorre attendere una sorta di "validazione" ?
Da cosa può dipendere ?
Grazie


 Da cosa può dipendere ?
con una select subito sopra, la prima domanda che mi viene e':
sei sicuro che a datafinecura ci arriva ?
prova a metterci un flag, tipo
caption="siamo in datafinecura"
e vedi un po' se ci arriva.
poi nel caso continuiamo l'analisi :)
ciao, j,
scusa solo se non riesco a risponderti subito, sono molto sotto pressione e
se connetto ho tempo la sera.

Oooopsss devo iniziare facendoti le mie scuse !
Si dice : "Chi non ha testa ha gambe" .... che per la programmazione si
potrebbe tradurre:
"Chi non sta attento perde tempo" e potrebbe anche andar bene, se lo perde
solo lui e non lo fa perdere ad altri.
Ancora scusa.
Nella Sub che ti ho postato dicendoti:
...
"che non mi sembra avere nulla di strano....ma non si sa mai,magari un altro
occhio...:"
accidenti se c'è qualcosa di strano in quella Sub !!!!   :-(
Quelle "tremende"    Exit sub     nei vari Case !!!!
Per cui VALIDISSIME  le tue parole: "sei sicuro che raggiunga la chiamata
alla Sub?"
Ciao e Grazie.


 e vedi un po' se ci arriva.
Ho constatato che ci arriva.... e la cosa è ancor più strana.
Mi spiego meglio. Ho fatto così:
Private Sub DataFineCura()
    Dim i As Integer
    Text1 = "siamo in datafinecura" <------ !
for i = 0 to 31
..... parte di sub che conosci
End sub
Se ho ad es. quattro o cinque lbl "barrate" e due no, doppio clic su una e
poi sull'altra, entrambe si portano a "barrato" ma sembra non eseguire la
Sub (infatti Text1="")
Se però "torno indietro" (ho previsto sempre con doppio clic di poter
annullare la cura "eseguita"=barrata per tornare a "da eseguire"=non
barrata)
Ecco che torna ad eseguire la sub (Text1="siamo a fine cura")
Ossia il "messaggio che sembra passare è:
tutte le lbl sono FontStrikethru = True  ? non eseguo la Sub
almeno una lbl è FontStrikethru = False ? eseguo la Sub
il che, sarai d'accordo con me, è assurdo e non può essere vero !
E non capisco cosa mi stia sfuggendo.
Ti incollo qui sotto la sub lblPrest_DblClick
che non mi sembra avere nulla di strano....ma non si sa mai,magari un altro
occhio...:
Private Sub lblPrest_DblClick(Index As Integer)
Dim i As Integer
'Conferisce le caratteristiche di 'eseguito'
Select Case lblPrest(Index).ForeColor
    Case &H80&   ' Se ROSSO SCURO(->cura in corso)
        lblPrest(Index).FontUnderline = False
        lblPrest(Index).FontStrikethru = True     'Font barrato e viola
        lblPrest(Index).ForeColor = &HC000C0
        WriteCure
        Exit Sub
    Case &HFF&   ' Se ROSSO VIVO (cura da eseguire)
        If lblPrest(Index).caption = "CC" Then
           lblPrest(Index).FontUnderline = True
           lblPrest(Index).ForeColor = &H80&       'si ha: sottolineato e
rosso scuro
          WriteCure                                        'Sub di
salvataggio dati
        Else                                                    'Altrimenti:
fine cura cioè per
          lblPrest(Index).FontStrikethru = True   'tutte le altre
prestazioni si ha:
          lblPrest(Index).ForeColor = &HC000C0    'Font barrato e viola
        If lblPrest(Index).caption = "AVL" Then
            imgDente(Index).Picture = LoadPicture("")
           WriteDenStatus
        End If
           WriteCure                                    'Sub di salvataggio
dati
            Exit Sub
        End If
    Case &HC000C0 ' Se VIOLA   (cura eseguita)  'Resetta la situazione
        lblPrest(Index).FontStrikethru = False  'Font NON barrato
        lblPrest(Index).ForeColor = &HFF&       'Font rosso vivo (da
eseguire)
        WriteCure
End Select
DataFineCura
End Sub
P.S. A proposito....complimenti per la tua capacità di rendere più breve e
razionale il codice
proprio qui sta la differenza tra chi è "abituato" a programmare e chi, come
me, alla programmazione, non ostante la passione, ci gravita un po' attorno.
E' grazie al NG e tutte le persone più disponibili che sono riuscito a
migliorare....in questo momento, mentre sto scrivendo il ricordo va al
"nostro" Lupo ....
