Ci provo io, per quel che mi ricordo e per quanto sia in grado di farlo in questo momento
Spesso puoi farne a meno perché basta invocare il nome del metodo:
1) quando la routine è nello stesso modulo dal quale invochi il metodo
2) quando invochi il metodo di un modulo di codice o di un oggetto, premettendone il nome (modUtilty.NomeRoutine)
Devi invece usare CallSub per chiamare routine che si trovino in un modulo di servizio (se la chiamata non viene fatta dall'interno del modulo stesso, cioè da un'Activity, ad esempio).
CallSubDelayed (Delayed sta per ritardato, non nel senso che ha avuto problemi di crescita
) significa che l'esecuzione della routine avviene in maniera posticipata, ovvero la routine viene eseguita soltanto dopo che saranno state eseguite le eventuali istruzioni che la seguono e che fanno parte della routine dalla quale chiami la routine esterna (pessima spiegazione ma bastano due righe di codice di esempio):
Sub RoutinePrincipale
log(1)
CallSubDelayed(Me, "RoutineSecondaria") ' Me se RoutineSecondaria è nello stesso modulo
log(2)
End Sub
Sub RoutineSecondaria
log(3)
End Sub
log(2) verrà eseguita prima di log(3) e quindi otterrai:
1
2
3
Se avessi chiamato la routine direttamente o usato CallSub:
1
3
2
Unica altra cosa che mi viene in mente è una differenza tra CallSubDelayed usata in B4J rispetto a B4A. In B4J la routine chiamata verrà eseguita nel thread che la contiene, in B4A sarà eseguita nel thread che esegue la chiamata.
Ah, le varie versioni 2 e 3 servono per passare parametri alla routine.
Se la routine da chiamare richiedesse un parametro, dovresti usare una versione 2:
CallSubDelayed2(Me, "Visualizza", "Ciao") ' oppure CallSub2
'''''
Sub Visualizza(Parola As String)
Se ne richiedesse due, dovresti usare una versione 3:
CallSubDelayed3(Me, "Somma", 50, 25)
'''
Sub Somma(A As Int, B As Int)
Se la routine da chiamare richiedesse un Array:
CallSubDelayed2(Me, "VisualizzaTutto", Array As Object(1,"ciao",2))
'''''
Sub VisualizzaTutto(Dati() As Object)
For i = 0 To Dati.Length - 1
Log(i & TAB & Dati(i))
Next
End Sub