Italian msgbox e msgbox2 deprecato ?

fifiddu70

Well-Known Member
Licensed User
Longtime User
Ciao a tutti, era da un po che non mettevo mani alla programmazione, mi trovo a realizzare una app e noto che sia msgbox che msgbox2 risultano con un errore anche se il programma parte lo stesso, qualcuno mi sa dire quale sia il nuovo codice per entrambi?
prima ad esempio era: msgbox("testo","Titolo")
adesso?
 

drgottjr

Expert
Licensed User
Longtime User

LucaMs

Expert
Licensed User
Longtime User
L'app di funziona perché quello non è un errore ma un avvertimento (warning), quindi è sconsigliato usare quei comandi ma ancora possibile. Ti scrivo questo per chiarire la differenza tra un warning, appunto "avvertimento", e un errore vero e proprio).

Come ha scritto @drgottjr, il motivo è che MsgBox e MsgBox2 bloccano il processo in attesa della risposta ed il sistema operativo potrebbe ritenere l'app bloccata e chiuderla. Quindi, meglio usare MsgBoxAsync, come descritto al link indicato da lui.
 

sirjo66

Well-Known Member
Licensed User
Longtime User
Io MsgBox e MsgBox2 li uso ancora, ma solo in fase di sviluppo, per fare prove o per il debug, perchè sono più comodi e veloci da usare, ma poi in fase di produzione li sostituisco con gli Async.

Attenti ad una cosa però: una volta che l'utente clicca su OK viene scatenato un evento Activity_Resume e questo potrebbe creare problemi se non è stato prevista questa cosa
 

Sagenut

Expert
Licensed User
Longtime User
Ho fatto una prova veloce con MSGBOX e anche attendendo una decina di secondi prima di dare OK poi non mi pare che venga scatenato l'Activity_Resume.
Ma forse non ho capito bene io.
 

Sagenut

Expert
Licensed User
Longtime User
Ciao a tutti, era da un po che non mettevo mani alla programmazione, mi trovo a realizzare una app e noto che sia msgbox che msgbox2 risultano con un errore anche se il programma parte lo stesso, qualcuno mi sa dire quale sia il nuovo codice per entrambi?
prima ad esempio era: msgbox("testo","Titolo")
adesso?
Prova così
B4X:
Msgbox2Async("Vuoi Distruggere il Mondo?", "Domanda", "SI", "ANNULLA", "NO", Null, True)
Wait For msgbox_result (Result As Int)
Select Case Result
    Case DialogResponse.POSITIVE
        Log("SI")
    Case DialogResponse.CANCEL
        Log("ANNULLATO")
    Case DialogResponse.NEGATIVE
        Log("NO")
End Select
Sleep(2000) 'Questa è solo una pausa tra i due MSGBOX decisa da me
MsgboxAsync("Non avrai un'altra Occasione Simile.", "INFO")
Wait For msgbox_result
Log("FATTO")
 

sirjo66

Well-Known Member
Licensed User
Longtime User
scusate non mi sono spiegato bene, volevo dire che se usate MsgBoxAsync viene poi generato un evento Activity_Resume

Provate questo (lo scrivo al volo, fate voi le modifiche):
B4X:
Sub Activity_Create

Log(">> Activity_Create start")
Msgbox2Async("Vuoi Distruggere il Mondo?", "Domanda", "SI", "ANNULLA", "NO", Null, True)
Wait For msgbox_result (Result As Int)
Select Case Result
    Case DialogResponse.POSITIVE
        Log("SI")
    Case DialogResponse.CANCEL
        Log("ANNULLATO")
    Case DialogResponse.NEGATIVE
        Log("NO")
End Select
Sleep(2000) 'Questa è solo una pausa tra i due MSGBOX decisa da me
MsgboxAsync("Non avrai un'altra Occasione Simile.", "INFO")
Wait For msgbox_result
Log(">> Activity_Create end")

End Sub

Sub Activity_Resume
Log(">> Activity_Resume")
End Sub
 

Star-Dust

Expert
Licensed User
Longtime User
scusate non mi sono spiegato bene, volevo dire che se usate MsgBoxAsync viene poi generato un evento Activity_Resume

Provate questo (lo scrivo al volo, fate voi le modifiche):
B4X:
Sub Activity_Create

Log(">> Activity_Create start")
Msgbox2Async("Vuoi Distruggere il Mondo?", "Domanda", "SI", "ANNULLA", "NO", Null, True)
Wait For msgbox_result (Result As Int)
Select Case Result
    Case DialogResponse.POSITIVE
        Log("SI")
    Case DialogResponse.CANCEL
        Log("ANNULLATO")
    Case DialogResponse.NEGATIVE
        Log("NO")
