Fortschrittsanzeige

Bei Verarbeitungen die länger als ein paar Sekunden dauern, gehört es zum guten Ton, den Anwender über eine Fortschrittsanzeige über den aktuellen Status der Operation zu informieren.

In diesem Artikel stelle ich ein universelles Modul zur Steuerung einer Fortschrittsanzeige unter Verwendung des Progress-Objektes vor.

Das Modul SysPrg, das Sie am Ende des Artikels downloaden können basiert auf dem Paradigma der Modularen Programmierung und stellt eine definierte Schnittstelle zur Anzeige von Fortschrittsinformationen zur Verfügung.

Im einfachsten Fall werden nur drei Funktionen benötigt, um einen ansprechenden Dialog zur Visualisierung eines Fortschritts anzuzeigen:

// Anzahl Elemente
tCount # 500;
// Fortschrittanzeige starten
Prg.Start(tCount);
for   tCounter # 1;
loop  Inc (tCounter);
while (tCounter <= tCount)
{
  // Fortschritt aktualisieren
  if (Prg.Update(tCounter, 0, CnvAI(tCounter)) < 0)
    // Abbruch
    break;
  // Verarbeitung
  // ...
}
// Fortschrittsanzeige beenden
Prg.Stop();

Mit der Funktion Prg.Start() wird die Fortschrittsanzeige gestartet. Dabei wird die Anzahl der zu verarbeitenden Elemente übergeben. Anschließend wird innerhalb einer Schleife mit der Funktion Prg.Update() der Fortschritt aktualisiert. Hierfür wird das aktuelle Element und ein optionaler Elementtext übergeben. Am Ende der Verarbeitung wird die Anzeige durch die Funktion Prg.Stop() beendet.

Der dargestellte Dialog sieht so aus:

Neben dem Fortschrittsbalken, der den prozentualen Fortschritt der Verarbeitung anzeigt, wird auch das aktuelle Element, die Anzahl der bereits verarbeiteten Elemente, die geschätzte noch benötigte Zeit und die durchschnittliche Geschwindigkeit angezeigt.

Wird die dargestellte Abbrechen-Schaltfläche gedrückt, liefert die Funktion Prg.Update() einen negativen Wert zurück und die Verarbeitungsschleife wird abgebrochen.

Durch die Übergabe weiterer Argumente an die Funktion Prg.Start(), kann die Anzeige um einen Titel und eine Einheit ergänzt werden. Außerdem kann über Optionen gesteuert werden, ob der Elementtext und die Abbrechen-Schaltfläche angezeigt werden sollen:

Prg.Start(
  tCount, // Anzahl Elemente
  'Datenbank sichern', // Titel
  'MB', // Einheit
  0, // Aktualisierungsintervall [ms] (Standard: 1000)
  0.0, // Faktor (Standard: 1.0)
  _Prg.NoText | _Prg.NoStop // Optionen
);

Der dabei dargestellte Dialog sieht so aus:

Statt für die Fortschrittsanzeige einen eigenen Dialog zu starten, kann das Modul den Fortschritt auch in einem bereits sichtbaren Fenster anzeigen. Dazu müssen die Deskriptoren der anzusteuernden Oberflächenobjekte beim Aufruf der Funktion Prg.Start() übergeben werden:

with MyFrame
{
  Prg.Start(
    tCount, // Anzahl Elemente
    '', // Titel
    '', // Einheit
    0, // Aktualisierungsintervall [ms] (Standard: 1000)
    0.0, // Faktor (Standard: 1.0)
    0, // Optionen
    $:prgProgress, // Progress-Objekt
    0, // Label-Objekt für Elementtext
    $:lblProgress // Label-Objekt für Fortschrittsinformation
  );
}

Eine solche Fortschrittsanzeige könnte beispielsweise so aussehen:

Das Modul bietet noch weitere Möglichkeiten zur Konfiguration der Fortschrittsanzeige. Laden Sie sich die Ressourcen herunter und probieren Sie es doch einfach mal aus.

Download

Zum downloaden hier klicken SysPrg.zip (6.48 KB)
Sie müssen angemeldet sein, um die Datei herunterladen zu können.

Klicken Sie hier, um die Nutzungsbedingungen für unseren Blog zu lesen.

