Verstrichene Zeit

Programmierung unter AOO/LO (StarBasic, Python, Java, ...)

Moderator: Moderatoren

mumpel
****
Beiträge: 133
Registriert: So, 22.08.2004 05:27
Wohnort: Lindau (B)
Kontaktdaten:

Verstrichene Zeit

Beitrag 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!

Windows 7 Home Premium (auf Acer Desktop PC)
Windows 8 Professional (auf Microsoft Surface Pro 3).
MSO 365 Home Premium
LibreOffice 4.2.
F-Secure Internet Security
turtle47
*******
Beiträge: 1849
Registriert: Mi, 04.01.2006 20:10
Wohnort: Rheinbach

Re: Verstrichene Zeit

Beitrag von turtle47 »

Hi René,

guckst Du mal hier

Jürgen
Software hat keinen Verstand - benutze deinen eigenen...!

Win 7 SP1/ LibreOffice 3.4.2 OOO340m1 (Build:203) / Firefox 15.0.1 / Notebook ASUS K70IO 64 Bit-Betriebssytem
mumpel
****
Beiträge: 133
Registriert: So, 22.08.2004 05:27
Wohnort: Lindau (B)
Kontaktdaten:

Re: Verstrichene Zeit

Beitrag 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.

Windows 7 Home Premium (auf Acer Desktop PC)
Windows 8 Professional (auf Microsoft Surface Pro 3).
MSO 365 Home Premium
LibreOffice 4.2.
F-Secure Internet Security
Stephan
********
Beiträge: 12368
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: Verstrichene Zeit

Beitrag 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
mumpel
****
Beiträge: 133
Registriert: So, 22.08.2004 05:27
Wohnort: Lindau (B)
Kontaktdaten:

Re: Verstrichene Zeit

Beitrag 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.

Windows 7 Home Premium (auf Acer Desktop PC)
Windows 8 Professional (auf Microsoft Surface Pro 3).
MSO 365 Home Premium
LibreOffice 4.2.
F-Secure Internet Security
Stephan
********
Beiträge: 12368
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: Verstrichene Zeit

Beitrag 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
mumpel
****
Beiträge: 133
Registriert: So, 22.08.2004 05:27
Wohnort: Lindau (B)
Kontaktdaten:

Re: Verstrichene Zeit

Beitrag 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.

Windows 7 Home Premium (auf Acer Desktop PC)
Windows 8 Professional (auf Microsoft Surface Pro 3).
MSO 365 Home Premium
LibreOffice 4.2.
F-Secure Internet Security
Stephan
********
Beiträge: 12368
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: Verstrichene Zeit

Beitrag 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:

Code: Alles auswählen

Dim x As Long
y = x
Do
  x = Timer
  z = x - y
Loop
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
mumpel
****
Beiträge: 133
Registriert: So, 22.08.2004 05:27
Wohnort: Lindau (B)
Kontaktdaten:

Re: Verstrichene Zeit

Beitrag 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.

Windows 7 Home Premium (auf Acer Desktop PC)
Windows 8 Professional (auf Microsoft Surface Pro 3).
MSO 365 Home Premium
LibreOffice 4.2.
F-Secure Internet Security
turtle47
*******
Beiträge: 1849
Registriert: Mi, 04.01.2006 20:10
Wohnort: Rheinbach

Re: Verstrichene Zeit

Beitrag von turtle47 »

Sorry bin auf dem Sprung.
Erklärung später wenn erforderlich.
Timer.ods
(10.33 KiB) 183-mal heruntergeladen
Software hat keinen Verstand - benutze deinen eigenen...!

Win 7 SP1/ LibreOffice 3.4.2 OOO340m1 (Build:203) / Firefox 15.0.1 / Notebook ASUS K70IO 64 Bit-Betriebssytem
Stephan
********
Beiträge: 12368
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: Verstrichene Zeit

Beitrag 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
mumpel
****
Beiträge: 133
Registriert: So, 22.08.2004 05:27
Wohnort: Lindau (B)
Kontaktdaten:

Re: Verstrichene Zeit

Beitrag 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.

Windows 7 Home Premium (auf Acer Desktop PC)
Windows 8 Professional (auf Microsoft Surface Pro 3).
MSO 365 Home Premium
LibreOffice 4.2.
F-Secure Internet Security
turtle47
*******
Beiträge: 1849
Registriert: Mi, 04.01.2006 20:10
Wohnort: Rheinbach

Re: Verstrichene Zeit

Beitrag 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
Timer1.jpg (5.62 KiB) 3301 mal betrachtet
Aber dann:
Timer2.jpg
Timer2.jpg (5.63 KiB) 3301 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. :shock:

So, und jetzt Zu Deinem Code Mumpel.
Wenn in dem Dialog direkt etwas ausgeführt werden soll, dann kann man diesen nicht mit

Code: Alles auswählen

myDlg.execute
aufrufen, sondern mit:

Code: Alles auswählen

myDlg.setvisible(True)
Das ist auch in dem Beispiel mit der Progressbar so. :o
Also versuche mal folgenden Datei:
Timer_Neu.ods
(10.3 KiB) 123-mal heruntergeladen
Übrigens ist das

Code: Alles auswählen

Wait 1000
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
Software hat keinen Verstand - benutze deinen eigenen...!

Win 7 SP1/ LibreOffice 3.4.2 OOO340m1 (Build:203) / Firefox 15.0.1 / Notebook ASUS K70IO 64 Bit-Betriebssytem
mumpel
****
Beiträge: 133
Registriert: So, 22.08.2004 05:27
Wohnort: Lindau (B)
Kontaktdaten:

Re: Verstrichene Zeit

Beitrag 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
Dialog01.jpg (72.03 KiB) 3293 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.

Windows 7 Home Premium (auf Acer Desktop PC)
Windows 8 Professional (auf Microsoft Surface Pro 3).
MSO 365 Home Premium
LibreOffice 4.2.
F-Secure Internet Security
turtle47
*******
Beiträge: 1849
Registriert: Mi, 04.01.2006 20:10
Wohnort: Rheinbach

Re: Verstrichene Zeit

Beitrag 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?
Software hat keinen Verstand - benutze deinen eigenen...!

Win 7 SP1/ LibreOffice 3.4.2 OOO340m1 (Build:203) / Firefox 15.0.1 / Notebook ASUS K70IO 64 Bit-Betriebssytem
Antworten