Fortlaufende, sich selbst aktualisierende Zeit

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

Moderator: Moderatoren

Gert Seler
*******
Beiträge: 1763
Registriert: Di, 03.10.2006 18:05

Re: Fortlaufende, sich selbst aktualisierende Zeit

Beitrag von Gert Seler »

Hallo Alex,
zeigt Dein "Betriebssystem" keine Uhrzeit an? Mein "MS-XP" stellt das automatisch in die "Fußleiste".
Vielleicht funktioniert das auch bei Deinem "BS".

Sonst geht es nur über "Ooo_Basic-Schiene" anderes Forum siehe "Forenübersicht".

mfg
Gert
Es gibt nichts gutes, außer man tut es.
Win7_64 / LO_4.4.5.2
Karolus
********
Beiträge: 7431
Registriert: Mo, 02.01.2006 19:48

Re: Fortlaufende, sich selbst aktualisierende Zeit

Beitrag von Karolus »

Hallo
Was genau willst du denn rechnen?
=JETZT() wird sich stets von selber aktualisieren, sobald du irgendwo in der Tabelle eine Änderung vornimmst.

Gruß Karo
LO7.4.7.2 debian 12(bookworm) auf Raspberry4b 8GB (64bit)
LO7.6.2.1 flatpak debian 12(bookworm) auf Raspberry4b 8GB (64bit)
Karolus
********
Beiträge: 7431
Registriert: Mo, 02.01.2006 19:48

Re: Fortlaufende, sich selbst aktualisierende Zeit

Beitrag von Karolus »

Hallo
Gut das du dazuschreibst: "im Rahmen von Flugsimulation " anderenfalls hätte ich darüber nachgedacht noch jemals in einen Flieger zu steigen. :shock:

Ich hab quick & dirty die Aktion "neu berechnen" aufgezeichnet und in eine 'do ... loop' -schleife gesteckt, ausserdem wird das Makro noch abgebrochen falls der Wert in A1 der ersten Tabelle 1 beträgt.
Das kann man sicher auch noch eleganter lösen, hab ich aber gerade keine Lust dazu.

Code: Alles auswählen

sub Neu_berechnen 

dim document   as object
dim dispatcher as object
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

do until thiscomponent.sheets(0).getcellbyposition(0,0).value = 1 'Abruchbedingung A1 = 1
	dispatcher.executeDispatch(document, ".uno:Calculate", "", 0, Array())
	wait 10000  'Wartezeit 10 Sekunden
loop

end sub
Gruß Karo
LO7.4.7.2 debian 12(bookworm) auf Raspberry4b 8GB (64bit)
LO7.6.2.1 flatpak debian 12(bookworm) auf Raspberry4b 8GB (64bit)
Karolus
********
Beiträge: 7431
Registriert: Mo, 02.01.2006 19:48

Re: Fortlaufende, sich selbst aktualisierende Zeit

Beitrag von Karolus »

Hallo
Genau so, erstelle ein neues Modul 'unterhalb' des Dokuments und kopiere den Quelltext in das per 'Bearbeiten' geöffnete Modul.
Starten kannst du es über den grünen Pfeil im Basicfenster oder auch über -->Extras-->Makros-->BasicMakros...'Ausführen'
oder auch per Tastatushortcut ( -->Extras--Anpassen--Tastatur )

Gruß Karo
LO7.4.7.2 debian 12(bookworm) auf Raspberry4b 8GB (64bit)
LO7.6.2.1 flatpak debian 12(bookworm) auf Raspberry4b 8GB (64bit)
Gert Seler
*******
Beiträge: 1763
Registriert: Di, 03.10.2006 18:05

Re: Fortlaufende, sich selbst aktualisierende Zeit

Beitrag von Gert Seler »

Hallo Alex,
die Zahl 40158,45 besagt, das seit dem 30-12-1899(Referenz_Datum) 40158Tage vergangen sind. Da 1Tag=24Std. beinhaltet, ergibt die
Uhrzeit 11:40 die DezZahl 0,486 vom Tag. Die Uhrzeit 12:00 ist der halbe Tag (0,5 ); 8:00 =0,333..;16:00=0,666.. usw.



Weitere Erklärungen zur Berechnung von Datum & Zeit findest Du hier:
http://www.ooowiki.de/CalcFunktionenDat ... tumUndZeit

mfg
Gert
Es gibt nichts gutes, außer man tut es.
Win7_64 / LO_4.4.5.2
Uli2222
Beiträge: 3
Registriert: So, 01.06.2014 15:46

Re: Fortlaufende, sich selbst aktualisierende Zeit

Beitrag von Uli2222 »

Ich hatte dieses Problem auch, dass ich eine laufende Uhr in einem Calc-Dokument gebraucht habe und nicht wollte, dass ständig Zellneuberechnungen durchgeführt werden.
Dann bin ich darauf gekommen, einen Trigger einzuführen. Die Triggerzelle des Uhrenblatts springt jede Sekunde (Wait 1000) von 0 nach 1 und wieder zurück.
Damit Calc gezwungen wird, die Displayzelle bei Veränderung des Triggers neu zu berechnen, stelle ich sie mit der Verkettenfunktion dar und füge einen leeren String ("") aus der Platzhalterzelle hinzu. Diese wiederum wird abhängig vom Wert der Triggerzelle immer neu berechnet (bleibt aber immer "").
Damit die Uhr immer wieder geeicht wird und nicht falschläuft, gibt es eine zweite Schleife die mittels des Calculate Befehle alle 50 Durchläufe (frei einstellbar) die Uhr mit der Systemzeit synchronisiert.
Um das Makro zu stoppen habe ich noch einen Unterbrecher eingeführt
Damit das Dokument nicht unter laufendem Makro beendet/gespeichert wird, sollte man das 2. Makro (s.u) an die entsprechenden Ereignisse knüpfen.

Code: Alles auswählen

sub Uhr
rem Variablen und Anfangsbedingungen setzten------
mydoc = thiscomponent
mySheet = myDoc.Sheets().getByName("Display")
trigger = mysheet.getCellRangeByName("$F$4") rem Triggerzelle
clockstop = mysheet.getCellRangeByName("$I$4") rem Unterbrecherzelle
clockstop.value=0 rem Unterbrecherzelle null setzen
rem ----------------------------------------------------------------------
    do rem äussere Schleife zur Zellenneuberechnung/Systemzeitabgleich (50 Durchläufe bis zur nächsten Sync)
        for i = 1 to 50 rem innere Schleife zur Zeittriggerung 
        if clockstop.value <> 0 Then exit do rem Stopbedingung abfragen
        trigger.value = 0 rem Trigger im Sekundentakt zwischen null und 1 springen lassen (Wait 1000 ist ca 1 sec)
        wait 1000
        trigger.value = 1
        wait 1000
        next i
    thiscomponent.calculate 
    loop
clockstop.value=0 rem Unterbrecher rücksetzen

end sub

sub alle_Markros_beenden
end 
end sub

Dateianhänge
Uhr.ods
(11.58 KiB) 343-mal heruntergeladen
Antworten