Azioni "a tempo" access

di il
10 risposte

Azioni "a tempo" access

Ciao a tutti, sono nuovo e non particolarmente esperto con vba.

ho una maschera che deve fare da segnapunti con 10 pulsanti(1,2...0)
quando premo ogni pulsante il valore corrispondente viene visualizzato in una casella di testo che incrementa il valore precedente
il problema si presenta quando devo aggiungere un valore superiore a 9 (10,15,25...)
ho pensato di utilizzare un timer in base al quale il click di più pulsanti entro i 5 secondi viene usato per comporre il punteggio da sommare (es 1 e 8 entro i 5 secondi mi aggiunge 18 ovviamente) mentre se si supera tale intervello di tempo i punti sono agiunti singolarmente (es 1 --> totale, 8 --> totale), ma non riesco a mettere in pratica l'idea.

la mia idea è fattibile con VBA?
qualche suggerimento?

grazie

10 Risposte

  • Re: Azioni "a tempo" access

    Premesso che non ho capito NULLA, ho capito solo che hai dei Button con dei numeri che puoi usare in singolo o ASSOCIATI, Decine e Unità.

    Io avrei usato un Flag di definizione DECINE/UNITA' con compilazione a priorità di DECINE, in quel modo alla 2° pressione(UNITA') vai ad eseguire il calcolo...

    In ogni caso anche la tua idea è fattibile, ma personalmente NON AMO i Timer.

    Predisponi una Variabile Private di Tipo Boolean nel modulo della Form, che attivi alla prima pressione del Primo Button, e Resetti su Timer.
    Se un Secondo Button trova la Variabile=True ti comporterai di conseguenza, e Resetti la variabile subito.

    In linea teorica basta gestire il TimerInterval... metterlo a 5000 su pressione del 1° Button e, su Timer(che si scatena dopo 5s) lo Forzi a 0, mentre un qualsiasi secondo Button premuto legge il valore di TimerInterval e gestisce la 2° pressione per combinare e poi resetta il TimerInterval.
  • Re: Azioni "a tempo" access

    @Alex ha scritto:


    Io avrei usato un Flag di definizione DECINE/UNITA' con compilazione a priorità di DECINE, in quel modo alla 2° pressione(UNITA') vai ad eseguire il calcolo...
    Non ho capito, ma sono assetato di conoscenza... ti prego spiegami, è sempre utile imparare
  • Re: Azioni "a tempo" access

    OptionGroup con 2 opzioni
    1) Decine
    2) Unità

    Di default imposti Unita e quando vuoi che il button rappresenti le decine abilitare quell'opzuone ed al click leggendo il calore moltiplichi il pulsante premuto per 10.

    Quello che vuoi fare si esegue con 3 righe di codice in tutto... Non serve attivare un evento per ogni button... basta leggere quello attivo che è quello che genererrbbe l'evento è sull'evento di tutti scrivi la chiamata ad una funzione...
    =fClickNum()
    Quindi scrivi la funzione che fa il tutto...
  • Re: Azioni "a tempo" access

    @Alex ha scritto:


    OptionGroup con 2 opzioni
    1) Decine
    2) Unità

    Di default imposti Unita e quando vuoi che il button rappresenti le decine abilitare quell'opzuone ed al click leggendo il calore moltiplichi il pulsante premuto per 10.

    Quello che vuoi fare si esegue con 3 righe di codice in tutto... Non serve attivare un evento per ogni button... basta leggere quello attivo che è quello che genererrbbe l'evento è sull'evento di tutti scrivi la chiamata ad una funzione...
    =fClickNum()
    Quindi scrivi la funzione che fa il tutto...
    sono ancora più confuso di prima
    evidentemente per le mie capacità è troppo
    è tutto il pomariggio che provo ma non cavo un ragno dal buco
    se al primo click moltiplico per 10 il valore del pulsante di opzione (es 5 -->50) e entro i 5 secondi non avviene nessun click come faccio a utilizzare il valore del pulsante di opzione senza un timer?
  • Re: Azioni "a tempo" access

    Questa cosa non ha nulla a che vedere con il TIMER... sei sicuro di aver seguito bene le risposte..?
  • Re: Azioni "a tempo" access

    
    Private DU As Boolean   'flag unità/devine VERO=decine FALSO= unità
    Dim v                   'valore del primo pulsante
    Dim y                   'valore del punteggio progressivo
    Dim vv                  'valore del secondo pulsante
    Dim punteggioprec       'contiene il punteggio progressivo
    Dim ultimopunteggio    	'contiene l'ultimo punteggio inserito
    Dim meno                'flag punteggio negativo VERO=- FALSO=+
    DIM pc					'punteggio corrente
    
    
    
  • Re: Azioni "a tempo" access

    
    Private Sub Cornice0_Click()
    If meno = False Then
        Me.Testo20.BackColor = RGB(165, 215, 75)
    End If
    If IsNull(Me.punteggio) Then Me.punteggio = 0   'controlla che il punteggio iniziale sia 0
                                                    'altrimenti tale conteggio non si aggiorna
    punteggioprec = Me.punteggio    '
    Me.TimerInterval = 2000 'imposta il timer a 3 secondi
    'DU = True
    v = Me.Cornice0 'legge il valore del pulsante
    'gestisce il valore 10 (zero) e 11 (-)
    Select Case v
    Case Is = 10
        'zero
        v = 0
    Case Is = 11
         meno = True
        Me.Testo20 = "-"
        Me.Testo20.BackColor = RGB(255, 0, 0)
        Me.TimerInterval = 0
        v = 0
        GoTo salto
    Case Else
        'Me.Testo20.BackColor = RGB(255, 255, 0)
    End Select
    
    
  • Re: Azioni "a tempo" access

    
    
    'il primo click corrisponde alle unità
    If DU = False Then
        'unità
        u = v
    = d + u
        If meno = True Then
            pc = pc * -1
            Me.Testo20 = pc
        Else
            Me.Testo20 = pc
            y = pc + punteggioprec
        End If
        DU = True   'imposta per le decine
        'c = 1
    Else
        'decine
        vv = v 'Me.Cornice0    'legge il valore del pulsante
        d = Me.unita * 10   'calcola le decine moltiplicando il valore del primo click x 10
    = False          'imposta per le unità
        pc = d + vv 'u
        If meno = True Then
            pc = pc * -1
            Me.Testo20 = pc '* -1 'mostra il punteggio attuale sommando le decine con le unità
            y = (pc + punteggioprec) '* -1
        Else
            Me.Testo20 = pc 'mostra il punteggio attuale sommando le decine con le unità
            y = (pc + punteggioprec)
        End If
        Me.punteggio.Value = y      'aggiorna il punteggio progressivo
                                    'aggiungendo il punteggio attuale
        Me.TimerInterval = 1000 'fa scattare immediatamente l'evento timer
    End If
    
    salto:
    Me.Cornice0.Value = 0
    End Sub
    
  • Re: Azioni "a tempo" access

    
    Private Sub Form_Timer()
    'MsgBox (Me.Testo20)
        DU = False
        Me.TimerInterval = 0    'disattiva il timer
        Me.Testo20.BackColor = RGB(65, 145, 85)
        If meno = True Then
            y = (Me.Testo20) + punteggioprec
        Else
            y = Me.Testo20 + punteggioprec
        End If
        ultimopunteggio = pc
        Me.Testo20 = y
        meno = False
        
    End Sub
    
  • Re: Azioni "a tempo" access

    Ho dimenticato, anche se penso fosse evidente che
    Cornico0 contiene i pulsanti con valore 1,2,.. ,10 per lo zero, 11 per il meno
    Testo20 è la casella di testo in cui inserire il punteggio
Devi accedere o registrarti per scrivere nel forum
10 risposte