none
Problem bei Progressbar in Statusbar

    Frage

  • Hallo

    Ich will ein Progressbar in Statusbar zeigen, deswegen habe ich dieses Codestück verfasst um mein ziel zu erreichen:

    Private Sub Befehl80_Click()
     Dim Progress_Amount As Integer, RetVal As Variant
      RetVal = SysCmd(acSysCmdInitMeter, "Reading Data...", 2000)
      For Progress_Amount = 1 To 2000
      RetVal = SysCmd(acSysCmdUpdateMeter, Progress_Amount)
      Next Progress_Amount
     
    End Sub

    aber wenn ich dieses Button anclicke, kommt das Statusbar und bzw. progressbar zum schein aber wenn ich das gesamte Projekt schliesse, dann sehe ich sehr kurz dieses Progressbar aber mein ziel ist anderes.

    Können Sie bitte mir helfen um dieses Problem zu beheben?

    Vielen Dank

    Montag, 24. September 2012 07:48

Antworten

  • Hallo,

    babak.per wrote:

    Private Sub Befehl80_Click()
     Dim Progress_Amount As Integer, RetVal As Variant
        RetVal = SysCmd(acSysCmdInitMeter, "Reading Data...", 2000)
        For Progress_Amount = 1 To 2000
        RetVal = SysCmd(acSysCmdUpdateMeter, Progress_Amount)
        Next Progress_Amount

    Hier fehlt die Zeile: SysCmd acSysCmdRemoveMeter

    End Sub

    aber wenn ich dieses Button anclicke, kommt das Statusbar und bzw.
    progressbar zum schein aber wenn ich das gesamte Projekt schliesse, dann
    sehe ich sehr kurz dieses Progressbar aber mein ziel ist anderes.

    Wenn du sehen moechtest, wie sich der Progressbar aufbaut, musst du
    entweder die Schleife bremsen oder den Zaehler erhoehen, weil die 2000 so
    schnell abgearbeitet sind, dass man nichts sieht. Ich hab erst ab 1 Mio
    Durchlaeufe was gesehen. Alternativ kannst du einen Sleep einbauen, z.B.
    Sleep 10 '1/10 sec warten

    Es bewirkt, dass die Schleife 20 sec fuer einen Durchlauf braucht.

    Gruss - Peter


    Mitglied im http://www.dbdev.org
    FAQ: http://www.donkarl.com

    Montag, 24. September 2012 14:48
    Moderator
  • Hallo babak.per

    Welchen Fortschritt willst Du denn anzeigen? Du lässt den Progressbar ja einfach null-komma-nichts von 0 auf 100 rauffahren, in 2000-er Schritten.

    Du müsstest nun vor oder nach dem RetVal = SysCmd() eben Deine Verarbeitung ausführen, in 2000-er Schritten eben. Dann wird nach jedem Verarbeitungsschritt der Progressbar um 1/2000-stel verlängert, bis er dann eben voll ist.

    Gruss

    Henry

    Dienstag, 25. September 2012 08:27

