Autore Topic: Timer  (Letto 5560 volte)

Offline Lux

  • Maestro Gambero
  • ****
  • Post: 417
    • Mostra profilo
Timer
« il: 25 Novembre 2008, 00:26:17 »
Ciao, ho questo problemino, ho un picturebox ed un timer, ora vorrei far si che il picturebox si aggiorni ogni 2 secondi ma non ho ben capito come collegare i due oggetti.
PS:Ma esiste un manuale di gambas 2? Conosco solo quello per la prima versione ed è anche un pdf che, almeno sul mio pc non si stampa!!!

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: Timer
« Risposta #1 il: 25 Novembre 2008, 10:49:55 »
L'uso di Timer è piuttosto semplice. L'unica attenzione è sull'uso massivo, perchè può saturare le risorse di sistema e in casi eccessivi rendere impossibile l'uso dell'applicazione.

Ad ogni modo, l'oggetto è presente nella toolbox dell'ide di gambas; basta trascinarla sulla form e impostare il periodo di attivazione (in millisecondi, 1 secondo=1000).
In alternativa, è possibile usarlo all'interno di una classe non grafica (es. un processo sequenziale...). In questo caso basta creare una proprietà di di classe di tipo Timer, e il resto funziona allo stesso modo delle form.

L'oggetto ha una proprietà, come detto, per impostare l'intervallo di tempo tra un tick e il successivo, ovvero, il timer scatena un evento ogni qualvolta scade il tempo prefissato.
Creare un evento Timer in una form è molto semplice: una volta inserito l'oggetto Timer nella form, basta farci un doppio click sopra, e verrà creato automaticamente un metodo _Timer(); altrimenti è possibile crearlo manualmente con le stesse impostazioni:

Codice: [Seleziona]

PUBLIC SUB Timer1_Timer()
END


All'interno del motodo è possibile inserire tutto il codice necessario per utilizzare il timer all'interno della classe (o Form).
E' da tener ben presente che se le funzioni all'interno dell'evento, superano l'intervallo impostato, l'evento viene chiamato ulteriormente; la cosa può creare grossi problemi, in quanto gli eventi si accavallano, e possono incasinare il lavoro fatto nell'evento precedente.
In questi casi è utile avere la possibilità di disabilitare momentaneamente il timer (c'è un metodo apposito nella stessa classe Timer), che varrà riattivato al termine della procedura.

Il timer è possibile utilizzarlo anche come one-shot (un solo evento), in questo caso è sufficiente disabilitarlo in modo definitivo una volta entrati nel metodo Timer.
Un'altro suggerimento: alla chiusura (destroy) della classe contenente il Timer, è sempre meglio disattivarlo in ogni caso (Enable=FALSE), onde evitare che rimanga appeso e attivo all'interno dell'applicazione, causando guai. In una Form è sufficiente inserirlo nell'evento Close, negli oggetti in genere basta inserirlo nel metodo speciale _free() (come ho spiegato anche nel Wiki).

Spero che la mia descrizione sia stata esauriente.

Ciao

Offline Lux

  • Maestro Gambero
  • ****
  • Post: 417
    • Mostra profilo
Re: Timer
« Risposta #2 il: 25 Novembre 2008, 18:48:59 »
Quindi nel mio caso mi basterebbe scrivere : Picturebox.picture = Timer() ecco è questa parte che non ho capito...cosi eseguirei l'aggiornamento ogni secondo(senza quindi toccare nulla nelle prorpietà del timer).....

Offline leo72

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 2.163
    • Mostra profilo
    • http://www.leonardomiliani.com
Re: Timer
« Risposta #3 il: 25 Novembre 2008, 21:04:10 »
No, sarebbe:
Codice: [Seleziona]

PUBLIC SUB Timer1_Timer()
  ...fai qualcosa sulla PictureBox...
  ...ad esempio...
  PictureBox1.Refresh
ENDRefresh
Visita il mio sito personale: http://www.leonardomiliani.com

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: Timer
« Risposta #4 il: 26 Novembre 2008, 12:11:37 »
Esatto!
Infatti, avevo accennato ad un esempo di evento legato al timer, che giustamente leo ho approfondito meglio.

Noticina: non si può associare un oggetto di un tipo ad un'altro di tipologia completamente diversa: Picture non c'entra nulla con Timer.

Offline Lux

  • Maestro Gambero
  • ****
  • Post: 417
    • Mostra profilo
Re: Timer
« Risposta #5 il: 26 Novembre 2008, 16:19:31 »
Grazie mille ragazzi!!
Purtroppo, riesco a dedicare poco tempo a gambas. quindi il vostro aiuto è fondamentale per me! :-D

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: Timer
« Risposta #6 il: 27 Novembre 2008, 15:34:03 »
AH!!! E quindi vuoi far perdere tempo a noi?

SCHERZOOOOO!!!!


:-)

