Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1

    [Visual basic] Contare il numero di pressioni di un tasto

    Salve amici di Html.it,
    Sto da qualche tempo sviluppando un metronomo in visual basic e dopo aver risolto le cose fondamentali, avevo bisogno di un elemento aggiuntivo:

    Praticamente in un metronomo si può impostare il tempo dei battiti, ma io oltre che impostarlo manualmente in una casella di testo, volevo creare un bottone che, a seconda delle volte che viene premuto, restituisce i battiti per minuto desiderati

    Per semplificare la faccenda, avevo pensato di impostare un timer di una decina di secondi massimo, tempo in cui l'utente premerà secondo le sue esigenze il bottone.

    Una volta che mi viene restituito il numero di pressioni in tot secondi, poi non sarà difficile convertirlo in battiti per minuto..

    tutto sta capire come farglieli prendere

    Mi affido a voi grazie ragazzi.

  2. #2
    Usa la API GetTickCount() per ottenere il numero di millisecondi passati dall'avvio del sistema; alla prima pressione del pulsante memorizza il valore così ottenuto in una variabile a livello di form, alla seconda chiama nuovamente GetTickCount ed effettua la differenza tra i due valori, in modo da ottenere la differenza in millisecondi tra le due pressioni del tasto; magari memorizza di nuovo il valore ottenuto da GetTickCount nella variabile di prima, in modo da consentire di premere più volte il pulsante.
    A questo punto dividi la detta differenza per 1000 (ricordandoti di convertirlo prima in double) così da ottenere questo valore in secondi, e quindi dividi 60 per il valore così ottenuto: in questa maniera otterrai i bpm.

    Ah, se vuoi fare le cose di fino devi tenere in conto nell'effettuare la differenza tra i due tempi l'eventuale overflow di GetTickCount ai 49.7 giorni di uptime, nonché (se stai usando VB6 e non VB.NET) il fatto che dopo 24 giorni o giù di lì il valore restituito risulterà negativo in quanto la API restituisce un valore senza segno e VB dispone solo di interi con segno.

    P.S.: hai postato il messaggio nella sezione errata (per VB c'è l'apposito subforum), e non hai specificato la versione di VB che stai usando.
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320

    Moderazione

    VB ha un forum dedicato.
    E' inoltre necessario indicare la versione di VB con la quale si sta lavorando.

    Sposto la discussione nel forum "Visual Basic e .NET Framework" in attesa di conoscerne anche la versione.

    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  4. #4
    mi scuso per l'errore non avevo visto.
    la versione è la 6.0

    spero che la versione, seppur vecchia sia cmq funzionante a pieno.

  5. #5
    per caso avreste un codice d'esempio? sono nuovo del linguaggio e ancora fatico ad entrarci

  6. #6
    Cosa non sai come fare di ciò che ti ho descritto?
    Amaro C++, il gusto pieno dell'undefined behavior.

  7. #7
    Innanzitutto vorrei rassicurarti che sei stato assolutamente esauriente.. ma sono io che sono scarso e ho difficoltà nell'approcciarmi al linguaggio
    nel senso.. io pensavo di creare una nuova variabile nella quale inserirò poi il valore di get tick count, poi un altra variabile per fare la differenza tra una e l'altra.. proprio come tu hai detto

    mi chiedevo se una volta dichiarata es. dim tempo_da_inizio
    dovevo fare tempo_da_inizio = tempo_da_inizio.getTickCount()

    per poi fare la differenza tra i due

    ovviamente l'idea sarà sbagliata giusto?

  8. #8
    Utente di HTML.it L'avatar di gibra
    Registrato dal
    Apr 2008
    residenza
    Italy
    Messaggi
    4,244

    Re: [Visual basic] Contare il numero di pressioni di un tasto

    Originariamente inviato da alessandronos
    Praticamente in un metronomo si può impostare il tempo dei battiti, ma io oltre che impostarlo manualmente in una casella di testo, volevo creare un bottone che, a seconda delle volte che viene premuto, restituisce i battiti per minuto desiderati
    Cioè? Non capisco il senso di questa cosa...

    Premetto che sono anche musicista, quindi ne capisco piuttosto bene.
    I battiti del metronomo sono infatti relativi al minuto, tant'è che sono definiti in gergo con l'acronimo BMP che sta appunto per Battiti Per Minuto .

    Ora, se hai già i BMP, a cosa serve il pulsante?



  9. #9
    Vuole realizzare quello che si chiama di solito "tap tempo", ossia una funzionalità in grado di ricavare i BPM (non BMP) dal ritmo con cui è premuto un pulsante.
    Amaro C++, il gusto pieno dell'undefined behavior.

  10. #10
    Originariamente inviato da alessandronos
    ovviamente l'idea sarà sbagliata giusto?
    L'idea di fondo non è sbagliata, ma lo è la realizzazione. Dovrai fare qualcosa del genere (supponendo che il pulsante si chiami CmdTempo):
    codice:
    Option Explicit
    Private Declare Function GetTickCount Lib "kernel32" () As Long 
    
    Private TickPrecedenti As Long
    
    Private Sub CmdTempo_Click()
        Dim TickCorrenti As Long
        TickCorrenti = GetTickCount()
        If TickPrecedenti <> 0 Then
            Dim BPM As Double
            BPM = 60 / ((TickCorrenti - TickPrecedenti) / 1000)
            ' Ora in BPM hai i BPM ricavati dalle pressioni sul tasto; qui puoi farne quel che ti pare
            ' ...
        End If
        TickPrecedenti = TickCorrenti
    End Sub
    Nota che sono diversi anni che non programmo in VB6 per cui ci potrebbe essere qualche svarione; inoltre questo codice non tiene conto delle due particolarità di GetTickCount, per cui andrebbe perfezionato.
    Amaro C++, il gusto pieno dell'undefined behavior.

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.