Italian Intercettare esecuzione sub

Fulvio75

Well-Known Member
Licensed User
Ciao a tutti, c'è un modo per sapere se sto eseguendo un codice contenuto in una sub da un'altra sub che visualizza un panel semitrasparente o bottoni bloccati mentre eseguo il codice nella prima sub?
grazie
 

Fulvio75

Well-Known Member
Licensed User
C'è un altro modo per spiegare la cosa, prima inizi a fumarmi il cervello? 😄
Vediamo...
Ho diverse sub in una Activity che eseguono questi e restituiscono risultati in una CLW, mentre il telefono esegue queste sub una alla volta, devo visualizzare un panel semitrasparente che offusca leggermente lo schermo e blocca ogni interazione fino quando il codice della sub non è stato eseguito completamente e finisce la sub.
Ogni volta nelle sub devo scrivere panel.visible = true prima di eseguire il codice e panel.visible = false alla fine della sub.
Volevo fare una sub tipo sub showwait vhe intercettasse l'esecuzione di codice in un'altra sub, quindi se in b4a esiste una funzione tipo esecuzionecodice si/no che viene richiamata ogni volta che un codice viene eseguito
 

LucaMs

Expert
Licensed User
Longtime User
Non mi è chiarissimissimo (soprattutto l'ultima parte) ma potresti creare una Sub del tipo:

B4X:
Public Sub Show As ResumableSub
    Panel1.Visible = True
    Wait For EscuzioneCompletata
    Panel1.Visible = False
    Return True
End Sub

Ogni altra Sub può chiamare quella Show:
B4X:
Sub XXX
   Show
   ' qui prosegue le proprie operazioni
   ' ...
   CallSubDelayed(ME, "EscuzioneCompletata") ' ME se la Show stesse nella stessa Activity o classe di questa XXX
End Sub

(Così, a "naso", eh, ovviamente non ho provato, ma qualcosa del genere)
 
Last edited:

Star-Dust

Expert
Licensed User
Longtime User
L'idea è giusta l'implementazione è invertita

Comunque si può usare il wait for (ResumableSub) complete(Success as Boolean)
 

LucaMs

Expert
Licensed User
Longtime User
L'idea è giusta l'implementazione è invertita

L'idea era giusta, l'implementazione... pure.
(C'era solo un superluo As ResumableSub, che comunque sarebbe stato ininfluente)

B4X:
#Region Shared Files
#CustomBuildAction: folders ready, %WINDIR%\System32\Robocopy.exe,"..\..\Shared Files" "..\Files"
'Ctrl + click to sync files: ide://run?file=%WINDIR%\System32\Robocopy.exe&args=..\..\Shared+Files&args=..\Files&FilesSync=True
#End Region

'Ctrl + click to export as zip: ide://run?File=%B4X%\Zipper.jar&Args=Project.zip

Sub Class_Globals
    Private Root As B4XView
    Private xui As XUI
    Private Pane1 As B4XView
    Private lblXXXValue As B4XView
    Private lblYYYValue As B4XView
End Sub

Public Sub Initialize
'    B4XPages.GetManager.LogEvents = True
End Sub

'This event will be called once, before the page becomes visible.
Private Sub B4XPage_Created (Root1 As B4XView)
    Root = Root1
    Root.LoadLayout("MainPage")
End Sub

'You can see the list of page related events in the B4XPagesManager object. The event name is B4XPage.

Private Sub Button1_Click
    XXX
    Sleep(2000) ' Serve solo a vedere l'effetto del pannello che scompare.
    yyy
End Sub

Public Sub Show
    Log("Show")
    Pane1.Visible = True
    Wait For EscuzioneCompletata
    Log("completata")
    Pane1.Visible = False
End Sub

Private Sub XXX
    Show
    For i = 1 To 5
        lblXXXValue.Text = i
        Log("xxx " & i)
        Sleep(200)
    Next
    CallSubDelayed(Me, "EscuzioneCompletata")
End Sub

Private Sub yyy
    Show
    For i = 1 To 10
        lblYYYValue.Text = i
        Log("yyy " & i)
        Sleep(200)
    Next
    CallSubDelayed(Me, "EscuzioneCompletata")
End Sub
 
Last edited:

Fulvio75

Well-Known Member
Licensed User
L'idea era giusta, l'implementazione... pure.
(C'era solo un superluo As ResumableSub, che comunque sarebbe stato ininfluente)

B4X:
#Region Shared Files
#CustomBuildAction: folders ready, %WINDIR%\System32\Robocopy.exe,"..\..\Shared Files" "..\Files"
'Ctrl + click to sync files: ide://run?file=%WINDIR%\System32\Robocopy.exe&args=..\..\Shared+Files&args=..\Files&FilesSync=True
#End Region

'Ctrl + click to export as zip: ide://run?File=%B4X%\Zipper.jar&Args=Project.zip

Sub Class_Globals
    Private Root As B4XView
    Private xui As XUI
    Private Pane1 As B4XView
    Private lblXXXValue As B4XView
    Private lblYYYValue As B4XView
End Sub

Public Sub Initialize
'    B4XPages.GetManager.LogEvents = True
End Sub

'This event will be called once, before the page becomes visible.
Private Sub B4XPage_Created (Root1 As B4XView)
    Root = Root1
    Root.LoadLayout("MainPage")
End Sub

'You can see the list of page related events in the B4XPagesManager object. The event name is B4XPage.

Private Sub Button1_Click
    XXX
    Sleep(2000) ' Serve solo a vedere l'effetto del pannello che scompare.
    yyy
End Sub

Public Sub Show
    Log("Show")
    Pane1.Visible = True
    Wait For EscuzioneCompletata
    Log("completata")
    Pane1.Visible = False
End Sub

Private Sub XXX
    Show
    For i = 1 To 5
        lblXXXValue.Text = i
        Log("xxx " & i)
        Sleep(200)
    Next
    CallSubDelayed(Me, "EscuzioneCompletata")
End Sub

Private Sub yyy
    Show
    For i = 1 To 10
        lblYYYValue.Text = i
        Log("yyy " & i)
        Sleep(200)
    Next
    CallSubDelayed(Me, "EscuzioneCompletata")
End Sub
Ok quindi anche se la sub EscuzioneCompletata" non esiste funziona ugualmente... EscuzioneCompletata" serve solo a sbloccare wait for...... Giusto?
 
Top