Newsgroup: it.comp.lang.visual-basic
Titolo: cicli che impediscono di "cliccare"

cosa faccio quando un ciclo (for - next) non mi permette di cliccare e
quindi di generare un altro evento?
Il mouse diventa una clessidra e non riesco neanche a fare scorrere la
scrolling bar
vorrei che il ciclo operasse in background ma DoEvent non fa niente.
SOS
Brio

spiegati meglio

"Brio" <frbr...@NOSPAMlibero.it> ha scritto nel messaggio
news:qWzt9.67722$RO.17...@twister1.libero.it...

Quello che ti seve č il multithreading... ma in VB non c'č.
DoEvents dovrebbe funzionare, assicurati di averlo messo nel "mezzo" del
ciclo e non dopo il Next (a me capitava).
PS. Il crosspost, cioč postare uno stesso messaggio su piů ng, č un
comportamento che irrita molti: uomo avvisato... ;-)

 comportamento che irrita molti: uomo avvisato... ;-)
 Grazie per avermi avvisato. Non lo farň mai +
Mi spiego meglio per chiunque mi possa aiutare.
Ho fatto un programmino con un array di 370 caselle di testo che "linkano"
un'altra applicazione.  A loro volta i valori delle caselle di testo servono
per popolare una griglia. Ciň accade ogni 10 o 15 sec.
Il ciclo For Next che periodicamente viene attivato mi manda in clessidra il
mouse ed io non riesco a fare + niente durante quel periodo (abbastanza
lungo). Parlo ovviamente all'interno del Form; nel senso che non riesco a
"cliccare" su nessun'altro controllo.
Ebbene? Che fo?
Ciao,
Brio

Addenda:
in pratica vorrei che il ciclo richiamasse una funzione da eseguire in
maniera asincrona.
Oh! questo č ciň che volevo dire. Credo (!?)
Saluti,
Brio

> vorrei che il ciclo operasse in background ma DoEvent non fa niente.
Forse è nel punto sbagliato.
Vediamo il codice?


Certo!
            Pagina = 311 'Ciclo per popolare il MIBTEL
            Riga = 9
            SottoPagina = 1
            SottoPagine = 8
            For i = 31 To 372
                Call RIEMPICELLE(i, Riga, Pagina, SottoPagina, SottoPagine)
                Riga = Riga + 2
                If Riga > 19 Then
                    SottoPagina = SottoPagina + 1
                    Riga = 9
                End If
                Select Case Pagina
                    Case Is = 311
                        SottoPagine = 8
                    Case Else
                        SottoPagine = 7
                End Select
                If SottoPagina > SottoPagine Then
                    Pagina = Pagina + 1
                    SottoPagina = 1
                End If
                DoEvents
            Next i
Questo è uno dei cicli (in verità il + grande). Avrei dovuto mettere
DoEvents anche nella procedura RIEMPICELLE? In effetti non è tanto
piccolina: attiva un link, fa una richiesta e copia il risultato in una
cella di una griglia, infine passa al successivo.
Ho letto anche vari post che suggerivano di creare un activex che operi in
maniera asincrona, ma non so dove reperire un tutorial per capire come si
faccia.
Uso ancora VB6
Ciao,
Brio

 cella di una griglia, infine passa al successivo.
Meglio, magari non dopo ogni cella, ma ogni tot...

 per popolare una griglia. Ciň accade ogni 10 o 15 sec.
[...]
Allora un po di consigli da un niubbo inside :
1) Usare delle label al posto dei text box ti fa risparmiare "memoria"
2) Sei sicuro che ti servano proprio queste 370 textbox ? prova con un
vettore
A e' un vettore con 270 campi vuoti se i campi sono di X caratteri puoianche
risparmiare memoria e guadagnare un po di velocita' dichiarandoli
Dim A(269) As String
 A(0) = "1° carattere"
 A(1) = "2° carattere"
 MsgBox A(0)
set Gigio2K.voice(low)
3)  potresti al limite spostare il tuo codice in un controllo "timer" che in
pratica esegue del codice indipendentemente da quello che sta facendo sul
form

 form
Beh dopo la prima volta tutto è subordinato ad un controllo "timer" ma ogni
volta che ricomincia a "linkare" non vuole storie.
Vorrei che mentre fa quest'operazione (potrebbe anche metterci il doppio del
tempo) mi lasciasse libero di interagire nel form. Il resto del Sistema
Operativo funziona tranquillamente (es: gli mp3 funzionano normalmente),
però sopra quel form il mouse frulla in clessidra ed anche se riesco a
cliccare, l'evento non parte :(
Che mi suggerite?
Ciao,
Brio

 Meglio, magari non dopo ogni cella, ma ogni tot...
 Ho provato anche quello :(
Vorrei proprio fosse in background e magari rallentasse; cioè mi lasciasse
fare quello che voglio.
Grazie,
Brio

 no?????
umm umm scusa mi posteresti una porzione di codice per farmi capire DA DOVE
PRENDI i dati che popolano le textbox e DOVE LI SPOSTI ?

Problema risolto!
Grazie a questo vecchio post di Pollo
«se capisco bene, il tuo problema e': "come effettuare una chiamata
ASINCRONA
al mio componente?"
occorre ricorrere a trucchetti: sul componente installi un Timer
disattivato, sul metodo richiamato dal client non metti la tua procedura di
elaborazione ma attivi solo il timer e restituisci il controllo al
chiamante; la procedura di elaborazione la metti sull'evento Timer»
MAGICO!
Aggiungo: Gigio2k Avevi ragione sulle caselle si testo. Le ho ridotte ad
8!!!! Solo che adesso devo riscrivere un macello di codice :(
Prestate attenzione a questo buon vecchio post...
Ciao,
Brio

 8!!!! Solo che adesso devo riscrivere un macello di codice :(
umm umm Grazie dei complimenti , ma adesso mi incuriosisci : che fa DI
PRECISO la tua applicazione ?