DEFVIDPROGRESSBAR
La specifica '@DEFVIDPROGRESSBAR permette di definire una videata di attesa singola o multifase.
Per multifase si intende un processo formato da più fasi per le quali sarebbe necessario visualizzare una barra di attesa specifica. La specifica '@DEFVIDPROGRESSBAR è da preferire all'utilizzo della '@DEFVIDWAITMSG.
La specifica '@DEFVIDPROGRESSBAR sfrutta la tecnologia Multithreading, quindi non può far riferimento a nessuna delle variabili globali definite all'interno dell'ambiente.
Importante: è necessario capire come viene strutturata la videata di progressione, e quindi come definirla.
Parametri
| Parametro | Definizione | I/O | Versione traduttore | SMP | |
|---|---|---|---|---|---|
| TIT | Stringa | ||||
| TIPOLOGIA | |||||
| DETTAGLIO | Intero | ||||
| INTERROMPI | Intero | ||||
| STATOINAVVIO | Intero | ||||
| AZIONE | Azione | ||||
| OGGETTO | Classe | ||||
| PRIMOPIANO | Intero |
TIPOLOGIA
Tipologia di progress bar
| Valore | Descrizione |
|---|---|
| 1 | Avanzamento Standard |
| 2 | Log di operazioni varie |
DETTAGLIO
Specifica se la parte inferiore con il dettaglio dell'operazione deve essere visualizzata aperta o chiusa
INTERROMPI
Indica se visualizzare o meno il tasto d'interruzione anticipata del processo
STATOINAVVIO
Stato della videata di progressione all'avvio:
| Valore | Descrizione |
|---|---|
| 1 | Standard |
| 2 | Minimizzata |
| 3 | In Traybar |
AZIONE
Callback contenente il processo per il quale si vuole visualizzare la barra di attesa
OGGETTO
Parametri principali finestra e step del processo
PRIMOPIANO
Impone o meno la videata di progressione sempre in primo piano o meno
Esempi
Loop indefinito
'@SRP LoadCollectionNoTime()
Steps.Clear()
SingleStep.Id = "A"
SingleStep.Etichetta = "Processo A"
SingleStep.ValoreMassimo = 0
Steps.AggiungiFase(SingleStep [INOUT])
Return
Loop indefinito
'@SRP ProcessCallBack()
'Azione richiamata
'...
Return
'#endregion
'#region Interruzione processo
'@SRP EsempioProgressBarConInterruzioneProcesso()
Barra con singola fase
'@DEFVID DIM[35,140] NOME[Videata] ID["IDVIDEATA"] TIT["Titolo Videata"]
'@DEFVIDPROGRESSBAR TIT["Titolo progress bar"] _
OGGETTO[ProgressBar] _
AZIONE[ProcessCallBack()] _
DETTAGLIO[1]
'@RUNVID
...
'@SRP Load()
InitProgressBar()
Return
...
'@SRP InitProgressBar()
LoadCollection()
ProgressBar.Testo = "<b>ATTENZIONE</b><br>Il processo in corso potrebbe portare una notevole attesa"
ProgressBar.Dettaglio = "Sto <b>analizzando</b> Il file n.105 su 1025"
ProgressBar.Fasi = STEPS
Return
...
'@SRP LoadCollection()
Steps.Clear()
SingleStep.Id = "A"
SingleStep.Etichetta = "Processo Unico"
SingleStep.ValoreMassimo = 100
Steps.AggiungiFase(SingleStep [INOUT])
Return
Barra con più fasi
'@DEFVID DIM[35,140] NOME[VideataMultiPhase] ID["IDVIDEATAMultiPhase"] TIT["Titolo Videata"]
'@DEFVIDPROGRESSBAR TIT["Titolo progress bar"] _
OGGETTO[ProgressBar] _
AZIONE[Process()] _
DETTAGLIO[1]
'@RUNVID
...
'@SRP LoadMultiPhase()
InitProgressBarMultiPhase()
Return
...
'@SRP InitProgressBarMultiPhase()
LoadCollectionMultiPhase()
ProgressBar.Testo = "<b>ATTENZIONE</b><br>Il processo in corso potrebbe portare una notevole attesa"
ProgressBar.Dettaglio="Sto <b>analizzando</b> Il file n.105 su 1025"
ProgressBar.Fasi = Steps
'@DEFVIDPROGRESSBAR TIT["Titolo progress bar"] _
OGGETTO[ProgressBar] _
AZIONE[Process()] _
DETTAGLIO[1]
Return
...
'@SRP LoadCollectionMultiPhase()
Steps.Clear()
SingleStep.Id = "A"
SingleStep.Etichetta = "Processo A"
SingleStep.ValoreMassimo = 100
Steps.AggiungiFase(SingleStep [INOUT])
SingleStep.Id = "B"
SingleStep.Etichetta = "Processo B"
SingleStep.ValoreMassimo = 100
Steps.AggiungiFase(SingleStep [INOUT])
SingleStep.Id = "C"
SingleStep.Etichetta = "Processo C"
SingleStep.ValoreMassimo = 100
Steps.AggiungiFase(SingleStep [INOUT])
Return
...
'@SRP Process()
For I[INT] = 1 To 10000
ProgressBar.AggiornaDettaglio("Step 1 elemento ")
ProgressBar.AggiornaFase("A", I)
Next I
For I = 1 To 10000
ProgressBar.AggiornaDettaglio("Step 2 elemento ")
ProgressBar.AggiornaFase("B", I)
Next I
For I = 1 To 10000
ProgressBar.AggiornaDettaglio("Step 1 elemento ")
ProgressBar.AggiornaFase("A", I)
Next I
Return
Loop indefinito
'@DEFVID DIM[35,140] NOME[VideataNoTime] ID["IDVIDEATANoTime"] TIT["Titolo Videata"]
'@DEFVIDPROGRESSBAR TIT["Titolo progress bar"] _
OGGETTO[ProgressBar] _
AZIONE[ProcessCallBack()] _
DETTAGLIO[1]
'@RUNVID
...
'@SRP LoadNoTme()
InitProgressBarNoTime()
Return
...
'@SRP InitProgressBarNoTime()
LoadCollectionNoTime()
ProgressBar.Testo = "<b>ATTENZIONE</b><br>Il processo in corso potrebbe portare una notevole attesa"
ProgressBar.Dettaglio="Sto <b>analizzando</b> Il file n.105 su 1025"
ProgressBar.Fasi = Steps
Return
Pulsante di interruzione processo
'@DEFVID DIM[35,140] NOME[VideataStopProcess] ID["IDVIDEATAStopProcess"] TIT["Titolo Videata"]
'@DEFVIDPROGRESSBAR TIT["Titolo progress bar"] _
OGGETTO[ProgressBar] _
AZIONE[StopProcess()] _
DETTAGLIO[1] _
INTERROMPI[1] ' Viene reso visibile il bottone per interrompere il processo
'@RUNVID
...
'@SRP StopProcess()
' Processo applicativo
If ProgressBar.ControllaInterruzione() = 1 Then ExitSr
Return
Aggiornamento dati
'@DEFVID DIM[35,140] NOME[VideataUpdateData] ID["IDVIDEATAUpdateData"] TIT["Titolo Videata"]
'@DEFVIDPROGRESSBAR TIT["Titolo progress bar"] _
OGGETTO[ProgressBar] _
AZIONE[GoSub ProcessUpdateData] _
DETTAGLIO[1] _
INTERROMPI[1]
'@RUNVID
...
'@SRP LoadUpdateDati()
InitProgressBarUpdateData()
Return
...
'@SRP InitProgressBarUpdateData()
SingleStep.Id = "A"
SingleStep.Etichetta = "Lettura dati da DB"
SingleStep.ValoreMassimo = 100
ProgressBar.Fasi.AggiungiFase(SingleStep [INOUT])
ProgressBar.Testo = "Attendere mentre vengono reperiti i dati da DB."
Return
...
'@SR ProcessUpdateData
' Conteggio elementi da leggere dal DB
'@COUNTDBDATA TABELLA[BLDCOMUNE] _
IND[0 \\COD=""\\\\CODST=""\\\\CODPR=""\\] _
SELEZIONI[COMCOD$ >= ""] _
NUMRECORD[RecordNum]
For J[INT] = 1 To RecordNum
' Controllo pressione tasto interrompi.
' In caso venga premuto esce dalla '@SR
If ProgressBar.ControllaInterruzione()=1 Then ExitSr
' Lettuta dati dal DB
'@GETDBDATA TABELLA[BLDCOMUNE] _
IND[0 \\COD=""\\\\CODST=""\\\\CODPR=""\\] _
SELEZIONI[COMCOD$ >= ""]
ProgressPerc = INT(J/RecordNum*100)
Detail = "Avanzamento: " + FNS$(ProgressPerc) + "%. Letti " + FNS$(J) + _
" record su " + FNS$(RecordNum) + "." + CHR$(13)+CHR$(10)+ _
"Comune:" + FNTR$(COMCOD$) + " - CAP: " + FNTR$(COMCAP$)
' Aggiornamento dati videata di attesa
ProgressBar.AggiornaDettaglio(Detail)
ProgressBar.AggiornaFase("A", ProgressPerc)
Next J
Return