none
ultimare programma chiusura ritardata e messaggio vocale RRS feed

  • Domanda

  • Vi chiedo per cortesia un aiuto in quanto vorrei poter terminare un programma ma avendo iniziato da poco non ho le competenze per poterlo finire , ho provato a visualizzare moltissimi video ed ho cercato pagine nella rete ma non ho mai trovato la soluzione, vi ringrazio per l'aiuto.

    ho creato un terzo bottone attraverso il quale voglio chiudere il programma ma soltanto dopo aver trasmesso un messaggio vocale . pensavo di utilzzare un timer che  parta nel momento in cui si preme il Button3_Click .  oppure effettuare un controllo sul Button3_click  se viene premuto dopo qualche secondo chiude il programma dopo aver trasmesso un messaggio vocale.  

    il secondo problema è che ho creato un generatore di numeri casuali che dovro' milgiorare ma per adesso lavoro su questo ,  genera tre numeri da 0 a 22 ,  a seconda del numero viene visualizzata una immagine.  benissimo.   il problema è che adesso vorrei far partire un messaggio vocale a seconda dei numeri che escono.  ma essendo tre numeri ho la necessita' che il messaggio sia suddiviso in tre parti.  quindi pensavo sempre ad un timer collegato al Button1_click  che è quello che genera sia i numeri e contiene anche il codice per mostrare le immagini collegate ai tre numeri usciti ( in sostanza vengono generati i tre numeri ---> le tre immagini che corrispondono ai tre numeri generati casualmente vengono mostrate mediante PictureBox.ImageLocation---> manca che venga trasmesso un messaggio con file preregistrato .wav che dica  l'immagine 1 corrisponde ecc ecc..  l'immagine due corrisponde a ecc...  l'immagine tre corrisponde a ecc ecc... 

    vi ringrazio molto non riesco ad andare avanti da ore.  


    domenica 9 agosto 2020 04:55

Risposte

  • Quando scrivi

    SourceFile = "B:\xxxxxxxx\file1.txt"
            Dim concat = "B:\xxxxxx\file2.txt"
            Dim concat2 = "B:\xxxxxxxxxx\file3.txt"
            Dim concat3 = SourceFile & concat & concat2


    a parte il fatto che sarebbe sempre preferibile dim concat as string = "x" mettendo as string

    ottieni che concat3 sarà uguale a

            

    "B:\xxxxxxxx\file1.txtB:\xxxxxx\file2.txtB:\xxxxxxxxxx\file3.txt"

    questo è quello che hai scritto

    devi invece aprire i singoli file e copiarne uno alla volta il contenuto nel file B:\xxxxxxxx.txt

    così imparerai anche a leggere e scrivere con i file di testo, cosa che ti aiuterà innumerevoli volte nella tua attività di programmazione

    giovedì 13 agosto 2020 07:00
  • L'informazione necessaria e' fornita al cliente.

    • Microsoft offre questo servizio gratuitamente, per aiutare gli utenti e aumentare il database dei prodotti e delle tecnologie. Il contenuto fornito “as is“ non comporta alcuna responsabilità da parte dell’azienda.

    lunedì 31 agosto 2020 09:14
    Moderatore

Tutte le risposte

  • per il primo problema prova così

            My.Computer.Audio.Stop()
            My.Computer.Audio.Play("C:\Windows\media\Alarm02.wav", AudioPlayMode.WaitToComplete)
            Me.Close()
    per il resto mostra il codice che hai scritto

    • Modificato patel45 domenica 9 agosto 2020 07:41
    domenica 9 agosto 2020 07:39
  • Ti ringrazio moltissimo per avermi dedicato del tempo.
    sapete benissimo che per il neofita il  codice è come l'arabo per chi non è dei paesi arabi 
    sulla base di quello che mi hai scritto sono andato poi a tentativi e non so proprio come ci sono riuscito ma ci sono riuscito.  
    in particolare per quanto riguarda il timer collegato alla chiusura dopo aver riprodotto il file audio.

    (resta da collegare a button1 dopo che ha generato  le tre immagini   collegare per ogni immagine un file audio che indichi il senso di quelle immagini , pero' i tre file audio non devono partire assieme ovviamente.)

    per chi avesse necessita' di  fare cose simili 

    Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
            My.Computer.Audio.Play("C:\xx\xx\xx\x\x\x.wav")
            If Button3.Enabled = True Then Timer1.Start()
    end sub
    
    'poi ho inserito questo codice in timer1
    
    
    Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
            If Timer1.Enabled = True Then Me.Close()
        End Sub
    
    'avendo l'accortezza di impostare timer1 lato progettazione 'su Enabled FALSE   nelle sue proprieta'
    
    
    




    • Modificato lucaravera domenica 9 agosto 2020 10:32
    domenica 9 agosto 2020 10:28
  • Hai provato ad usare il codice che ti ho dato senza timer ?
    domenica 9 agosto 2020 16:28
  • eccomi , grazie .

    ho provato ad utlizzarlo per finire l'altra parte del programma ma non ha funzionato ed è successo perchè non vi ho spiegato bene la struttura del programma , rimedio ..grazie

    Devo fare in modo per ogni numero gnerato ramdom quando premo button1 accoppiare ad ogni numero un messaggio 'audio

    per esempio se uscissero  3  6  9  uno per ciascuna textbox  il programma da una spiegazione , esempio "il numero 6 corrisponde a xxx"  "il numero 3 corrisponde axx"  ecc
    tenendo conto che ogni textbox corrisponde a una 'picturebox che genera una immagine , e lavorano separatamente, i tre messaggi vocali quindi non devono 'sovrapporsi.


    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
            Dim MyValue As Integer
            Dim MyValue2 As Integer
            Dim MyValue3 As Integer
    'genera numeri random
    Randomize()
            MyValue = Int((xx * Rnd()) + 1)
            MyValue2 = Int((xx * Rnd()) + 2)
            MyValue3 = Int((xx * Rnd()) + 3)
    'restituisce valore nella textbox
    TextBox1.Text = MyValue
            TextBox1.Text = MyValue
            TextBox2.Text = MyValue2
            TextBox3.Text = MyValue3
    'ho aggiunto 3 picturebox nelle quali viene mostrata una 'immagine a seconda del numero generato random
    
    If MyValue = 1 Then
                PictureBox1.ImageLocation = "C:\xxxxxx.jpg"
    If MyValue2 = 2 Then
                PictureBox2.ImageLocation = "C:\xxxxxx.jpg"
    If MyValue3 =3 Then
                PictureBox3.ImageLocation = "C:\xxxxxx.jpg"
    



    • Modificato lucaravera lunedì 10 agosto 2020 18:21
    lunedì 10 agosto 2020 18:19
  • patel45 grazie ho modificato soltanto qualcosina 

    ho trovato qualcosa che sembra funzionare , pero' diventa un lavoro molto faticoso perchè dovro' scrivere molto codice .  inoltre è strettamente legato all'esatto calcolo dei tempi (timer) fra un messaggio e l'altro , pero' funziona.

    nel codice che riguarda  button1  inserisco questo  per attivare il timer 

    If Button1.Enabled = True Then Timer2.Start()
            If Button1.Enabled = True Then Timer3.Start()

    If Button1.Enabled = True Then Timer4.Start()

    -------------------------------------------------------

    riporto soltanto una riga di tutto il codice che serve a me per far funzionare tutto .

    successivamente scrivo questo codice nella parte che riguarda il timer , questo va fatto sia per timer2 timer3 timer4 e per ogni numero che mi interessa .

     Private Sub Timer2_Tick(sender As Object, e As EventArgs) Handles Timer2.Tick
            ' If Timer2.Enabled = True Then
            If PictureBox1.ImageLocation = "C:\xxx\xxx\xxx.jpg" Then
                My.Computer.Audio.Stop()
                My.Computer.Audio.Play("C:\xxx\xxx.wav")
                Timer2.Stop()
            End If

    --------------------------------------------------------------------

          

    lunedì 10 agosto 2020 21:09
  •         If PictureBox1.ImageLocation = "C:\xxx\xxx\xxx.jpg" Then             My.Computer.Audio.Stop()             My.Computer.Audio.Play("C:\xxx\xxx.wav")             Timer2.Stop()         End If

    A parte il fatto che potresti usare il waittocomplete, fai attenzione alla porzione sopra riportata.

    Usi un if pictureboxK.Imagelocation = pathimmagine per selezionare il file audio.

    Ma il pathimmagine lo conosci già, visto che l'immagine nel pictureboxK la hai messa tu in base al risultato dell'estrazione.

    Inizia quindi a semplificare questo aspetto. Si può fare in modo ancora più compatto ma per ora considera il primo numero che chiami MyValue e la prima picturebox sarà la picturebox1.

    decidiamo di chiamare i file con le immagini immagine0.jpg, immagine1.jpg, immagine2.jpg, ..., e così via fino ad immagine22.jpg ed i file con gli audio suono0.wav, ..... , suono22.wav e questi file li mettiamo in C:\DOVE\

    creati due varibili string fileimmagine e filesuono ed assegna i rispettivi valori in base a MyValue con una cosa del genere

    dim perc as string = "C:\DOVE\"
    
    fileimmagine = perc + "immagine"+ MyValue.tostring +".jpg"
    filesuono = perc + "suono"+ MyValue.tostring +".wav"
    

    così se MyValue sarà 5 avrai fileimmagine "C:\DOVE\immagine5.jpg" e filesuono "C:\DOVE\suono5.wav"

    a questo punto metti fileimmagine in picturebox1 e fai suonare filesuono ed è fatta.

    Ripeti per MyValue2 e MyValue3 usando le rispettive picturebox.

    Come passo successivo potrai usare una matrice e con un ciclo for potrai usare lo stesso codice per trattare tutti e tre i valori, ma intanto tenta di semplificare seguendo questo indirizzo.

    martedì 11 agosto 2020 07:06
  • ok , grazie mille Paolo , grazie davvero .

    in effeti per il momento posso dirti  che nella pratica e negli ultimi test  vi erano dei problemi che ho risolto utilizzando il waittocomplete  assieme al timer diventa quasi perfetto. 

    mi ha risolto  un sacco di problemi waittocomplete.

    perchè altrimenti i suoni si accavallavano  ed uno interrompeva l'altro oppure partivano non in successione , perchè il fatto particolare che deve avere comunque una spiegazione , il programma non si comporta sempre allo stesso modo nonostante sia un programma ) , a volte filava liscio a volte  i file audio (che hanno comunque un ordine di partenza , prima picturebox1  succ picturebox2 e picturebox3 ) il 3 partiva prima del file 1 o del file 2 , cose di questo tipo , da gestire soltanto con il timer sarebbe stato per me impossibile. 

    waittocomplete regola tutto quanto, e il timer da l'impulso per dirgli quale deve andare per primo.   

    ma successivamente vi chiedero' per cortesia qualcosa di piu' complesso , quando la struttura principale sara' ultimata ,ci vorra' un po' di tempo , dovro' attraverso un pulsante poter cambiare algoritmo e simulare come se una persona stesse tagliando il mazzo di carte oppure le stesse mischiando in un certo senso, di base parte a "mischiare" random di base  ma poi si potra' scegliere un metodo e fargli cambiare modo e algoritmo. l'importante che l'utilizzatore possa scegliere , anche per garantire  risultati differenti nel tempo.


     

    martedì 11 agosto 2020 08:17
  • ecco il prototipo , essendo un prototipo ho limitato l'uso per verificare l'audio.  ma in realta'  la versione avanzata contiene gia' molti dati e 78 carte , questo è il prototipo.

    https://streamable.com/gb0ly4



    • Modificato lucaravera martedì 11 agosto 2020 19:45
    martedì 11 agosto 2020 19:42
  • Ho un'altro problema , devo fare in modo che se si verifica una determinata condizione  ,da tre file di testo esistenti  se ne generi uno soltanto (gia' esistente) e venga aperto

    ho tre file di testo , il contenuto di ognuno deve esser copiato in un quarto file gia' esistente ma vuoto ed in fine essere aperto.

    ho provato questo ma non funziona , cosa sbaglio ? grazie

    Dim SourceFile, DestinationFile As String
            SourceFile = "B:\xxxxxxxx\file1.txt"
            Dim concat = "B:\xxxxxx\file2.txt"
            Dim concat2 = "B:\xxxxxxxxxx\file3.txt"
            Dim concat3 = SourceFile & concat & concat2
            DestinationFile = "b:\XXXXXXXXX.txt"
            
    
            If PictureBox1.ImageLocation = "C:\xxxxxxx.jpg" Then
                FileCopy(concat3, DestinationFile)
                Process.Start("B:\xxxxxxxx.txt")


    • Modificato lucaravera giovedì 13 agosto 2020 05:10
    giovedì 13 agosto 2020 05:09
  • Quando scrivi

    SourceFile = "B:\xxxxxxxx\file1.txt"
            Dim concat = "B:\xxxxxx\file2.txt"
            Dim concat2 = "B:\xxxxxxxxxx\file3.txt"
            Dim concat3 = SourceFile & concat & concat2


    a parte il fatto che sarebbe sempre preferibile dim concat as string = "x" mettendo as string

    ottieni che concat3 sarà uguale a

            

    "B:\xxxxxxxx\file1.txtB:\xxxxxx\file2.txtB:\xxxxxxxxxx\file3.txt"

    questo è quello che hai scritto

    devi invece aprire i singoli file e copiarne uno alla volta il contenuto nel file B:\xxxxxxxx.txt

    così imparerai anche a leggere e scrivere con i file di testo, cosa che ti aiuterà innumerevoli volte nella tua attività di programmazione

    giovedì 13 agosto 2020 07:00
  • L'informazione necessaria e' fornita al cliente.

    • Microsoft offre questo servizio gratuitamente, per aiutare gli utenti e aumentare il database dei prodotti e delle tecnologie. Il contenuto fornito “as is“ non comporta alcuna responsabilità da parte dell’azienda.

    lunedì 31 agosto 2020 09:14
    Moderatore
  • ok grazie a tutti  , visto il periodo ancora non ho completato definitivamente , ma ho inserito i suoni giusti gli effetti ecc ecc  , e' davvero interessante. 

    lunedì 7 settembre 2020 12:09