Differenze tra le versioni di "Pseudo-ProgressBar in un'applicazione 'a riga di comando'"
Da Gambas-it.org - Wikipedia.
Riga 17: | Riga 17: | ||
Se si vorrà avere l'effetto di una barra colorata (in verde), la riga con la funzione "Write" dovrà essere cambiata così: | Se si vorrà avere l'effetto di una barra colorata (in verde), la riga con la funzione "Write" dovrà essere cambiata così: | ||
Write "\r\e[42m" & Space(b) & "\e[0m" & Space(LUNGHEZZA + 1 - b) & CStr(c * (100 / LUNGHEZZA)) & "%" | Write "\r\e[42m" & Space(b) & "\e[0m" & Space(LUNGHEZZA + 1 - b) & CStr(c * (100 / LUNGHEZZA)) & "%" | ||
+ | Di seguito mostriamo un esempio pratico, nel quale si mostrerà lo stato d'avanzamento in percentuale della copia di un file: | ||
+ | Private Const LUNGHEZZA As Byte = 50 | ||
+ | |||
+ | '''Public''' Sub Main() | ||
+ | |||
+ | Dim fl1, fl2 As File | ||
+ | Dim b, c As Byte | ||
+ | Dim k As Integer | ||
+ | Dim orig, s As String | ||
+ | |||
+ | orig = "<FONT Color=gray>' ''/percorso/del/file/da/copiare''</font>" | ||
+ | |||
+ | fl1 = Open "<FONT Color=gray>' ''/percorso/ove/il/file/verrà/copiato''</font>"" For Create | ||
+ | fl2 = Open orig For Read | ||
+ | |||
+ | k = (Lof(fl2) \ 100) | ||
+ | c = 100 \ LUNGHEZZA | ||
+ | |||
+ | Repeat | ||
+ | Inc b | ||
+ | If b < 101 Then | ||
+ | Write "\r" & String(b \ c, "=") & "]" & | ||
+ | Space(LUNGHEZZA + 1 - (b \ c)) & CStr(b) & "%" | ||
+ | Flush | ||
+ | Endif | ||
+ | Read #fl2, s, -k | ||
+ | Write #fl1, s, -k | ||
+ | Until Eof(fl2) | ||
+ | |||
+ | fl2.Close | ||
+ | fl1.Close | ||
+ | |||
+ | If Stat("/tmp/zzz").Size == Stat(orig).Size Then Print "\nCopia del file avvenuta con successo." | ||
+ | |||
+ | '''End''' |
Versione delle 15:51, 21 gen 2022
Se si scrivendo un'applicazione a riga di comando (quindi senza supporto grafico), evidentemente non sarà possibile utilizzare l'oggetto grafico ProgressBar. Per ottenere, allora, in console/Terminale un effetto simile ad una ProgressBar, può essere utilizzata una soluzione, che adopera ovviamente caratteri, simile alla seguente:
Private Const LUNGHEZZA As Byte = 50 Public Sub Main() Dim b, c As Byte For b = 1 To LUNGHEZZA Inc c Write "\r" & String(b, "=") & "]" & Space(LUNGHEZZA + 1 - b) & CStr(c * (100 / LUNGHEZZA)) & "%" Flush Wait 0.1 Next End
Se si vorrà avere l'effetto di una barra colorata (in verde), la riga con la funzione "Write" dovrà essere cambiata così:
Write "\r\e[42m" & Space(b) & "\e[0m" & Space(LUNGHEZZA + 1 - b) & CStr(c * (100 / LUNGHEZZA)) & "%"
Di seguito mostriamo un esempio pratico, nel quale si mostrerà lo stato d'avanzamento in percentuale della copia di un file: Private Const LUNGHEZZA As Byte = 50
Public Sub Main() Dim fl1, fl2 As File Dim b, c As Byte Dim k As Integer Dim orig, s As String orig = "' /percorso/del/file/da/copiare" fl1 = Open "' /percorso/ove/il/file/verrà/copiato"" For Create fl2 = Open orig For Read k = (Lof(fl2) \ 100) c = 100 \ LUNGHEZZA Repeat Inc b If b < 101 Then Write "\r" & String(b \ c, "=") & "]" & Space(LUNGHEZZA + 1 - (b \ c)) & CStr(b) & "%" Flush Endif Read #fl2, s, -k Write #fl1, s, -k Until Eof(fl2) fl2.Close fl1.Close If Stat("/tmp/zzz").Size == Stat(orig).Size Then Print "\nCopia del file avvenuta con successo." End