Newsgroup: it.comp.lang.visual-basic
Titolo: [?] Aggiornare orologio nella TrayBar

Salute!
Il problema sembra banale ma non riesco a venirne fuori, ho cercato
anche in giro ma non ho trovato nulla di funzionante.
Ho un'applicazione client che, quando si collega al server, riceve dal
server stesso l'ora e la data. Un volta ricevute imposta l'ora e la data
della macchina su cui gira a quelle del server perchč i due devono
essere sincroni. 
L'impostazione si ottiene con un banale:
date=...
time=...
Data e ora vengono effettivamente cambiate, solo che l'orologio nella
TrayBar continua a mostrare la vecchia ora finchč non trascorre il
minuto e viene aggiornato. Questa cosa perň non č bella, perchč
all'utente sembra che non sia successo nulla. 
C'č un modo per far sě che l'orologio della traybar venga aggiornato
subito?
Thanx!
Pepo

subito?
Penso che dipenda dalla quantita' di task in esecuzione sull macchina.
Ho ancora provato per sicurezza (vedi mai che vb6 ha cambiato qualcosa ;-)
ma l' aggiornamento e' stato repentino.
ciao, hal

 ciao, hal
Mi hai messo la pulce nell'orecchio e ho fatto altre prove.
Per essere più precisi la fenomelogia è la seguente: se cambio l'ora con
la barra nascosta, non appena la faccio riapparire l'ora è aggiornata.
Se cambio l'ora con la barra sempre visibile ("nascondi automaticamente"
disabilitato) allora non si aggiorna subito.
Se però cambio l'ora non con il mio programmino, ma con la finestra che
compare con un doppio click sull'orologio, allora l'ora si aggiorna
subito anche se la barra è sempre visibile. Quindi dovrebbe esistere un
modo per forzare l'aggiornamento. Credo.
Io uso VB6 su un P133, un PII500 e un PIII1000. Il secondo ha il SP3. Ma
il comportamento non cambia. Al momento del test c'è in funzione solo
VB. Lo stesso accade con il solo programmino compilato in funzione. Il
fatto che succeda anche sul PIII1000, e che succeda sempre alla fine del
minuto, credo sgombri il campo dalla possibilità che si tratti di task
in esecuzione...
Potresti vedere se con la barra sempre in vista succede la stessa cosa
succede a te? 
E' una minuzia, lo so, ma che ci vuoi fare. :-)
Thanx!
ByEz!
Pepo

COme spesso accade serve la giusta API...
Cito testualmente da Win32.hlp:
<quote_mode /on>
WM_TIMECHANGE 
wParam = 0; // not used, must be zero 
lParam = 0; // not used, must be zero 
 
An application sends the WM_TIMECHANGE message to all top-level windows
after changing the system time. 
Parameters
This message has no parameters. 
Return Value
An application should return zero if it processes this message. 
Remarks
An application that changes the system time should send this message to
all top-level windows. To send the WM_TIMECHANGE message to all
top-level windows, an application can use the SendMessage function with
the hwnd parameter set to HWND_TOPMOST. 
See Also
SendMessage 
<quote_mode /off>
Facendo questo funziona tutto alla grande.
Grazie ad hal1961 per l'attenzione.

 > >subito?
inizia ad aggirnarlo manualmente prima di postare... hai postato nel futuro.

E' una minuzia, lo so, ma che ci vuoi fare. :-)
No no, anzi ... un buon programmatore deve cercare di prevedere
piu' situazioni possibili ;-)
Comunque avevo provato con la barra in primo piano con un PIII 800
e 512 MB di ram.
Ho visto intanto che hai optato per la forzatura dell' aggiornamento
e penso sia un' ottima soluzione che ti dovrebbe rendere indipendente
dalle prestazioni e dal carico di lavoro della macchina.
ciao, hal