Newsgroup: it.comp.lang.visual-basic
Titolo: Esecuzione programmata

Ho fatto un programmino che accumula un lista di file da mandare in 
esecuzione ad un'ora determinata per un tempo determinato.
Questi dati li imposto dal nome del file così:
p...@10.15@10.30.jpg
p...@10.32@10.34.jpg
Ora tutto funziona ma se per esempio interrompo il programma, facciamo 
che siamo le 10:18 e rilancio il programma p...@10.15@10.30.jpg non 
parte più e si deve attendere fino a 10:32.
il codice sarebbe questo:
Private Sub scan()
    'Ciclo il contenuto della listbox e verifico quale presentazione 
si avvicina all'ora corrente
    For a = 0 To MainForm.lstEventi.ListCount - 1
        'Estraggo i due @ (inizio e fine) 
        st1 = Split(MainForm.lstEventi.List(a), "@")
        stInizio = (Mid$(st1(1), 1, 5))
        stFine = (Mid$(st1(2), 1, 5))
 
        stDurataClip = TimeDiff(TimeValue(stInizio), Date, TimeValue
(stFine), Date)
        'st1(1) E' il primo @ cioè ora di inizio 
        'st1(2) E' il secondo @ cioè ora di termine 
        If TimeDiff(TimeValue(stInizio), Date, TimeValue(Time), Date) 
< TimeValue(stDurataClip) Then
            Immagine = MainForm.lstEventi.List(a)
            Call Vedi(Immagine)
        Else
            If Time = TimeValue(stFine) Then
                If onAir = True Then
                    Call Chiudi
                    onAir = False
                End If
            End If
        End If
    Next
End Sub
Sicuramente routine sbagliata !!
Un aiuto ?
Grazie, Alverman

 parte più e si deve attendere fino a 10:32.
....
Forse capisco male il funzionamento, ma intanto non vedo un exit for se vai 
in play.
Da quanto posso vedere "al volo", inizi il ciclo, trovi una clip da mandare, 
chiami la routine Vedi, e poi il ciclo continua, la prossima clip ha un'ora 
di partenza maggiore rispetto al momento attuale, la funzione timediff ti da 
un valore negativo, on air e' true (se lo imposti, come immagino in "Vedi") 
e quindi viene chiamato Chiudi.
Ci ho preso?
Ciao... Maurizio 

> Ci ho preso?
No :)
Ho rivisto un po' il tutto e così va alla grande :D
Private Sub scan()
    'Ciclo il contenuto della listbox e verifico quale presentazione si 
avvicina all'ora corrente
    For a = 0 To MainForm.lstEventi.ListCount - 1
        'Estraggo il range di visualizzazione tra i due @ (inizio e 
fine) nel formato 00.00 (ora punto minuti)
        st1 = Split(MainForm.lstEventi.List(a), "@")
        stInizio = (Mid$(st1(1), 1, 5))
        stFine = (Mid$(st1(2), 1, 5))
        ISec = 0
        FSec = 0
        OSec = 0
 
        'Ora di inizio presentazione in secondi
        ISec = Hour(stInizio) * 3600 + Minute(stInizio) * 60
        'Ora di Fine presentazione in secondi
        FSec = Hour(stFine) * 3600 + Minute(stFine) * 60
        'Ora corrente in secondi
        OSec = Hour(Time) * 3600 + Minute(Time) * 60 + Second(Time)
 
        'Debug.Print MainForm.lstEventi.List(a) & vbCrLf & "stInizio: " 
& TimeValue(stInizio) & " - Inizio: " & ISec & vbCrLf & "stfine: " & 
TimeValue(stFine) & " - Fine: " & FSec & vbCrLf & "Corrente: " & 
TimeValue(stInizio) & " - Corrente: " & OSec & vbCrLf & vbCrLf
        If FSec > OSec And ISec < OSec Then
            If onAir = False Then
                Presentazione = MainForm.lstEventi.List(a)
                Call Vedi(Presentazione)
            End If
        Else
            If ISec > OSec And FSec > OSec Then
                If onAir = True Then
                    onAir = False
                    Call Chiudi
                End If
            End If
        End If
    Next
End Sub
Ciao, Alverman

 Ho rivisto un po' il tutto e cosě va alla grande :D
...
Evvabbe', tu hai stravolto il codice... cosi' non vale!

> Evvabbe', tu hai stravolto il codice... cosi' non vale!
Minchia, Stà cosa mi faceva impazziere !!
Poi confusione dopo confusione l'ho riscritta ragionando ad alta voce :)
Alverman

 Minchia, Stà cosa mi faceva impazziere !!
...
cmq., se posso permettermi, la tua soluzione mi sembra un pochino 
"incasinata".
Io sto lavorando ad un progettino che prevede una playlist, ed ho risolto in 
maniera, credo, piu' semplice, vedi se ti puo' aiutare...
In una listview, metto tutte le cose che covranno andare in play, ordinate 
per ora di inizio.
Quando do il play, inizio dal basso della lista, cioe' da quelle con orario 
piu' alto (per intenderci, da ListView.ListItems.Count,  e tramite un ciclo 
For.. Next, scorro gli orari di inizio delle clip. Appena ne trovo una che 
inizia prima del momento in cui faccio la ricerca, la metto in play ed esco 
dal ciclo.
Chissa' se puo' farti comodo.. un saluto e buon WE
Maurizio

 
Sai questo programma l'ho fatto l'anno scorso, ma aveva qualche problemino.
Questo programma manda in videoproiezione delle peresentazioni PPoint.
I file (che mi consegnano con a parte la data di inizio e data di fine 
proiezione) li rinomino così:
P...@08.50@09.40.pps
P...@09.50@09.55.pps
ecc .....
negli spazi dove non sono previste proiezioni mostra lo sfondo del programma 
che contriene un controllo image a pieno schermo la quale proietta una foto a 
pieno schermo.
Nel programma precedente era presente un'errore (quello che mi faceva sclerare)
Praticamente se interrompevo il programma nel mezzo di una proiezione e lo 
rilanciavo poco dopo si mangiava la presentazione che era in corso in quel 
momento solo perchè non riuscivo a fare il controllo del range dell'ora di 
inizio e fine con l'ora corrente.
Penso, dico penso, che la tua applicazione abbia altre funzionalità, mentre 
questa deve per forza fare un controllo un po' + complesso (ma non di molto :D)
Ciao e buon WE anche a te.
Alverman

 molto :D)
....
Puo' essere.
Il mio viene utilizzato da qualche emittente televisiva per mandare in onda 
il palinsesto.
Ciao e buon lavoro... Maurizio