Benutzer-Werkzeuge

Webseiten-Werkzeuge


k16:k16.19:start

16.19 Klasse Spinner

Die Klasse Spinner (gb.form) implementiert ein Steuerelement, das eine Animation in zwei Varianten zeigt:

B1 B2

Abbildung 16.19.1: Spinner-Variante mit aktivierter Fortschrittsanzeige (Gambas 3.7.1 und Gambas > 3.8.0)

16.19.1 Eigenschaften

Die Klasse Spinner verfügt u.a. über diese relevanten Eigenschaften:

EigenschaftDatentypBeschreibung
BorderBooleanGibt an, ob ein Rahmen gesetzt werden soll oder nicht. Verwenden Sie die Border-Klasse für eine Liste von Konstanten.
EnabledBooleanZeigt an, ob das Steuerelement aktiviert ist oder nicht.
LabelBooleanGibt an, ob ein Fortschrittswert angezeigt werden soll oder nicht.
ValueFloatGibt einen Fortschrittswert zwischen 0 (0%) und 1.0 (100%) zurück. Sie können den Wert auch innerhalb des Wertebereichs [0|1] setzen. Der Fortschrittswert wird nur dann angezeigt, wenn die Label-Eigenschaft auf True gesetzt ist.

Tabelle 16.19.1.1 : Eigenschaften der Klasse Spinner

16.19.2 Methoden

Für den Einsatz der Klasse Spinner sind vor allem die ersten beiden Methoden bedeutsam:

MethodeBeschreibung
StartStartet die Animation.
StopStoppt die Animation.
WaitRuft die Event-Schleife auf und stellt sicher, dass die Event-Schleife nicht öfter als alle 200 Millisekunden aufgerufen wird.

Tabelle 16.19.2.1 : Methoden der Klasse Spinner

16.19.3 Projekt

Das Projekt ArchivDownLoadGIT übernimmt die Programm-Idee aus dem Projekt FileDownLoad im → Kapitel 17.1, bei dem die Archivdatei (Gambas-Quelltexte) in einer bestimmten Version von einem Server in ein bestimmtes Verzeichnis geladen und anschließend entpackt wird. Zur Anzeige des Download-Fortschritts der Archivdatei auf https://gitlab.com/gambas/gambas/repository/stable/archive.tar.bz2 wird die Progressbar durch einen Spinner ersetzt.

B3

Abbildung 16.19.3.1: Download der Archivdatei vom Server (GB 3.10.0)

Für den Download der Archivdatei wird das Programm wget eingesetzt. Die Ausgaben des Programms wget werden über eine geeignete Prozess-Variable hWGETProcess As Process ausgewertet.

Public Sub btnGetArchivFile_Click()  
 
  CreateDirectory(txbArchivDirectory.Text)
 
  If txbCodeSourceURL.Text Begins "https://" Then
     sArchivFileName = File.Name(Replace(txbCodeSourceURL.Text, "https://", ""))
  Else
     sArchivFileName = File.Name(txbCodeSourceURL.Text)
  Endif
 
  txaMessages.Clear()  
  txaMessages.Insert(gb.NewLine)  
  txaMessages.Insert("Quelle: " & gb.Tab & txbCodeSourceURL.Text & gb.NewLine)
  txaMessages.Insert("Ziel: " & gb.Tab & txbArchivDirectory.Text &/ sArchivFileName & gb.NewLine)
  txaMessages.Insert(gb.NewLine)
 
  GetArchiv(txbCodeSourceURL.Text, txbArchivDirectory.Text &/ sArchivFileName) 
 
  txaMessages.Insert(Subst("&1 '&2' &3", ("The archive"), sArchivFileName, ("will be unpacked!")) & "\n"
  Wait 2 
  UnPackArchiv(txbArchivDirectory.Text &/ sArchivFileName)
 
End ' btnGetFile_Click()

Diese Ausgaben liefern im Error-Ereignis hWGETProcess_Error(sOutput As String) neben Beginn und Ende des Downloads auch den Download-Fortschritt sowie die Größe des Archivs auf dem Server, denn alle Ausgaben von Programm 'wget' kommen über die Standard-Fehler-Ausgabe:

Public Sub hWGETProcess_Error(sOutput As String)
 
  Dim aMatrix, aListe As String[]
  Dim sElement As String
  Dim iSizeMB As Float
 
  aMatrix = Split(sOutput, gb.newline)
 
  For Each sElement In aMatrix
      If sElement Ends "200 OK" Then
         txaMessages.Insert(("The connection to the server was successfully established."))
         txaMessages.Insert(gb.NewLine)
      Endif ' sElement Ends "200 OK" ?      
      If sElement Begins "Länge:" Or sElement Begins "Length:" Then
         aListe = Split(sElement, " ")
         iArchivSize = CInteger(aListe[1])
         iSizeMB = Round((iArchivSize / 1000000) * 0.953674316, -1)
         txaMessages.Insert(("Archive size = ") & Str(iArchivSize) & " Byte » (" & Str(iSizeMB) & " MiB )")
         txaMessages.Insert(gb.NewLine & "Download aktiv ..." & gb.NewLine)
         SizeTimer.Start() 
         Spinner1.Label = True
         Spinner1.Start() 
      Endif ' sElement Begins "Länge:" ?      
 
      If sElement Like "*gespeichert*" Or sElement Like "*saved*" Then
         txaMessages.Insert(("Download finished!") & gb.NewLine)
         SizeTimer.Stop()
         Spinner1.Stop() 
         Spinner1.Visible = False
      Endif ' LIKE ?
  Next ' sElement  
 
End ' hWGETProcess_Error(..)

Während des Downloads der Archivdatei soll im Spinner der Download-Fortschritt (in Prozent) angezeigt werden. Dazu benötigen Sie einerseits – vor dem Download – die Größe der Archivdatei auf dem Server und anderseits Angaben, wie viel Prozent der Archivdatei bereits geladen worden sind oder die aktuelle Größe der lokalen Archivdatei. Im Projekt wird die 2. Variante mit einem Timer umgesetzt:

Public Sub SizeTimer_Timer()
 
  Dim iCurrentFileSize As Integer
 
  iCurrentFileSize = Stat(txbArchivDirectory.Text &/ sArchivFileName).Size
  Spinner1.Value = iCurrentFileSize / iArchivSize
 
End ' Timer1_Timer()

B4

Abbildung 16.19.3.2: Entpacken der Archivdatei ohne Fortschrittsanzeige im Spinner

B5

Abbildung 16.19.3.3: Ziel erreicht: Das Archiv wurde entpackt und gespeichert

Download

Die Website verwendet zwei temporäre Session-Cookies. Diese technisch notwendigen Cookies werden gelöscht, wenn der Web-Browser geschlossen wird! Informationen zu Cookies erhalten Sie in der Datenschutzerklärung.
k16/k16.19/start.txt · Zuletzt geändert: 18.02.2018 (Externe Bearbeitung)

Seiten-Werkzeuge