Gambas-it

Gambas3 => Programmazione => Topic aperto da: vuott - 18 Aprile 2012, 19:42:55

Titolo: [RISOLTO] Pulire la coda degli eventi
Inserito da: vuott - 18 Aprile 2012, 19:42:55
Quale istruzione per pulire la coda di un evento (ad esempio un _Enter() o un _MouseDown()) ?
Titolo: Re: Pulire la coda degli eventi
Inserito da: md9327 - 19 Aprile 2012, 10:46:56
Cosa intendi con il voler pulire la coda eventi?

Gli eventi vengono comunque emessi ed intercettati dal gestore standard, a meno che siano stati creati metodi personalizzati.

Pulire in runtime la coda a livello globale, mentre il tutto è in esecuzione, creerebbe grossi problemi, tenendo presente che già la classe Application che, anche se non direttamente usata, è sempre attiva e presente, e ha i suoi di eventi.

Ad ogni modo, per rispondere alla tua domanda, NO, non mi risulta ci sia modo di pulire il processo.
Titolo: Re: Pulire la coda degli eventi
Inserito da: vuott - 19 Aprile 2012, 11:38:50
Ad ogni modo, per rispondere alla tua domanda, NO, non mi risulta ci sia modo di pulire il processo.
Mah... avevo usato il WAIT e nell'attesa mi poteva capitare che scatenassi più volte l'evento _Enter() anche involontariamente. Quindi alla fine dell'attesa del WAIT il programma procedeva ad attuare tutti quegli eventi che nel frattempo si erano evidentemente accodati.
Va be', poi ho risolto sostituendo il WAIT con il Timer, facendo in modo da... scaricare con un Return gli eventuali eventi _Enter() da me non volontariamente determinati.
La domanda comunque l'ho lasciata per sapere.


Ad ogni modo, per rispondere alla tua domanda, NO, non mi risulta ci sia modo di pulire il processo.
Bene, mi basta per porre Risolto.
Titolo: Re: [RISOLTO] Pulire la coda degli eventi
Inserito da: fsurfing - 19 Aprile 2012, 12:09:58
può essere che nella tua situazione possa funzionare un :

Codice: [Seleziona]
STOP EVENT
Titolo: Re: [RISOLTO] Pulire la coda degli eventi
Inserito da: vuott - 19 Aprile 2012, 13:21:48
può essere che nella tua situazione possa funzionare un :

Codice: [Seleziona]
STOP EVENT

Mi era venuto in mente, poi ho scelto il Timer... comunque a miei fini didattici lo proverò.
Titolo: Re: [RISOLTO] Pulire la coda degli eventi
Inserito da: md9327 - 19 Aprile 2012, 14:06:55
STOP EVENT è legato al singolo evento.
Titolo: Re: [RISOLTO] Pulire la coda degli eventi
Inserito da: vuott - 19 Aprile 2012, 16:34:19
Parliamo un po' con il codice...

Allora, con una situazione iniziale come questa:
Codice: gambas [Seleziona]

Public Sub Label1_Enter()

  Wait 4

  Print "Alibaba"

End

...se durante quei 4 secondi passo all'interno della Label1 con il topastro ⁓O⑆ avrò al termine di quei secondi la scritta in console tante volte quante il muso del ratto è entrato nella Label.


Bene....
allora ho usato il Timer, come ho detto in precedenza, l'evento avviene ogni volta che il mouse entra nella Label1, ma si scatena e così non v'è coda:
Codice: gambas [Seleziona]

Public Sub Label1_Enter()

  Timer1.Enabled = True

' se si entrerà nell'area della Label1 fin tanto che la variabile "a" è minore di 20,
' allora l'evento si "scaricherà" nel... nulla eterno:
  If a < 20 Then Return

' Quando invece sarà raggiunto il valore 20,
' il processo passerà da qui:
  Print "Alibaba"

End


Public Sub Timer1_Timer()

 Timer1.Delay = 100

  If a = 30 Then Timer1.Enabled = False

 Inc a

End



Poco fa ho fatto qualche prova nuovamente con il WAIT, usando un escamotage più brutale  :devil: :
Codice: gambas [Seleziona]

Private tempo As Byte


Public Sub Label1_Enter()

  Inc tempo

' anche in questo caso l'evento si scatena,
' ma si scarica nel... vuoto infinito galattico:
  If tempo > 1 Then Return

   Wait 3
 
  Print "Alibaba"
 
  tempo = 0
 
End

...in questo modo la scrittura in console avverrà soltanto una volta.
Se al posto di Return uso Stop Event, l'escamotage non funziona come desiderato.
Titolo: Re: [RISOLTO, ma ancora in discussione :-) ] Pulire la coda degli eventi
Inserito da: fsurfing - 19 Aprile 2012, 17:23:00
io intendevo qualcosa del tipo:

Codice: gambas [Seleziona]

private premuto as boolean
PUBLIC SUB Label1_Enter()

IF premuto = FALSE THEN
  
 PRINT "Alibaba"  
 premuto = TRUE
ELSE
STOP EVENT
ENDIF
  
END  
Titolo: Re: [RISOLTO, ma ancora in discussione :-) ] Pulire la coda degli eventi
Inserito da: vuott - 19 Aprile 2012, 22:33:11
io intendevo qualcosa del tipo:

uhmmm.... sì, capisco, ma... diciamo che il mio caso prevede comunque una temporizzazione, che scatta al primo sollevarsi dell'evento in questione, e che poi deve ri-scattare solo dopo che è trascorso appunto il tempo stabilito. Ecco perché l'uso sperimentale di Wait e del Timer.