Newsgroup: it.comp.lang.delphi
Titolo: Reset Timer

Ciao a tutti,
   rieccomi qui con un nuovo quesito !!!
A volte l'utente che lancia il programma va a fare un giro e lo lascia li 
dimenticato !!!
Pensavo, a volte penso troppo !!!!, di mettere un bel timer e settarlo a 10 
minuti trascorsi i quali il programma richiede un nuovo log in.
Nella form di log in c'e' un altro timer che, dopo altri 10 minuti di 
inattivita' termina il programma.
Il problema e' come resetto il timer principale alla pressione di un tasto o 
al moviemnto del mouse??
C'e' una qualche funzione particolare o per ogni controllo devo mettere un 
reset ???
Lo stesso se entro in una procedura, in questo caso fermo il timer e lo 
resetto.
Hummmmm googlo un po e vedo cosa succede !!!
Ciao
Daniele
__________ Information from ESET NOD32 Antivirus, version of virus signature database 4054 (20090505) __________
The message was checked by ESET NOD32 Antivirus.
http://www.eset.com

La soluzione migliore e' usare un hook di tastiera e mouse in maniera da 
resettare quello che ti pare in caso di movimento del mouse o pressione 
di qualsiasi tasto. Conta che in questo caso il controllo per il 
bloccaggio del timer all'entrata di una procedura non serve piu'.

con un hook puoi azzerare un timer e via, fermo restando che dovresti
controllare quanli grants servono per poter installare un hook..
cosi su 2 piedi non ricordo...
Ma poi, se il timer raggiunge i fatidici 10 minuti, mi spieghi come
gestisci il caso in cui l'utente ha modificato un articolo e il prg
aspetta una cosa del tipo "prima di chiudere vuoi salvare le
modifiche?"....
Occhio, non dico come la chiudi...dico cosa gli fai fare...
A.

 Occhio, non dico come la chiudi...dico cosa gli fai fare...
OK.
Alla prossima
Ciao, Daniele
PS : Ti hanno mai detto che e' molto interessante ed istruttivo leggerti ??? 
Apri dei quesiti che sembrano secondari .... ma che secondari non sono.
       Non mollare il news !!!! 


 lavoro fatto.
dipende dai contesti, dagli utenti, dalle applicazioni, da quanto
conta in azienda chi fa cazzate come queste....
in un posto dove ho lavorato tanti andavano a pranzo senza bloccare il
pc.
un po alla volta ho educato queste persone..
ma una tizia era prp capa tosta...
un giorno ho usato un metodo sporco e bastardo...
aveva il client di posta aperto... l-ho usato per inviare una email a
se stessa scrivendo una cosa del tipo:
potevo scrivere al cliente xx e dirgli che pensi che sia uno
stronzo.....
e non avresti MAI potuto dimostrare di non essere stata tu.
domani lo faccio.
magicamente ha iniziato a chiudere i programmi e a bloccare il pc....
A.

 A.
Terrorista! :-P
^__^
-- 
Morde

 al moviemnto del mouse??
Allora. L'hook è una buona idea. Ma conviene farla come suggerisce
Delphi, visto che è un linguaggio OOP:
Nel tua main form metti il VCL TApplicationEvents (lo trovi negli
Additional).
Metti anche un var. privata FLastTick: DWORD
Tra gli eventi di TApplicationEvent trovi OnMessage. Crea un evento
li' e mettgli questo codice:
procedure TMainForm.ApplicationEvents1Message(var Msg: tagMSG; var
Handled: Boolean) ;
begin
  case Msg.message of
    WM_RBUTTONDOWN,
    WM_RBUTTONDBLCLK,
    WM_LBUTTONDOWN,
    WM_LBUTTONDBLCLK,
    WM_KEYDOWN:
      FLastTick := GetTickCount;
  end;
end;
Ora, assunto che il tuo Timer si chiami Timer1 mettilo settalo con
frequenza di 10-15 secondi e nel suo evento Timer mettigli questo
codice:
procedure TMainForm.Timer1Timer(Sender: TObject) ;
begin
  if ((GetTickCount - FLastTick) / 1000) > 6000) then
  begin
     // fai qui quello che ti pare
     ...
  end;
end;
Attenzione. Se la tua applicazione dovesse eseguire dei processi molto
lunghi (superiori a 10 min.) il timer potrebbe scattare!
Per evitare questo ricordati di disabilitarlo prima del processo lungo
e poi riabilitarlo al termine.
Ciao,
Gp

 Gp
Io ho fatto una cosa simile ma testavo lo spostamento del mouse, con la 
property interval settata a 10 min, in caso di inattività parte uno 
screensaver.
ScreenTimer=TTImer;  //timer screensaver
PMouse: TPoint;     //Property per corrdinate mouse
procedure TMainForm.ApplicationEvents1Message(var Msg: tagMSG; var 
Handled: Boolean) ;
begin
   ScreenTimer.enabled := ((p.X = msg.pt.x) and (p.y = msg.pt.y));
   p.X := msg.pt.x;
   p.y := msg.pt.y;
end;
Il codice per far partire lo screensaver è nell'evento OnTimer
    ShellMyExecuteAndWait('Open', PChar('ScreenTimer.scr'));
^_Goblin_^
-- 
Ibis et redibis non morieris in bello
http://goblinland.myminicity.com/

 Io ho fatto una cosa simile ma testavo lo spostamento del mouse
Sarei curioso di vedere il compilatore come traduce il mio CAS per
vedere se è più efficiente della tua IF con AND.
Ma penso che forse la mia è un pizzico più leggera perché legge/scrive
una sola var.
Ciao,
gp
P.S.
Daniele, comunque penso che abbiamo risolto il tuo problema! ;-)