PDA

View Full Version : [VB] ScrollBar (Sono alla canna del Gas)


52°C
04-05-2002, 20:49
Perchè quando uso i controlli ScrollBar il programma si ferma ?
Esempio, se programmo una cosa tipo:

for i = min to max
DoEvents()
'chiedi a Bill se ci è o ci fa
'aspetta una risposta
'e via
next i

Perchè se con il mouse attivo una ScrollBar il programma si ferma ?
Come posso fare ?

Chi mi aiuta ? perpiacere :)

tas
04-05-2002, 21:28
Ho notato che il programma che gira in underground si ferma non solo quando si agisce su una scrollbar, ma anche quando sposti o ridimensioni il form. Probabilmente perchè in VB queste operazioni vengono eseguite con una priorità maggiore rispetto all'esecuzione del codice, trattandosi di azioni eseguite su zone "non-client" (la barra del titolo, i bordi e le barre di scorrimento) e quindi affidate direttamente a Windows.

La soluzione potrebbe essere quella di utilizzare un timer:

Private Sub Timer1_Timer()
Static k As Long

List1.AddItem k
k = k + 1
End Sub

Nota che così facendo non è necessario utilizzare DoEvents.

52°C
05-05-2002, 13:49
Grazie per l'aiuto ma purtroppo il mio problema non puo' essere risolto con il controllo Timer.La funzione principale del programma è quella di inviare una rischiesta via rs232 e ricebere la risposta nel più breve tempo possibile.Adesso il programma è+/- così:

Sub Comunicazione
CicloInizio:
'Avvia il timer di controllo timeout comunicazione
frmCom.tmrTimeOut = True
'Prepara la richiesta da inviare
Invia = ""
Invia = Chr$(InviaByte(1)) + Chr$(InviaByte(2)) + Invia + Chr$(&H3)
'Preleva dal buffer eventuali dati residui
'Risposta = frmCom.MSComm1.Input
'Invia la richiesta
frmCom.MSComm1.Output = Invia
'Reimposta TentativoCom
TentativoCom = False
'Loop attesa risposta
Do
Dummy = DoEvents()
'Se il timeout è intervenuto più di tre volte allora il flag TimeOut sarà impostato, quindi:
If TimeOut = True Then Exit Sub
'Controllo risposta sulla esatta lunghezza
Loop Until frmCom.MSComm1.InBufferCount = 6 + InviaByte(12)
'Se sei qui la risposta è ok
Risposta = frmCom.MSComm1.Input
'Se sei qui allora la risposta è ok quindi disattiva il timer di controllo timeout
frmCom.tmrTimeOut = False
GoTo CicloInizio
End Sub

Probabilmente sono partito con il piede sbagliato sin dall'inizio e questa sub non è certamente il massimo però...mi basterebbe trovare il metodo magari utilizzando le API per risolvere il problema ScrollBar.Al momento ho bypassato il problema creando da me un controllo VScroll e HScroll (abbastanza brutti).
Ciao e grazie :)

52°C
06-05-2002, 21:55
'nia faccio :(

lufo
07-05-2002, 16:49
non basta richiamare la tua funzione, dopo ogni evento generato dalla scrollbar??