Offline Ceskho

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 3.778
  • Vi Veri Veniversum Vivus Vici
    • Mostra profilo
    • Pagina Personale
Re: Timer
« Risposta #7 il: 28 Novembre 2008, 15:34:26 »
Non si potrebbe copiare la spiegazione (ottimo lavoro!!!) di md9327 nel wiki per la voce timer?

Offline leo72

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 2.163
    • Mostra profilo
    • http://www.leonardomiliani.com
Re: Timer
« Risposta #8 il: 29 Novembre 2008, 16:26:22 »
Il wiki è libero. Sia md9327 che tu potete accedervi e creare la pagina interessata ;-)
Visita il mio sito personale: http://www.leonardomiliani.com

Offline Lux

  • Maestro Gambero
  • ****
  • Post: 417
    • Mostra profilo
Re: Timer
« Risposta #9 il: 30 Novembre 2008, 16:49:45 »
Ok, grazie mille ragazzi, solo una cosa, il wiki mi chiede sempre una password ed un nome utente per eccederci....

Offline Ceskho

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 3.778
  • Vi Veri Veniversum Vivus Vici
    • Mostra profilo
    • Pagina Personale
Re: Timer
« Risposta #10 il: 30 Novembre 2008, 19:23:28 »
Devi prima registrarti, dopodichè potrai accedere e modificare le pagine con il nome utente e la password da te scelti....

Offline Lux

  • Maestro Gambero
  • ****
  • Post: 417
    • Mostra profilo
Re: Timer
« Risposta #11 il: 02 Dicembre 2008, 10:47:36 »
Ok, continuo quì per non intasare il forum.
Chiedo lumi sull'utilizzo del componente timer. Ho questo problema: lo sto utilizzando per creare un lettore audio, lo uso per muovere la posizione della sbarretta dello slider. l'ho settato ogni 1000 ms (quindi deve muovere lo slider ogni secondo come fanno tutti i lettori musicali) il punto è che questa opzione mi occupa tanta di quella memoria da farmi ascoltare il brano audio a scatti (anche lo slider si muove a scatti) e spesso blocca tutta l'applicazione dandomi un errore tipo signa 11 o 8.
Ora ho visto che negli esempi vi è proprio quello che sto facendo io. Ma non capisco come l'autore di quel programma (si chiama MusicPlayer e si trova nella sezione audio degli esempi di gambas) abbia risolto il problema.
Non credo che dipenda dall' hardware che ho dato che possideo un intel core 2 duo 2.4 ghz e 2gb di ram. come distro ho lenny.
Ciao a tutti.

Offline fsurfing

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.484
    • Mostra profilo
Re: Timer
« Risposta #12 il: 02 Dicembre 2008, 20:00:35 »
quello che scrivi è decisamente strano ... sicuramente c'è qualche errore nel codice che hai scritto perche se il delay è settato a 1000 per rallentare il pc ne devi fare di operazioni al secondo!
a me il tuo problema lo dava con un delay di 10 ms in cui dovevo fare un numero enorme di operazioni grafiche!!!!!

ricontrolla bene il tutto o posta il codice se vuoi un opinione in +

ciao ciao

Offline Lux

  • Maestro Gambero
  • ****
  • Post: 417
    • Mostra profilo
Re: Timer
« Risposta #13 il: 02 Dicembre 2008, 22:23:31 »
Allora ho appena controllato, il Delay del timer è settato a 1000, ed ecco il mio codice
Codice: [Seleziona]
PUBLIC SUB Timer2_Timer()   
'Aggiorna la posizione dello slider1
  Slider1.Value = Music.Pos END
e poi ho questo codice:
Codice: [Seleziona]
PUBLIC SUB Slider1_Change()   'Varia la posizione dello slider in base alla posizione della musica   Music.Pos = Slider1.Value END

In verità non ho capito dove sbaglio....
Ciao.

Offline fsurfing

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.484
    • Mostra profilo
Re: Timer
« Risposta #14 il: 02 Dicembre 2008, 22:30:33 »
a occhio e croce hai fatto un bel loop !!!!!!!!!!!!