Passa al contenuto principale

DEFVIDPROGRESSBAR

Desktop

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.

warning

Importante: è necessario capire come viene strutturata la videata di progressione, e quindi come definirla.

Parametri

ParametroDefinizioneI/OInformazioniVersione traduttoreSMP
TITStringaINDesktop
TIPOLOGIADesktop
DETTAGLIOInteroINDesktop
INTERROMPIInteroINDesktop
STATOINAVVIOInteroINDesktop
AZIONEAzioneINObbligatorioDesktop
OGGETTOClasseINObbligatorioDesktop
PRIMOPIANOInteroINDesktop

TIT

StringaINInputValore non necessarioValore non necessarioDesktop

Titolo che viene assegnato alla finestra visualizzata

TIPOLOGIA

Valore non necessarioValore non necessarioDesktop

Tipologia di progress bar

ValoreDescrizione
1Avanzamento Standard
2Log di operazioni varie

DETTAGLIO

InteroINInputValore non necessarioValore non necessarioDesktop

Specifica se la parte inferiore con il dettaglio dell'operazione deve essere visualizzata aperta o chiusa

INTERROMPI

InteroINInputValore non necessarioValore non necessarioDesktop

Indica se visualizzare o meno il tasto d'interruzione anticipata del processo

STATOINAVVIO

InteroINInputValore non necessarioValore non necessarioDesktop

Stato della videata di progressione all'avvio:

ValoreDescrizione
1Standard
2Minimizzata
3In Traybar

AZIONE

AzioneINInputObbligatorioObbligatorioValore non necessarioValore non necessarioDesktop

Callback contenente il processo per il quale si vuole visualizzare la barra di attesa

OGGETTO

ClasseINInputObbligatorioObbligatorioValore non necessarioValore non necessarioDesktop

Parametri principali finestra e step del processo

PRIMOPIANO

InteroINInputValore non necessarioValore non necessarioDesktop

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