Benutzer mit den meisten Antworten
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
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 wartenEs bewirkt, dass die Schleife 20 sec fuer einen Durchlauf braucht.
Gruss - Peter
Mitglied im http://www.dbdev.org
FAQ: http://www.donkarl.com- Als Antwort markiert Robert BreitenhoferModerator Mittwoch, 17. Oktober 2012 07:18
-
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
- Als Antwort markiert Robert BreitenhoferModerator Mittwoch, 17. Oktober 2012 07:18
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 wartenEs bewirkt, dass die Schleife 20 sec fuer einen Durchlauf braucht.
Gruss - Peter
Mitglied im http://www.dbdev.org
FAQ: http://www.donkarl.com- Als Antwort markiert Robert BreitenhoferModerator Mittwoch, 17. Oktober 2012 07:18
-
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
- Als Antwort markiert Robert BreitenhoferModerator Mittwoch, 17. Oktober 2012 07:18
-
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 -
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
-
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 -
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,
RobertRobert 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.