Newsgroup: it.comp.lang.visual-basic
Titolo: Un Semaforo all'incrocio del form

Ave Cesari,
voglio simulare un piccolo semaforo nel mio programma.
Spiego meglio: Sto facendo un programma VB che mi risolva alcuni calcoli
matematici un po' laboriosi. Essendo laboriosi il programma ci impiega un
bel po' di tempo prima di visualizzarli. Al fine di puro divertimento ho
messo un piccolo cerchietto verde nel form. Il mio intento goliardico è di
far diventare rosso il cerchietto per tutta la durata del calcolo. Ignaro
delle capacità di VB :) ho provato una cosa del genere:
Private Sub cmdGo_Click()
shpCerchietto.FillColor = vbRed
...
(codice)
...
shpCerchietto.FillColor = vbGreen
End Sub
Non c'è bisogno che vi dica che non fa niente, assolutamente niente.
Insomma, se dico a VB di farmi diventare rosso il cerchio e poi, dopo aver
eseguito tutti i comandi, di farlo ritornare verde, perchè deve
disobbedirmi.
A parte le cavolate che ho detto, sapreste dirmi in cosa sbaglio?
Ciaooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
(--o--)
BARK
(--o--)

disobbedirmi.
controlla la proprieta' FillStyle: probabilmente adesso e vbFSTransparent.
ciao, hal

 End Sub
Ce li hai messi un paio di DoEvents ?
Bye, G.

Forse e meglio che dia qualche ulteriore delucidazione.
Private Sub cmdGo_Click()
shpCerchietto.FillColor = vbRed   '<=== Istruzione incriminata
Dim check as boolean
Dim max as Double, min as Double
check = True
max = Val(txtMax.Text)
min=Val(txtMin.Text)
If max < min Then
   MsgBox "Errore"
   check = False
End If
If check Then
res = solution(a, b, c, d, caccole, dita_nel_naso, AccāNisciunEFess)
txtSol.Text = res
txtSol.FontBold = True
End If
shpCerchietto.FillColor = vbGreen
 End Sub
dove la funzione solution(...) esegue cicli lunghisssssimi.
Se check risulta falso viene visualizzato il messaggio Error e il SEMAFORO
DIVENTA ROSSO!!
In caso contrario viene chiamata la routin e non succede niente.
Ho provato ad usare i  DoEvent() come suggerito da Paperino ma non funziona
comunque. Ma anche se funzionasse rimane il dubbio: Perchč il colore non
cambia nel momento in cui premo il pulsante, visto che l'ho messo in cima
alla pila delle istruzioni?
Spero di esser stato pių chiaro.
Bye,Bye..............
(--o--)
BARK
(--o--)

Un paio de che?
Paperino <non...@lo.dico> wrote in message
99qdnq$2ola$3...@stargate1.inet.it...


 wrote in message
99qqmp$nnd$1...@pegasus.tiscalinet.it...


Invece del DoEvents, potrebbe convenirti chiamare il metodo Refresh del form, cosi'
forzi il ridisegno dello stesso, ed anche la colorazione della shape.
ciao, hal

 alla pila delle istruzioni?
Ho copiato il tuo codice, a me funziona. Un dubbio: potresti aver dato il colore
in design mode come .Backcolor e .BackStyle, poi in esecuzione cerchi di
cambiare il .FillColor senza aver settato il .FillStyle ?
Per capirci, partendo da un Form con uno Shape e un pulsante nuovi,
metti i nomi Go al pulsante e shpCerchietto alla shape, e incolla questo codice.
_______________________________
Private Sub Go_Click()
    shpCerchietto.FillStyle = vbFSSolid
    shpCerchietto.FillColor = vbRed
    DoEvents
    Dim max As Double
    For max = 0 To 1000000
    Next max
    shpCerchietto.FillColor = vbGreen
End Sub
_______________________________
a me funzia...
Rileggendo il 3ad, in fondo è quello che aveva suggerito Hal.
Bye, G.

 Bye, G.
Ho copiato e incollato il codice come dicevi e mi funonzia.
FillStyle l'avevo già settato a Solid, mentre DoEvents l'avevo usato
impropriamente.
Ora mi rimane da capire una cosa sola.
Leggendo dalla guida di VB la funzione DoEvents mi pare di aver capito
(interrompimi se sbaglio) che serva grossomodo per passare il controllo all'
SO in maniera tale da farmi compiere un ciclo molto lungo permettendomi,
intanto, di compiere altre operazioni (un po' incasinato!).
Ammesso che io abbia capito DoEvents la prima riga non dovrebbe essere
processata comunque????!!!!!!!
Insomma il punto è: se inserisco il codice 'shpCerchietto.FillColor = vbRed'
come prima riga nell'evento click questa non viene eseguita prima delle
altre.
Ora vi do da svolgere questo esercizio:
Dim Dante as String
Dante = "Per me si va nella città dolente, per me si va nell'eterno
dolore...."
If Len(Dante) < 30 Then MsgBox "Error"
quale riga viene eseguita per prima?
Se sto dicendo cacate non rispondetemi :-(
G-o-o-d-b-y-e-------------------
(--o--)
BARK
(--o--)

 quale riga viene eseguita per prima?
Metti uno Stop come prima riga e poi vai avanti a colpi di F8 :-)))
Attenzione: la prima è un dimensionamento, e viene eseguita in ogni caso
all'ingresso della routine. Se anche tu facessi:
Private Sub Command1_Click()
    Exit Sub
    Dim Dante As String
End Sub
La variabile verrebbe dimensionata e la memoria allocata. Me ne sono
accorto a mie spese, anni fa, tentando di fare una cosa del tipo:
If EventoMoltoRaro Then
Dim VariabileDa4MegaByte as Double
...
...
Else
Dim VariabilePiccolina
...
...
End If
In entrambi i casi all'ingresso della sub e _prima_ della if venivano dimensionate
tutte le variabili, naturalmente con un mostruoso spreco di memoria, che in
realtà veniva utilizzata una volta su 10000. Considera che la sub veniva usata
un migliaio di volte in un loop, e che la garbage collection di VB5 non è proprio
un granchè... Appena me ne sono accorto, naturalmente ho creato una sub
separata :-)
Bye, G.

 fare al PC, il driver del video non ha il tempo di aggiornare la
schermata.
Kiarissimo
Un'altra piccola domandina (non dire parolacce tanto è l'ultima :), più che
una domanda è una curiosità, ho fatto un piccolo esperimento e mi sembra che
l'istruzione DoEvents processi tutta la coda prima di ritornare al
programma, dico bene o dico giusto? Come posso sapere quant'è lunga la coda?
bye,,,,,,,,,,,,,,,,,,,,,,,,
(--o--)
BARK
(--o--)

 Come posso sapere quant'è lunga la coda?
Ehm... ah, si, dunque... era così, proprio, che si doveva, in effetti, c'era una
chiamata API... ma... ma non c'è una domanda di riserva ? :-)
Battute a parte, non so se si possa, credo di sì, ma non me ne sono mai
interessato. Ma a che ti servirebbe ?
Un Paperino che cut&paste è facile... :-)

 interessato. Ma a che ti servirebbe ?
Era solo una mia curiosità e poi quando voglio imparare qualcosa mi può
servir sapere anche di che colore è l'ultimo pelo del culo dell'ultimo dei
mohicani (non so come si fa la faccina schifata :).
Schifezze a parte, mi è servito molto il DoEvents e quindi le tue
spiegazioni quindi rimani nei paraggi che ti devo torturare ancora per un
sacco di tempo.
bye
(--o--)
BARK
(--o--)