Italian Form di attesa

Giacomo

Active Member
Licensed User
Longtime User
Ciao A tutti
Ho un problema che non riesco a risolvere , mi spiego:
Con B4J ho una form principale , dalla quale ( alla pressione di un pulsante) vorrei che si aprisse una seconda Form dalla quale vedere alcune informazioni che scorrono in maniera dinamica con tanto di progress bar ad esempio:
  • Database trovato
  • Database Verificato
  • eccc ...
Il punto è che tutto ciò avviene solo a ciclo finito e la seconda form appare quando oramai i dati sono statici.
Al Momento ho fatto alcune prove usando CallSubDelayed per avviare le varie routine ma senza risultati.

Un grazie a chi vorrà aiutarmi
 

Giacomo

Active Member
Licensed User
Longtime User
Innanzi tutto Grazie per l'Aiuto

Uso un semplice Loop For Next che scrive un po di cose in una textarea ( in pratica sto solo prendendo dimestichezza con B4J)
in realtà ho letto che Doevents non funziona , e comunque ho provato a scriverlo in tutte le salse senza risultato
 

Gianni M

Well-Known Member
Licensed User
Longtime User
doevents non esiste in b4j
con un TIMER
 

LucaMs

Expert
Licensed User
Longtime User
Si, poi ho "notato" che DoEvents non esiste in B4J.

Comunque, non vedo come il timer possa risolvere (suggerimento proposto anche da Erel in vari thread) se non esiste un modo per aggiornare l'interfaccia grafica (tipo Invalidate in B4A)
 

Giacomo

Active Member
Licensed User
Longtime User
Ho provato anche con il Timer,
La situazione migliora leggermente in quanto ora la nuova finestra appare prima di eseguire l'evento Tick ma tutto ciò che eseguo durante l'evento Tick ( tra cui una progressBar ) appare solo quando tutto si è concluso .
L'effetto sulla progressbar è di vederla a zero all'inizio del cilo e a 100% alla fine .... direi che serve a poco :(
 

marcick

Well-Known Member
Licensed User
Longtime User
Il For-Next ha effetti terribili sulla grafica anche in B4A. Potresti provare, sempre con un timer, a incrementare un indice ogni volta che hai il tick, eseguire la parte relativa a quell'indice, aggiornare la progressbar ed uscire.
 

LucaMs

Expert
Licensed User
Longtime User
Il For-Next ha effetti terribili sulla grafica anche in B4A. Potresti provare, sempre con un timer, a incrementare un indice ogni volta che hai il tick, eseguire la parte relativa a quell'indice, aggiornare la progressbar ed uscire.

In B4A, dicano pure ciò che vogliono, usando il DoEvents, magari dopo un Invalidate dell'oggetto da ridisegnare, funziona.
Aggiornare la progressbar non dovrebbe funzionare (b4j), secondo me, per il semplice fatto che non viene aggiornata.
Comunque, provate (proverò anch'io ma adesso non posso) su progetti semplici e... fatemi sapere :D


Ah, un'ultima cosa: come viene realizzato/visualizzato il secondo form?


UFFA, non ho tempo eppure la mia curiosità... mi metto a provare :p
 

Giacomo

Active Member
Licensed User
Longtime User
Faccio prima a inviarti il mio progettino.( Versione con timer)
prova a cliccare sul secondo pulsante da sinistra , dovrebbe apparire una Form che vorrei fosse di attesa , riempire una textarea ecc...
Non badare all'estetica :D Work in progress
 

Attachments

  • Prova finestre.zip
    40.4 KB · Views: 368

LucaMs

Expert
Licensed User
Longtime User
Nel progettino che ho allegato in #9 c'è un errore che... non è un errore, purtroppo :(

B4X:
Sub tmr_Tick
    ProgressBar1.Progress = ProgressBar1.Progress + .1
    If ProgressBar1.Progress = 1 Then
        tmr.Enabled = False
    End If
End Sub

Nella routine, la mia intenzione era che, se il valore della ProgressBar avesse raggiunto il massimo, cioè 1, il timer sarebbe dovuto essere disabilitato.
Questo non avviene in quanto, pur aumentando di 0.1 ad ogni Tick, il valore non è mai perfetto.
Ho pensato che questo fosse dovuto al fatto che il timer potesse perdere quale millesimo di secondo, se non decimillesimo o altro; quindi ho provato
ad aggiungere una variabile Float che aumentasse anch'essa di un decimo ad ogni Tick e anche questa non raggiunge mai 1, ma 0.9000000953674316 e 1.0000001192092896!
E' perfino più "preciso" (si fa per dire) il valore della ProgressBar!

Molto tempo fa aprii un thread su questi dannati Float, dicendo anche che questi problemi non esistono in altri linguaggi, come VB.Net, ad esempio.

Come diavolo si può programmare decentemente con queste cose?

Dato che c'è una nuova modifica al Forum che ti sconsiglia di proseguire a scrivere in un thread vecchio di oltre un anno, ne aprirò un altro (dopo aver riletto il vecchio e sperato di capirci qualcosa).
 
Last edited:

LucaMs

Expert
Licensed User
Longtime User
Macché, anche usando VB.Net i calcoli con i decimali hanno lo stesso problema: se sommi 0.1 e 0.1 col cavolo ottieni 0.2!

Poi mi spiegheranno perché una semplice calcolatrice invece funziona come si deve!
 

Giacomo

Active Member
Licensed User
Longtime User
Scusa l'ingenuità (o forse non ho capito il problema) ma non sarebbe sufficiente " >= " nel If then ?
B4X:
Sub tmr_Tick
     ProgressBar1.Progress = ProgressBar1.Progress + .1
     If ProgressBar1.Progress >= 1 Then
         tmr.Enabled = False
     EndIf
End Sub

PS. non mi ricordo come si scrive  il codice
 

LucaMs

Expert
Licensed User
Longtime User
ma non sarebbe sufficiente " >= " nel If then
Infatti è quello che ho scritto nel forum inglese, che sarebbe sufficiente:
(I know that I could write:
If ProgressBar1.Progress >= 1 Then
of course; this is not the problem)

ma ho scritto anche che una normale calcolatrice non ti da questi problemi.
[P.S. ah, ho visto che lo sai, grazie per il Like ;)
Mi sono anche accorto di aver scritto una cosa che sarà interpretata male, potranno pensare che io mi riferissi alla calcolatrice software, nella quale il programmatore avrà aggirato il problema, mentre io mi riferivo a quelle hardware]

Con i PC non c'è niente da fare, dobbiamo convivere con l'approssimazione (chissà perché!)
 
Last edited:
Top