Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2000
    residenza
    Milano
    Messaggi
    188

    [VB6] Pausa di secondi in un loop

    Buongiorno...
    ho dovuto rimettere mano ad un mio stesso programma (meno male ho ritrovato il sorgente!) che scrissi nel 1999 in VB.

    Da allora non ho più toccato il VB6 (anche allora non ero un maestro) e pensavo che ora mi bastavano 10 minuti per fare questa minima modifica... invece sono 2 ore che fra siti internet che spiegano l'oggetto TIMER e non ci capisco una mazza!

    So che è una banalità, ma...
    devo semplicemente introdurre un ritardo in secondi all'interno di un loop.
    Questo loop non fa altro che inviare un sms ad un modem gsm (porta com1 via MSComm) a vari indirizzi che legge (con un loop) da un file di testo.
    Se pero' non gli do' una pausa in secondi fra un invio ed un altro si impippa...
    Allora ho messo il timer e mi fa tutto.. meno che la pausa!

    ecco il codice come l'avrei scritto io:

    codice:
    Do Until EOF(NumeroFile)
      Line Input #NumeroFile, NumeroTelefonoLetto
      ' Invio SMS
      'MSComm1.Output = "AT+CMGS=" & NumeroTelefonoLetto & Chr$(13)
      Timer1.Enabled = True
    Loop
    Poi nella sub del timer un semplice comando:
    codice:
    Timer1.Interval = 10000
    Timer1.Enabled = False
    pero' di fatto manda alla com1 tutta le stringhe di fila, senza attendere i 10 secondi.
    ove sbaglio?


    grazie a tutti...

  2. #2
    Utente di HTML.it L'avatar di Gugu
    Registrato dal
    Nov 2002
    Messaggi
    523
    Beh..
    non è certo così che si gestisce un timer.
    Considera che scritto così, non sa nemmeno cosa deve fare dopo quel tempo!

    Alla fine in effetti è semplice.
    Il codice che hai scritto tu va inserito dentro il timer.

    Devi avere una variabile per gestire il numero di righe e non usare un loop con il "do until".
    Nel timer1 imposti le proprietà enabled=false e interval=10000 già nell'oggetto.
    Se fossi in te leggerei tutti i numeri dal file di testo e li metterei in un array di stringhe.
    quindi in un module ad esempio dichiari:
    codice:
    Public NumTel() as string
    Public NumeroAttuale as integer
    Poi nel timer:
    codice:
      ' Invio SMS
      'MSComm1.Output = "AT+CMGS=" & NumTel(NumeroAttuale) & Chr$(13)
    if NumeroAttuale = NumTel.count then
      timer1.enable=false
    else
       NumeroAttuale=NumeroAttuale+1
    end if
    Questo "loop" dovrai lanciarlo in un pulsante, ad esempio scrivendo semplicemente:
    codice:
    'Codice per leggere dal file e popolare l'array NumTel()
    timer1.enabled=true
    Il timer gestisce il listato che inserisci al suo interno se la proprietà enabled=true, ogni intervallo di tempo definito della proprietà "interval".

    Spero di essere stato chiaro..
    Ciao
    Andrea

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2000
    residenza
    Milano
    Messaggi
    188
    Sei un grande!

    In effetti, ora che me lo dici, praticamente pensavo che la sub fosse come una function, cioe' io richiamo lei ed il programma 'si sposta' di la', aspetta i 10 sec e torna indietro...

    La tua soluzione di mettermi nel timer ora la provo, il concetto è che avendo perso dimestichezza con VB volevo toccare il meno possibile il programma.

    (Il programma andava fino ad una settimana fa senza questa necessità di PAUSARE l'invio su comm, poi avendo cambiato il modem gsm con uno che NON gesisce le code è sorto questo problema).

    Grazie di tutto, se non mi senti più vuol dire che va bene e ti devo una bizza con birra!

  4. #4
    Utente di HTML.it
    Registrato dal
    Sep 2000
    residenza
    Milano
    Messaggi
    188
    No, in effetti non ci siamo, mi incasino troppo la vita.

    Sinceramente, non c'e' proprio un modo per ritardare quel loop con una sola riga?

    Che ne so... chiamando una funzione che non fa altro che aspettare...
    Insomma obbligare il programma ad fermarsi per 10 secondi !

  5. #5
    Utente di HTML.it L'avatar di Gugu
    Registrato dal
    Nov 2002
    Messaggi
    523
    Che ne dici di questa?

    codice:
    Declare Sub Sleep Lib "Kernel32.dll" (ByVal dwMilliseconds As Long)
    E nella sub:

    codice:
    Do Until EOF(NumeroFile)
      Line Input #NumeroFile, NumeroTelefonoLetto
      ' Invio SMS
      'MSComm1.Output = "AT+CMGS=" & NumeroTelefonoLetto & Chr$(13)
      Sleep(1000) 'Per un secondo
    Loop
    Scusa, ti ho proposto prima quella col timer perchè avevi intrapreso quella strada tu.. poi questa al momento non la ricordavo.
    Sono andato a prelevarla da una mia vecchia applicazione.

    Posso farti una domanda?
    Per inviare gli sms.. che numero di centro messaggi usi?
    Paghi vero per inviarli?
    Io avevo un applicazione che li inviava.. con la tim.
    Ma ora è tutto a pagamento..
    Me lo confermi? (così ti sdebiti e non mi devi pagare la pizza+birra.. :gren: )
    Ciao ciao
    Andrea

  6. #6
    Utente di HTML.it
    Registrato dal
    Sep 2000
    residenza
    Milano
    Messaggi
    188
    Grazie... pero'... una cosina ancora...
    in esecuzione si ferma sulla DECLARE con questo errore:
    "Compile errore: Only comments may appear after End Sub, End Function, End Propriety"



    Gli SMS li spedisco semplicemente con un modem GSM-SMS, nello specifico con un Digicom, pertanto inserisco una normalissima scheda SIM Omnitel (con un credito a scalare) e faccio il centro servizi di questo provider (+39 3492000200).

    Decisamente l'epoca d'oro di internet dove tutto era gratis è finita e (che io sappia) ora proprio nessuno ti fa spedire sms gratis, neppure "pubblicitariati".

    Il software non fa altro che inviare degli SMS di alert al verificarsi di certi eventi e viene eseguito da un software che controlla lo stato della rete (HP Openview).

  7. #7
    Utente di HTML.it L'avatar di Gugu
    Registrato dal
    Nov 2002
    Messaggi
    523
    Attento!
    Il declare.. ecc.. non lo devi mettere dentro alla sub del pulsante o alla form_load.

    dev'essere una cosa del genere:
    codice:
    Option Explicit
    Declare Sub Sleep Lib "Kernel32.dll" (ByVal dwMilliseconds As Long)
    
    Private Sub Command1_Click()
    'tuo listato..
    end sub
    Il declare va appunto fuori da ogni sub, nel "generale".
    Al limite prova con private declare.. anche se a me funzia senza.
    Se dichiari il declare in un module e il codice nel pulsante di una form, metti public declare.. ecc..

    Ciao
    Immaginavo che pagavi per l'invio di sms.. in tal caso so già come fare..
    Grazie

    ciao
    Andrea

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.