Newsgroup: it.comp.lang.visual-basic
Titolo: [?] Flicker su Lbl durante refresh

Ciao,
ho una trentina di Label in un form dove aggiorno il contenuto ogni secondo
con dei dati calcolati internamente al programma stesso.
Non so bene come spiegarlo, ma durante questo "aggiornamento" ho come un
traballio di tutte le lbl, un flickering ad ogni secondo, un traballio delle
60 label...
Ho provato diversi modi ma non sono riuscito a togliere questo "sfarfallio".
è possibile in qualche modo o devo sostituire le lbl con qualche cosa
d'altro?
L'aggiornamento delle lbl lo faccio con un richiamo da timer con un loop 1
to 60 il normale:
label1(x).caption = data1 + " " + data2 + " " + data3
e un doevent mi propone l'aggiornamento delle lbl in successione.
Ho anche provato con refresh ma peggio ancora...
grazie per qualche consiglio...
Anto.
-----= Posted via Newsfeeds.Com, Uncensored Usenet News =-----
http://www.newsfeeds.com
 - The #1 Newsgroup Service in the World!
-----==  Over 80,000 Newsgroups - 16 Different Servers! =-----

Non c'è molto da fare purtroppo.
Tenta con la proprietà AutoRedraw = True e la proprietà ClipControls =
False,
non inserire il DoEvents perché se l'intervallo è 1 secondo l'applicazione
ha tutto il tempo di eseguire il refresh.
Puoi tentare (ma non so se ti conviene a livello di memoria, giudica tu in
base alla macchina su cui gira il prg) con la sostituzione delle label a
favore delle textbox impostandole piatte e bloccate (Locked = True).
Tutto questo se non vuoi lanciarti su controlli di terze parti tipo gli
Sheridan ActiveX ecc... ma come saprai sono prodotti a pagamento. :-(((
In bocca al lupo.

 Anto.
non avevo voglia di metterne 60, ma cosi' non sfarfalla per niente.
--
ciao, j.
www.sundaysw.com
Option Explicit
Private Sub Command1_Click()
    Timer1.Enabled = Not Timer1.Enabled
End Sub
Private Sub Timer1_Timer()
    Dim j As Long
    For j = 0 To 4
        Label1(j).Caption = Now
    Next
End Sub

 favore delle textbox impostandole piatte e bloccate (Locked = True).
Uhmmm dopo mi resta dentro il cursore... poco carino..
Vedo di migliorare il tutto a livello di codice dato che il refresh è ogni
secondo ma la "sezione di transito" dell'aggiornamento delle lbl è molto
minore, provo a rallentarlo a 1s.
Grazie comunque e saluti.


     Next
con J max a 5 tutto OK quasi non si vede ma se lo metti a >30 spara flicker
a gogo...
Grazie mille per qualsiasi consiglio!
Anto


"ApipApip" <Chied...@AskMe.com> ha scritto
e' proprio necessario aggiornare ogni secondo tutte e 60 ?
come diceva qualche tutorial, se l'orologio lo cambi ogni 2" al 99% basta.
d'altra parte 60 label, per quanto piccole, sono un bel pezzo di schermo. lo
costringi a un refresh continuo...
ciao, j.

 60 della lbl1 e modifichi con For j=1to60 lo sfarfallio si fa presente...
Prova a chiamare la LockWindowUpdate prima e dopo la modifica dei valori
delle label:
Private Declare Function LockWindowUpdate Lib "user32" (ByVal hwndLock As
Long) As Long
Prima del ciclo di modifica delle label, la chiami passandogli l'hwnd della
tua finestra. Poi  la richiami passandogli 0.
Alla seconda chiamata dovrebbe fare comunque il refresh di tutti gli
elementi modificati a video, ma almeno lo fa di sistema e non lo fai tu in
un ciclo. Probabilmente il flickering si vedrą meno.
Fammi sapere
Ciao
*Roby*

"ApipApip" <Chied...@AskMe.com> ha scritto nel messaggio
news:3d4a5...@corp.newsgroups.com...
[CUT]
Perchè non agiorni solo i valori delle Label cambiati dall'ultimo
aggiornamento ?
Non appesantisce la grafica e presumo che le Label da aggiurnare si riducano
drasticamente.
JKLJKL :-)

 ha scritto nel messaggio
news:aidnur$13eba6$1...@ID-51318.news.dfncis.de...

Ciao Grazie info.
Credo proprio che il problema stia nel numero come dice Roberto più sotto.
Purtroppo non è un aggiornamento di un orologio ma di dati calcolati ogni
secondo che variano di conseguenza anche di molto essendo oggetti orbitali.
Ho comunque provato a mettere un tasto per l'aggiornamento manuale e la
stesso difetto si ripropone anche dopo 5 seocndi anche con timer 5000.
Provo la versione di Roberto ,,, mo gli chiedo come fare.
ciao Grazie in ogni caso,... ci sto strusando dentro...da stamattina...
arghh!
tnx!
Anto.



Ciao Grazie mille.
Purtroppo tutti i dati si aggiornano completamente ogni secondo.
---cut---
Credo proprio che il problema stia nel numero come dice Roberto più sotto.
Purtroppo non è un aggiornamento di un orologio ma di dati calcolati ogni
secondo che variano di conseguenza anche di molto essendo oggetti orbitali
ad alta velocità...
Ho comunque provato a mettere un tasto per l'aggiornamento manuale e la
stesso difetto si ripropone anche dopo 5 secondi anche con timer 5000.
Provo la versione di Roberto ,,, mo gli chiedo come fare.
ciao Grazie in ogni caso,... ci sto strusando dentro...da stamattina...
arghh!
--cut---
ciao grazie
Anto.


     Next
e per il resto sono piuttosto na mazza! sry!
grazie MILLE!!
ciao


 Anto.
mi sa che il punto non e' solo il numero. e' l'impostazione.
se e' _obbligatorio_ che i label si aggiornino, li stai usando come aree di
deposito di informazioni. e' fisicamente impossibile per un essere umano
seguire 60 etichette al secondo. un refresh del genere se non e' grazioso e'
dannoso (risorse, ecc.).
se ci stai appoggiando dei valori da riutilizzare, usa un array _di
variabili_, non di etichette.
ciao, j.

 arghh!
scusa : per i dati usi una matrice e siccome visualizzarne 60 e' esagerato
fai cosi :
metti una 20ina di label con 2 tasti "+" e "-"  adesso il + ti fa salire di
riga e il meno ti fa scendere , cosi a schermo vedi sempre 20 label senza
sfarfallio stile :
 1- 2 - 3 .... 8 - 9 -10  ( linea1 )
11 - 12 ....     19 - 20  ( linea 2 )
....
50 - 51 ....  59 - 60    ( linea 6 )
adesso la visualizzazione e' :
linea = 1
( se clikky sul "+" fai  linea = linea +1 sul "-" diminuisci )
for j = 1 to 10 ' visualizzo una linea sola , con 20 2 linee ecc...
label(j ).caption = dati((j+(linea*10))-10)
next j
i dati invece li registri cosi :
for j = 1 to 60
dati(j) = data1 & " " & data2 & " " & data3...
next j
usa la & per le concatenazioni di stringhe e non il +  !

 spiegare come "chiamarlo"
La dichiarazione va scritta all'inizio della form.
Poi la chiamata la fai con
LockWindowUpdate NomeMiaForm.Hwnd ' questo blocca il refresh di tutta la
finestra
' qui in mezzo va il tuo ciclo in cui scrivi i valori
LockWindowUpdate 0 ' questo ripristina il refresh della tua finestra
Non credere che sia la panacea di tutti i mali perň...
Ciao
*Roby*