End Select
Sleep(2000) 'Questa è solo una pausa tra i due MSGBOX decisa da me
MsgboxAsync("Non avrai un'altra Occasione Simile.", "INFO")
Wait For msgbox_result
Log(">> Activity_Create end")

End Sub

Sub Activity_Resume
Log(">> Activity_Resume")
End Sub
C'è un errore nel codice. nel MesboxAsync il messaggio corretto è "Non avrai altra occasione fino a prossimo Virus"
 

Sagenut

Expert
Licensed User
Longtime User
@sirjo66
Provato sia con emulatore che con cellulare.
Il LOG in Activity_Resume viene mostrato solo all'avvio, poi non appare più.
*** Service (starter) Create ***
** Service (starter) Start **
** Activity (main) Create, isFirst = true **
>> Activity_Create start
** Activity (main) Resume **
>> Activity_Resume
SI
>> Activity_Create end
Che versione di B4A usi?
 
Last edited:

sirjo66

Well-Known Member
Licensed User
Longtime User
esatto, era proprio quello che volevo dirti, come vedi appena l'utente clicca su "SI" viene generato un evento Activity_Resume e poi riprende con il Activity_Create

nel mio programma aveva creato problemi perchè veniva appunto generato un Activity_Resume prima che l'Activity_Create finisse di fare tutto quello che mi serviva

prova ora a mettere MsgBox e vedrai che prima ci sarà ">> Activity_Create end" e solo dopo il Activity_Resume
 

Sagenut

Expert
Licensed User
Longtime User
Ho usato
B4X:
Sub Activity_Create(FirstTime As Boolean)
    'Do not forget to load the layout file created with the visual designer. For example:
    'Activity.LoadLayout("Layout1")
    Log(">> Activity_Create start")
    Msgbox2Async("Vuoi Distruggere il Mondo?", "Domanda", "SI", "ANNULLA", "NO", Null, True)
    Wait For msgbox_result (Result As Int)
    Select Case Result
        Case DialogResponse.POSITIVE
            Log("SI")
        Case DialogResponse.CANCEL
            Log("ANNULLATO")
        Case DialogResponse.NEGATIVE
            Log("NO")
    End Select
    Sleep(2000) 'Questa è solo una pausa tra i due MSGBOX decisa da me
    Msgbox("Non avrai un'altra Occasione Simile.", "INFO")
    Log(">> Activity_Create end")

End Sub

Sub Activity_Resume
    Log(">> Activity_Resume")
End Sub
ma di nuovo l'Activity_Resume viene eseguito solo all'avvio
*** Service (starter) Create ***
** Service (starter) Start **
** Activity (main) Create, isFirst = true **
>> Activity_Create start
** Activity (main) Resume **
>> Activity_Resume
SI
>> Activity_Create end
** Activity (main) Pause, UserClosed = true **
Testato sul cellulare.
Il problema è che stiamo rovinando la discussione di @fifiddu70 anche se il discorso è correlato.
 
Last edited:

Sagenut

Expert
Licensed User
Longtime User
E' normale che dopo la Create venga avviata la Resume, a prescindere da MsgBox.
Questo sì.
Però, se non ho capito male, a @sirjo66 viene eseguito nuovamente l'Activity_Resume quando l'utente clicca OK sul MSGBOX.
Cosa che a me pare non accadere dai LOG.
 

LucaMs

Expert
Licensed User
Longtime User
Questo sì.
Però, se non ho capito male, a @sirjo66 viene eseguito nuovamente l'Activity_Resume quando l'utente clicca OK sul MSGBOX.
Cosa che a me pare non accadere dai LOG.
Wait For e Sleep è come se eseguissero Return, il che significa che quando li immettete in una routine (Activity_Create, in questo caso) viene eseguito il codice successivo (Activity_Resume).

Non è normale che la Resume venga eseguita due volte, credo che manchi la parte "incriminata", nel sorgente pubblicato da @sirjo66
 

sirjo66

Well-Known Member
Licensed User
Longtime User
forse mi sono spiegato male io, per cui riscrivo:

Se in una Activity_Create abbiamo un comando MsgBox, la routine viene eseguita regolarmente dall'inizio alla fine, fermandosi nel MsgBox e aspettando l'input dall'utente, poi prosegue con il codice e una volta terminata la Activity_Create viene eseguita la Activity_Resume.

Se cambio da MsgBox a MsgBoxAsync la sequenza non è la stessa, e cioè la Activity_Create parte, ma quando arriva alla MsgBoxAsync e l'utente preme un bottone, prima che l'Activity_Create prosegua ed arrivi alla fine, viene chiamata una Activity_Resume.

Io volevo solo far capire questa differenza, dato che a me ha creato un problema su di una app.

Sergio
 

Sagenut

Expert
Licensed User
Longtime User
Adesso ho finalmente capito, e verificato, il tuo discorso.
 
Top