2 Antworten

  1. Wenn die Ermittlung der genauen Anzahl der Elemente viel Zeit in Anspruch nimmt, genügt vielleicht ein Näherungswert, z.B. aus der Differenz zweier Datensatzpositionen berechnet.

    Wenn die zu zählenden Elemente nicht in den Integer-Zahlenraum passen, können Sie entweder mit einem Faktor arbeiten und z.B. nur jede 10000. Operation zählen oder das Modul auf BigInt erweitern.

    Der Einfluß auf das Zeitverhalten der Verarbeitung ist relativ gering. Die Oberfläche wird nicht bei jedem Schleifendurchlauf aktualisiert, sondern im Standardfall nur jede Sekunde.

    Testen Sie es doch einfach mal =)

  2. Die Herausforderung bei vielen Fortschrittsanzeigen liegt eher darin, die Gesamt-Anzahl zu ermitteln.
    Und für manche Anwendungen, das eine Int-Variable für die Gesamt-Anzahl nicht ausreicht.

    Eine weitere Frage wäre das Zeitverhalten der Prozedur bei sehr vielen Datensätzen im Vergleich zu einem Setzen eines Fortschritts-Bakens "zu Fuß"

Schreiben Sie einen Kommentar

Ihre E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Leave the field below empty!

Wünsche, Fragen oder Feedback sind willkommen:

Nutzungsbedingungen der Kommentarfunktion im Blog

1. Allgemeines

Vectorsoft AG („Anbieter“) stellt für Internetnutzer („Nutzer“) auf der Website
vectorsoft.de einen öffentlichen Blog bereit. Der öffentliche Blog dient dem
Informations- und Gedankenaustausch. Die Nutzer, welche sich mit Beiträgen und
Kommentaren beteiligen, verpflichten sich dazu, die Blog-Nutzungsbedingungen
einzuhalten und tragen die Verantwortung für die Richtigkeit und Angemessenheit
sowie Freiheit von Rechtsverletzungen ihrer Beiträge. Mit Nutzung der
Kommentarfunktion in unserem Blog akzeptieren Sie diese Nutzungsbedingungen.

2. Netiquette

Wir bitten Sie von persönlichen Angriffen und Provokationen aufgrund anderer
Meinungen abzusehen. Bitte argumentieren Sie sachlich und bewegen Sie sich auf
der Basis einer konstruktiven Diskussionskultur. Ihr Kommentar sollte stets im
Zusammenhang mit dem jeweiligen Thema sein, um Ausschweifungen in andere
Themenbereiche zu vermeiden. Das mehrmalige Posten desselben Kommentars
oder mehrerer ähnlicher Kommentare ist nicht erlaubt.

3. Verbot rechtswidriger Inhalte

Mit Absenden Ihres Kommentars bestätigen Sie, dass Sie keine Urheberrechte oder andere Rechte Dritter verletzen. Volksverhetzende, rassistische Äußerungen, Anleitungen zu Straftaten und deren Verherrlichung, Gewaltdarstellungen, pornografische Inhalte und Äußerungen, die Persönlichkeitsrechte verletzen sind untersagt.

4. Keine Werbung

Die Nutzung der Kommentarfunktion ist für kommerzielle oder parteipolitische
Zwecke nicht erlaubt. Werbliche Beiträge aller Art werden von uns umgehend
gelöscht.

5. Angaben zum Namen

Bei der Eingabe Ihres Namens achten Sie auf die zuvor genannten Grundsätze.

6. Quellenangaben

Bitte geben Sie bei der beabsichtigten Veröffentlichung von Zitaten oder Beiträgen
Dritter die jeweiligen Quellen an und erläutern dessen Bezug zum Blogbeitrag.

7. Verstoß gegen die Nutzungsbedingungen

Beiträge, die gegen diese Richtlinie verstoßen werden umgehend gelöscht. Sollten
Sie selbst Verstöße bemerken, so senden Sie uns bitte den Link des betreffenden
Kommentars per E-Mail an . Wir weisen ausdrücklich daraufhin, dass wir einzelne Nutzer bei wiederholten oder schweren Verstößen gegen diese
Nutzungsbedingungen ausschließen werden.

Stand: Sept. 2024

Deine Trial Version - jetzt anfordern!

Teste yeet - unverbindlich und kostenfrei

IHRE EVALUIERUNGSLIZENZ - JETZT ANFORDERN!

TESTEN SIE DIE CONZEPT 16 VOLLVERSION - UNVERBINDLICH und KOSTENFREI

Melden Sie sich bei unserem Newsletter an

Anrede*
     
Zustimmung zur Datenverarbeitung gem. DSGVO*



WordPress Cookie-Hinweis von Real Cookie Banner