Seite 1 von 2
Verstrichene Zeit
Verfasst: Sa, 02.08.2008 20:22
von mumpel
Hallo!
Wie man in einem Label den Verlauf in Prozent anzeigen kann, wissen wir ja jetzt. Aber geht das auch als Zeitanzeige?
Zum Beispiel: Verstrichen Zeit: 0 Minuten und 56 Sekunden. Die Suche in Google brachte keine Ergebnisse (benutze ich die falschen Suchbegriffe?). Danke!
Re: Verstrichene Zeit
Verfasst: Sa, 02.08.2008 21:30
von turtle47
Hi René,
guckst Du mal
hier
Jürgen
Re: Verstrichene Zeit
Verfasst: Sa, 02.08.2008 21:43
von mumpel
Danke! Auf diese Idee bin ich auch schon gekommen, ist aber nicht das, was ich bräuchte. Ich möchte die Zeit angezeigt haben. Zusätzlich zur Prozentanzeige. Also auch die Zeit soll mitlaufen. Beim Starten des Makros im Dialog sol die Zeit zu laufen beginnen und wenn die Prozentanzeige auf 100% steht, soll die "Zeitmessung" stoppen. Das Formatieren in 0 Minuten und 46 Sekunden ist nicht das Problem. Nur den Befehl zur Zeitmessung habe ich nicht.
Re: Verstrichene Zeit
Verfasst: Sa, 02.08.2008 23:28
von Stephan
Nur den Befehl zur Zeitmessung habe ich nicht.
benutze die Funktion namens Timer, die gibt die seit Mitternacht vergangenen Skunden zurück. Ein Beispiel dazu steht in der OOo-Hilfe.
Gruß
Stephan
Re: Verstrichene Zeit
Verfasst: Sa, 02.08.2008 23:32
von mumpel
Das habe ich schon probiert. Allerdings gibt der nur Kommazahlen im Standardformat aus. Und bei diesem habe ich Probleme mit der richtigen Formatierung.
Re: Verstrichene Zeit
Verfasst: Sa, 02.08.2008 23:44
von Stephan
Das habe ich schon probiert. Allerdings gibt der nur Kommazahlen im Standardformat aus.
und Du bist sicher das Beispiel aus der Hilfe beachtet zu haben und insbesondere das Du Timer an eine Variable übergibst die als Long deklariert ist, wie in der Hilfe erläutert?
Wieso Timer allerdings Kommazahlen ausgeben sollte kann ich mir nicht erklären, es sollte ein Ergebnis im Datumsformat (meiner Erinnerung nach TT.MM.JJJJ) ausgegeben werden fall Du nicht wie gerade genannt vorher deklarierst.
Gruß
Stephan
Re: Verstrichene Zeit
Verfasst: So, 03.08.2008 00:02
von mumpel
Na gut, ich habe das in Excel probiert. Da wird dann z.B. soetwas angezeigt: 8,345234567
Allerdings ist Timer auch nicht dass, was ich brauche. Ich möchte ein Art Stoppuhr, bei der die Zeit mitläuft. Habe gerade mal das Offline-Archiv von Herber.de durchsucht. Da lese ich später weiter, wenn ich ausgeschlafen habe. Für meinen Fall wäre API möglicherweise besser, da auch Starbasic API unterstützt.
Re: Verstrichene Zeit
Verfasst: So, 03.08.2008 00:38
von Stephan
Allerdings ist Timer auch nicht dass, was ich brauche.
und warum nicht?
Ich möchte ein Art Stoppuhr, bei der die Zeit mitläuft.
das habe ich genauso verstanden und genau diese erhältst Du auch wenn Du Timer in eine Schleife fasst (Do-Loop bietet sich an) und das Du das weist war für mich eigentlich klar
Beispielsweise ergibt:
das was Du brauchst (in z stehen die Sekunden die hochgezählt werden), es ist lediglich bei jedem Durchlauf zu prüfen ob der Wert ganzzahlig durch 60 teilbar ist um die Minuten abzutrennen und eine Bedingung zur beendigung des Do-Loop aufzunehmen und etwas Code für die Anzeige (in einem Dialog oder sonstwo) drum zu schreiben.
Übrigens verwendet auch der international bekannte StarBasic-Experte Danny Brewer für seine in StarBasic programmierten Digitaluhren die o.g. Timer-Funktion. Das Ganze ist Bestandteil seiner Beispielsammlung "Danny's Stupid OOo Tricks", die nur leider in Englisch ist:
http://ooomacros.org/dev.php#108077
Gruß
Stephan
Re: Verstrichene Zeit
Verfasst: So, 03.08.2008 12:24
von mumpel
Habe mir das mal angeschaut. Die Digitaluhr in blau gefällt mir ganz gut. Bei diesem wird aber die Uhrzeit angezeigt. Ich habe zu wenig Erfahrung mit Dialogen, um das jetzt umbauen zu können. Hier mal ein Stoppuhr-Beispiel für Excel:
Stoppuhr in Symbolleiste (für Excel). Ist aber API-Programmierung. Allerdings wird in diesem Beispiel die Zeit durch Doppelpunkt getrennt. Mir wäre es nach obigen Beispiel lieber:
2 Stunden 34 Minuten und 56 Sekunden. Allerdings dürften Minuten und Sekunden reichen, da ein Makro wohl kaum Stunden braucht.
Re: Verstrichene Zeit
Verfasst: So, 03.08.2008 12:29
von turtle47
Sorry bin auf dem Sprung.
Erklärung später wenn erforderlich.
- Timer.ods
- (10.33 KiB) 183-mal heruntergeladen
Re: Verstrichene Zeit
Verfasst: So, 03.08.2008 12:46
von Stephan
Ich habe zu wenig Erfahrung mit Dialogen, um das jetzt umbauen zu können.
Wozu ist das auch nötig, der entscheidende Code (der der Timer verwendet und die Rückgabe umformt) ist völlig unabhängig von der digitalen Spielerei (die recht kompliziert ist) und kann in jeder Art von Dialog normal ausgegeben werden.
Auch hat das alles (Umformung und Anzeige einer bekannten Rückgabe einer Funktion) nicht mit StarBasic-Spezialkenntnissen zu tun, sondern ist allgemeines Grundwissen für jede Art der Programmierung (z.B. auch VBA), denn die ganze Aufgabe besteht darin eine Ganzzahl in zwei TEile (den durch 60 ohne REst teilbaren und den Rest der TEilung) zu zerlegen und anzuzeigen.
(Jürgen machts jetzt etwas anders indem er Time statt Timer verwendet)
Gruß
Stephan
Re: Verstrichene Zeit
Verfasst: So, 03.08.2008 14:01
von mumpel
Habe das Beispiel von Jürgen mal ausprobiert und angepasst.
Code: Alles auswählen
c2 = c1 & trim(Str(Minute(daDT))) & " Minuten " & trim(Str(Second(daDT))) & " Sekunden"
Ich schaffe es aber nicht, dieses in meinen Code einzubauen. Ich habe bereits zwei
For I-Schleifen in meinem Makro. Entweder wird nur der Timer ausgeführt oder meine Schleifen.
Codeauszug:
Code: Alles auswählen
Sub Week_day
ThisComponent.Sheets(0).Unprotect(Kennwort")
lblNext= MyDlg.getControl("Label1")
lblNext.Model.Label="Bitte warten...."
lblNext.Model.TextColor=RGB(255,0,0)
cmdNext = MyDlg.getControl("CommandButton1")
cmdNext.Model.Enabled = False
myctrl=myDlg.getControl("ProgressBar1")
'Festsetzen des Maximalwertes
myctrl.model.ProgressValueMax=742
Dim i as Long
Rem Hier beginnt Schleife 1 für Spalte B
For i= 11 to 742
lblNext= MyDlg.getControl("Label3")
lblNext.Model.Label= Format((i-11)/7.31, 0) & " % fertiggestellt"
If Weekday(ThisComponent.Sheets(0).GetCellByPosition(1,i).value, vbMonday) = 1 Then
ThisComponent.Sheets(0).GetCellByPosition(1,i).setPropertyValue( "CharColor", RGB(255,0,0) )
ElseIf Weekday(ThisComponent.Sheets(0).GetCellByPosition(1,i).value, vbMonday) = 7 Then
ThisComponent.Sheets(0).GetCellByPosition(1,i).setPropertyValue( "CharColor", RGB(0,0,255) )
ElseIf ThisComponent.Sheets(0).GetCellByPosition(1,i).Value = ThisComponent.Sheets(3).GetCellRangeByName("A1").Value Then
ThisComponent.Sheets(0).GetCellByPosition(1,i).setPropertyValue( "CharColor", RGB(255,0,0) )
ThisComponent.Sheets(0).GetCellByPosition(22,i).STRING = "F"
ElseIf ThisComponent.Sheets(0).GetCellByPosition(1,i).Value = ThisComponent.Sheets(3).GetCellRangeByName("A2").Value Then
ThisComponent.Sheets(0).GetCellByPosition(1,i).setPropertyValue( "CharColor", RGB(255,0,0) )
ThisComponent.Sheets(0).GetCellByPosition(22,i).STRING = "F"
End If
myctrl.value=i
Next i
Rem Ende Schleife 1
Rem Hier beginnt Schleife 2 für Spalte AC
myctrl=myDlg.getControl("ProgressBar2")
'Festsetzen des Maximalwertes
myctrl.model.ProgressValueMax=742
For i= 11 to 742
lblNext= MyDlg.getControl("Label4")
lblNext.Model.Label= Format((i-11)/7.31, 0) & " % fertiggestellt"
If Weekday(ThisComponent.Sheets(0).GetCellByPosition(28,i).value, vbMonday) = 1 Then
ThisComponent.Sheets(0).GetCellByPosition(28,i).setPropertyValue( "CharColor", RGB(255,0,0) )
ElseIf Weekday(ThisComponent.Sheets(0).GetCellByPosition(28,i).value, vbMonday) = 7 Then
ThisComponent.Sheets(0).GetCellByPosition(28,i).setPropertyValue( "CharColor", RGB(0,0,255) )
ElseIf ThisComponent.Sheets(0).GetCellByPosition(28,i).Value = ThisComponent.Sheets(3).GetCellRangeByName("A1").Value Then
ThisComponent.Sheets(0).GetCellByPosition(28,i).setPropertyValue( "CharColor", RGB(255,0,0) )
ElseIf ThisComponent.Sheets(0).GetCellByPosition(28,i).Value = ThisComponent.Sheets(3).GetCellRangeByName("A2").Value Then
ThisComponent.Sheets(0).GetCellByPosition(28,i).setPropertyValue( "CharColor", RGB(255,0,0) )
End If
myctrl.value=i
Next i
Rem Ende Schleife 2
Rem Endprozedur
Wait 2000
mydlg.endexecute()
Exit Sub
Fehler:
MsgBox "Fehler"
ThisComponent.Sheets(0).Protect("Kennwort")
End Sub
Zusätzlich zur Prozentanzeige soll auch die verstrichene Zeit angezeigt werden.
Und was das allgemeine Grundwissen betrifft. Das kann man nur haben, wenn man es gelernt hat. Aber gerade das mit dem Timer habe ich nicht gelernt. Ich lerne eigentlich jeden Tag was neues. Bisher habe ich zum Umformen immer nur
Format benutzt.
Re: Verstrichene Zeit
Verfasst: So, 03.08.2008 18:28
von turtle47
Hallo Zusammen,
Stephan hat geschrieben:Auch hat das alles (Umformung und Anzeige einer bekannten Rückgabe einer Funktion) nicht mit StarBasic-Spezialkenntnissen zu tun, sondern ist allgemeines Grundwissen für jede Art der Programmierung (z.B. auch VBA) (z.B. auch VBA)
Dann hat derjenige, der das Beispiel in der Onlinehilfe erstellt hat da was nicht mitbekommen denn
der Beispielcode hat einen gravierenden Fehler.
Am Anfang zeigen beide die gleiche Zeit an.

- Timer1.jpg (5.62 KiB) 3311 mal betrachtet
Aber dann:

- Timer2.jpg (5.63 KiB) 3311 mal betrachtet
Beim Überschreiten der 30-Sekundenmarke wird bei >Timer> einfach eine Minute hinzugezählt.
Genau so wie bei Überschreiten der 30-Minutenmarke wird vorne bei Stunde eine Stunde dazuaddiert.
So, und jetzt Zu Deinem Code Mumpel.
Wenn in dem Dialog direkt etwas ausgeführt werden soll, dann kann man diesen nicht mit
aufrufen, sondern mit:
Das ist auch in dem Beispiel mit der Progressbar so.

Also versuche mal folgenden Datei:
Übrigens ist das
dafür da um die Prozessorauslastung zu mindern.
Wenn man das "Wait 1000" rausnimmt steigt bei mir die Auslastung direkt auf 100% an!
Kommst Du jetzt damit weiter?
Jürgen
Re: Verstrichene Zeit
Verfasst: So, 03.08.2008 19:02
von mumpel
Bei Deinem Beispiel werden die Zeit und das Makro sofort gestartet. Genau das kann ich nicht nutzen, da das Makro nicht sofort ausgeführt werden soll. Erst wird der Dialog aufgerufen. Dann hat der Anwender die Möglichkeit abzubrechen oder das Makro auszuführen (Schaltfläche
Feiertage und Wochenenden jetzt einfärben). Nur wenn das Makro ausgeführt werden soll, dann soll auch der Timer starten. Setvisible funktioniert bei mir nicht.

- Dialog01.jpg (72.03 KiB) 3303 mal betrachtet
Das Dialog-aufrufende Makro:
Code: Alles auswählen
Sub Faerben
Dialoglibraries.Loadlibrary("lbrZeiten")
MyDlg= CreateUnoDialog(Dialoglibraries.lbrZeiten.Einfaerben)
MyDlg.execute()
End Sub
Wenn ich jetzt setvisible nutze, dann wird der Dialog gleich wieder geschlossen.
Re: Verstrichene Zeit
Verfasst: So, 03.08.2008 19:35
von turtle47
Auaaaaa, vor den Kopfhau.
Das geht, so glaube ich, alles so garnicht wie Du das vorhast.
Du musst alles in entsprechender Reihenfolge in eine Sub packen.
Warum?
Das ist ganz einfach.
Das Programm wird ja immer zeilenweise abgearbeitet.
Beispiel:
Start > Sub1 wird abgearbeitet bis Zeile 5 wo Sub2 aufgerufen wird.
Sub2 wird bis zum Ende abgearbeitet und es erfolgt der RücKsprung in Zeile 6 der Sub1.
Sub1 wird weiter bis zum Ende abgearbeitet.
Zwei oder mehr Subs parallel abarbeiten ist nicht möglich.
Bei Dir sind es ja schon 3 Subs die parallel laufen sollen.
1. Sub Timer
2. Sub ProgressBar
3. Sub Einfärben
Alles klar?