Alle Antworten

  • Hallo,

    babak.per wrote:

    Private Sub Befehl80_Click()
     Dim Progress_Amount As Integer, RetVal As Variant
        RetVal = SysCmd(acSysCmdInitMeter, "Reading Data...", 2000)
        For Progress_Amount = 1 To 2000
        RetVal = SysCmd(acSysCmdUpdateMeter, Progress_Amount)
        Next Progress_Amount

    Hier fehlt die Zeile: SysCmd acSysCmdRemoveMeter

    End Sub

    aber wenn ich dieses Button anclicke, kommt das Statusbar und bzw.
    progressbar zum schein aber wenn ich das gesamte Projekt schliesse, dann
    sehe ich sehr kurz dieses Progressbar aber mein ziel ist anderes.

    Wenn du sehen moechtest, wie sich der Progressbar aufbaut, musst du
    entweder die Schleife bremsen oder den Zaehler erhoehen, weil die 2000 so
    schnell abgearbeitet sind, dass man nichts sieht. Ich hab erst ab 1 Mio
    Durchlaeufe was gesehen. Alternativ kannst du einen Sleep einbauen, z.B.
    Sleep 10 '1/10 sec warten

    Es bewirkt, dass die Schleife 20 sec fuer einen Durchlauf braucht.

    Gruss - Peter


    Mitglied im http://www.dbdev.org
    FAQ: http://www.donkarl.com

    Montag, 24. September 2012 14:48
    Moderator
  • Hallo babak.per

    Welchen Fortschritt willst Du denn anzeigen? Du lässt den Progressbar ja einfach null-komma-nichts von 0 auf 100 rauffahren, in 2000-er Schritten.

    Du müsstest nun vor oder nach dem RetVal = SysCmd() eben Deine Verarbeitung ausführen, in 2000-er Schritten eben. Dann wird nach jedem Verarbeitungsschritt der Progressbar um 1/2000-stel verlängert, bis er dann eben voll ist.

    Gruss

    Henry

    Dienstag, 25. September 2012 08:27
  • Hallo Henry,

    Henry Habermacher wrote:

    Welchen Fortschritt willst Du denn anzeigen? Du lässt den Progressbar ja
    einfach null-komma-nichts von 0 auf 100 rauffahren, in 2000-er
    Schritten.

    Die Prozedur war an sich schon ok, Progress_Amount ist die
    Schleifenvariable, die geht schrittweise von 1 bis 2000 hoch und
    aktualisiert auch den Progressbar. Allerdings, wie du geschrieben hast, ist
    bei fehlender Verarbeitung keine Veraenderung zu sehen, das geht einfach zu
    schnell.

    Gruss - Peter


    Mitglied im http://www.dbdev.org
    FAQ: http://www.donkarl.com

    Mittwoch, 26. September 2012 08:41
    Moderator
  • Schon klar. Im praktischen Einsatz müsste hier nun eben was gemacht werden, was halt ein bisschen dauert. Da einfach zu warten macht kaum Sinn, nur damit der Progressbar langsam hochgefahren wird. Das hat dann keinen Bezug zur zu erwartenden Laufzeit.

    Nehmen wir mal an, er muss 10'000 Reports ausdrucken.

    Dann würde er in der Schliefe eben dann jeweils 10000/2000 Reports (=5 Reports) je Fortschrittchen ausdrucken und dann den Fortschritt um das Fortschrittchen weiter hüpfen lassen, dann die nächsten 5 Reports, etc. Der Benutzer bekommt dann eine grobe Schätzung, wielange das ganze dauern wird und wieviel bereits abgearbeitet ist.

    Ich selber ziehe die Application.Echo Methode dem Progressbar vor, um den Benutzer zu informieren. Also z.B. Application.Echo True, "Drucke Report x von Total y", voraussichtliches Ende <hochgerechnete Zeit>". Das ist IMO der vernünftigere Weg, wenn der Benutzer weiss, dass er die Statusbar anschauen muss.

    Gruss

    Henry

    Mittwoch, 26. September 2012 09:12
  • Hallo Henry,

    Henry Habermacher wrote:

    Ich selber ziehe die Application.Echo Methode dem Progressbar vor, um den
    Benutzer zu informieren. Also z.B. Application.Echo True, "Drucke Report
    x von Total y", voraussichtliches Ende <hochgerechnete Zeit>". Das ist
    IMO der vernünftigere Weg, wenn der Benutzer weiss, dass er die
    Statusbar anschauen muss.

    Ich vermeide den SysCmd-Ansatz auch, nicht zuletzt, weil er nicht besonders
    performant ist. Ich nutze stattdessen ein Formular mit Rechteck, dessen
    Breite mit dem Fortschritt waechst.

    Gruss - Peter


    Mitglied im http://www.dbdev.org
    FAQ: http://www.donkarl.com

    Mittwoch, 26. September 2012 10:41
    Moderator
  • Hallo babak.per,

    Ich gehe davon aus, dass die Antworten Dir weitergeholfen haben.
    Solltest Du noch "Rückfragen" dazu haben, so gib uns bitte Bescheid.

    Grüße,
    Robert


    Robert Breitenhofer, MICROSOFT   Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip Entwickler helfen Entwickler“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.

    Mittwoch, 17. Oktober 2012 07:19
    Besitzer