Stopwatch
Stopwatch
Hallo,
Ik wil graag een stopwatch maken in mijn sheet.
Ik ben bekend met macro's en design mode.
Heeft iemand hier een oplossing voor.
Ik ben al een tijdje aan het surfen maar kan niets bruikbaars vinden.
Groetjes Benny
Ik wil graag een stopwatch maken in mijn sheet.
Ik ben bekend met macro's en design mode.
Heeft iemand hier een oplossing voor.
Ik ben al een tijdje aan het surfen maar kan niets bruikbaars vinden.
Groetjes Benny
open office 4.1.3
Re: Stopwatch
Feitelijk heb ik geen idee wat bedoelt wordt met het gevraagde. Maar wanneer ik zoek op het Engelse forum zie ik toch al snel enkele treffers. Probeer op het Engelse forum te zoeken met het bedoelde trefwoord. Wanneer je in het zoekresultaat ook een antwoord treft waar Villeroy aan heeft meegewerkt kom je al snel verder
Wat ook goed zou zijn als je al wat van de resultaten van je werkzaamheden zou tonen. Het zou kunnen dat maar zo iemand dat kan aanvullen.
Ik heb de vraag wat wil je de tijd van opnemen. Werk die vraag eens uit.
Romke
Wat ook goed zou zijn als je al wat van de resultaten van je werkzaamheden zou tonen. Het zou kunnen dat maar zo iemand dat kan aanvullen.
Ik heb de vraag wat wil je de tijd van opnemen. Werk die vraag eens uit.
Romke
LibreOffice 7.4.3.2 op openSUSE Leap 15.4
Re: Stopwatch
Ik ben met een sheet bezig waar ik wedstrijd resultaten bijhoud.
Ik vul nu handmatig de tijd in, maar wil dat automatisch doen.
Dus met een start knop tijd gaat lopen, finish knop tijd stopt en wordt in een cel geschreven.
Reset knop en tijd wordt weer op nul gezet.
Ik ben al bezig geweest met de tijd in een cel te zetten en even later in een andere cel de tijd te zetten en deze van elkaar afgetrokken.
In principe voldoet dit, maar ik wil een visuele meelopende klok.
Ik heb al op het Engelse forum, maar kan daar niets vinden.
Ik heb wel een voorbeeld gevonden van een countdown klok, maar deze is voor excel geschreven.
Lukt niet om deze code in openoffice te gebruiken.
Ik vul nu handmatig de tijd in, maar wil dat automatisch doen.
Dus met een start knop tijd gaat lopen, finish knop tijd stopt en wordt in een cel geschreven.
Reset knop en tijd wordt weer op nul gezet.
Ik ben al bezig geweest met de tijd in een cel te zetten en even later in een andere cel de tijd te zetten en deze van elkaar afgetrokken.
In principe voldoet dit, maar ik wil een visuele meelopende klok.
Ik heb al op het Engelse forum, maar kan daar niets vinden.
Ik heb wel een voorbeeld gevonden van een countdown klok, maar deze is voor excel geschreven.
Lukt niet om deze code in openoffice te gebruiken.
open office 4.1.3
Re: Stopwatch
Search • Apache OpenOffice Community Forum
Volgens mij staan daar ook iets bij waar je wel wat van kunt maken.
Search • Apache OpenOffice Community Forum
Romke
Volgens mij staan daar ook iets bij waar je wel wat van kunt maken.
Search • Apache OpenOffice Community Forum
Romke
LibreOffice 7.4.3.2 op openSUSE Leap 15.4
Re: Stopwatch
Ik heb je link bekeken.
Ik kan er helaas geen lopende stopwatch ( klok ) vinden met display in een veld of iets dergelijks.
Soms zie ik een uitvoer naar een MsgBox mesagebox , is dit ook te veranderen naar een cel.
Ik kan er helaas geen lopende stopwatch ( klok ) vinden met display in een veld of iets dergelijks.
Soms zie ik een uitvoer naar een MsgBox mesagebox , is dit ook te veranderen naar een cel.
open office 4.1.3
Re: Stopwatch
Search • Apache OpenOffice Community Forum
In dat kleine voorbeeld laat Villeroy veel zien. Het knippert iets maar wanneer je er meer tijd aan gaat besteden dan kan het ook wel beter worden. Met macro's kun je veel veranderen het is nog al moeilijk om het onder de knie te krijgen. Ik vind ook andere voorbeelden. Ik heb ook op dit moment geen idee hoe het te doen.
Nu wordt de berekening gedaan in het werkblad maar met enig moeite kun je ook dat in een macro doen. Je kan dan de zelfde manier gebruiken van adressering. Let wel Villeroy geeft eerst namen aan cellen in een werkblad en gebruikt die namen dan weer in een macro. Je kunt dat zelf ook doen.
PS Het had deze link moeten zijn.
[Calc] Coundown Timer (View topic) • Apache OpenOffice Community Forum
Romke
In dat kleine voorbeeld laat Villeroy veel zien. Het knippert iets maar wanneer je er meer tijd aan gaat besteden dan kan het ook wel beter worden. Met macro's kun je veel veranderen het is nog al moeilijk om het onder de knie te krijgen. Ik vind ook andere voorbeelden. Ik heb ook op dit moment geen idee hoe het te doen.
Nu wordt de berekening gedaan in het werkblad maar met enig moeite kun je ook dat in een macro doen. Je kan dan de zelfde manier gebruiken van adressering. Let wel Villeroy geeft eerst namen aan cellen in een werkblad en gebruikt die namen dan weer in een macro. Je kunt dat zelf ook doen.
PS Het had deze link moeten zijn.
[Calc] Coundown Timer (View topic) • Apache OpenOffice Community Forum
Romke
- Bijlagen
-
- countdown.ods
- Gemaakt door Villeroy van het Engelse Forum
- (15.56 KiB) 161 keer gedownload
LibreOffice 7.4.3.2 op openSUSE Leap 15.4
Re: Stopwatch
Hallo,
De code werkte niet helemaal.
Ik hem aangepast en werkt nu als countdown.
Ik moet countup hebben,maar dat is waarschijnlijk het een en ander aanpassen countup, start, stop en reset.
Dus nog even puzzelen.
Ik denk dat ik hiermee verder kan.
Hulp hierbij is erg welkom.
Aanpassing code
Moest spatie tussen n en time verwijderen naar nTime
De subroutine update werkt niet de waarde van nTime wordt niet doorgegeven. (Via monitor achter gekomen)
Heb de op de plaats van de aanroep gezet.
En ja hoor het werkt.
Aangepaste code.
De code werkte niet helemaal.
Ik hem aangepast en werkt nu als countdown.
Ik moet countup hebben,maar dat is waarschijnlijk het een en ander aanpassen countup, start, stop en reset.
Dus nog even puzzelen.
Ik denk dat ik hiermee verder kan.
Hulp hierbij is erg welkom.
Aanpassing code
Moest spatie tussen n en time verwijderen naar nTime
De subroutine update werkt niet de waarde van nTime wordt niet doorgegeven. (Via monitor achter gekomen)
Heb de op de plaats van de aanroep gezet.
En ja hoor het werkt.
Aangepaste code.
Code: Selecteer alles
Sub Countdown()
Doc = ThisComponent
Sheet = Doc.Sheets(0)
' ** Get Limit
strTime=Sheet.getCellRangeByName("m10").getString() ' the 1st change point to use a different cell
nTime=val(strTime)
nStartTime=Timer
nNewTime= nStartTime
Do Until nTime=0
Do while nStartTime=nNewTime
nNewTime=timer
Loop
nTime=nTime-1
nStartTime=nNewTime
rem Update
Doc = ThisComponent
Sheet = Doc.Sheets(0)
Cell = Sheet.getCellByPosition( 12,9) ' the second change point
Cell.string=str(nTime)
Loop
done ' you can get rid of this sub and put something more exciting in.
End Sub
' Sub Update ()
' Doc = ThisComponent
' Sheet = Doc.Sheets(0)
' Cell = Sheet.getCellByPosition( 12,9) ' the second change point
' Cell.string=str(nTime)
' End Sub
Sub done()
msgbox ("Out Of Time, Sorry",0,"Time UP")
End Sub
open office 4.1.3
Re: Stopwatch
Nog een vraagje.
Hoe kan ik een voorgaande macro in loop stoppen met b.v. Button "Stop"(aanroep macro ?)
Starten is geen probleem gewoon de macro aanroepen.
Hoe kan ik een voorgaande macro in loop stoppen met b.v. Button "Stop"(aanroep macro ?)
Starten is geen probleem gewoon de macro aanroepen.
open office 4.1.3
Re: Stopwatch
Ik begrijp niet wat de vraag is. Het is best mogelijk dat je een macro moet maken met enkel het woord end. Kijk in het geplaatste voorbeeld van Villeroy.
PS
Ik heb het voorbeeld van Villeroy iets aangepast.
Romke
PS
Ik heb het voorbeeld van Villeroy iets aangepast.
Romke
- Bijlagen
-
- countdownrpg01.ods
- Iets aangepast.
- (14.61 KiB) 169 keer gedownload
LibreOffice 7.4.3.2 op openSUSE Leap 15.4
Re: Stopwatch
Ik weet niet of je twee macro's parallel kunt draaien (zou wel moeten kunnen als je naar Java gaat, omdat Java multi threading is).Benny schreef:Nog een vraagje.
Hoe kan ik een voorgaande macro in loop stoppen met b.v. Button "Stop"(aanroep macro ?)
Starten is geen probleem gewoon de macro aanroepen.
Je kunt de start-macro dan gewoon laten draaien en dan via een stop-macro een 'global variable' omzetten zodat de start-macro stopt met tellen. Je zou dit kunnen testen door te proberen twee keer je start-macro te starten.
W11 21H2 (build 22000), LO 7.4.1.2(x64)
Het is Microsoft marketing die laat geloven dat computers geschikt zijn voor niet technici
Het is Microsoft marketing die laat geloven dat computers geschikt zijn voor niet technici
Re: Stopwatch
Hallo,
Ik denk inderdaad dat het aanroepen van een 2de macro om een ander te stoppen niet mogelijk is.
Er zal waarschijnlijk in de macro iets moeten komen die naar het indrukken van een button kijkt, of misschien naar een cel waar b.v. true of false in staat om de macro te stoppen.
RGP wil je de tekst van de macro op het forum zetten.
Ik kan namelijk het ods form niet openen, oppenoffice slaat dan vast.
Ik denk inderdaad dat het aanroepen van een 2de macro om een ander te stoppen niet mogelijk is.
Er zal waarschijnlijk in de macro iets moeten komen die naar het indrukken van een button kijkt, of misschien naar een cel waar b.v. true of false in staat om de macro te stoppen.
RGP wil je de tekst van de macro op het forum zetten.
Ik kan namelijk het ods form niet openen, oppenoffice slaat dan vast.
open office 4.1.3
Re: Stopwatch
Ik voeg hieronder de code toe. Er zitten nog wel enkele lijnen die ik er later ingevoegd heb. Ik ben aan het experimenteren geweest of ik een string kan toevoegen waar ik ook hondersten kan toe voegen. Het toevoegen van hondersten gaat nog niet.
Romke
Romke
Code: Selecteer alles
REM ***** BASIC *****
option explicit
' Namen gedefinieerd in het werkblad
const sNaarActieveSpeler="NaarActieveSpeler"
const sSpelers="Spelers" ' Dit is de naam van de lijst spelers
'Variables voor de macro's
dim nNaarActieveSpeler ' Wijst naar het getal wat komt als ik een speler selecteer
dim oSpelers
dim oNamedRanges
Dim Begintijd
dim oTimeSpeler
Sub startCountdown()
oNamedRanges=ThisComponent.NamedRanges
Begintijd=Now
nNaarActieveSpeler=oNamedRanges.getByName(sNaarActieveSpeler).getReferredCells.getvalue
oSpelers=oNamedRanges.getByName(sSpelers).getReferredCells
oTimeSpeler=oSpelers.getCellByPosition(1,nNaarActieveSpeler-1)
while True
'oTimeSpeler.setvalue(format((now-Begintijd),"HH:MM"))
oTimeSpeler.setvalue(CreateUnoValue( "double", (now-Begintijd)))
'print format((now-Begintijd),"hh:mm:ss.00")
wait 1000
wend
End Sub
Sub stopCountdown()
'oTimeSpeler.setvalue((now-Begintijd))
'oTimeSpeler.setvalue(format((now-Begintijd),"HH:MM"))
End
End Sub
LibreOffice 7.4.3.2 op openSUSE Leap 15.4
Re: Stopwatch
Dus er kan maar 1 macro draaien. Ik vermoed dat een macro 'modaal' draait: dus of macro krijgt tijd of gebruiker krijgt tijd om iets via UI te doen. Ik zou niet weten of je kunt pollen (kijken op een bepaald event plaats vindt en direct weer terug naar de macro).Benny schreef: Ik denk inderdaad dat het aanroepen van een 2de macro om een ander te stoppen niet mogelijk is.
Er zal waarschijnlijk in de macro iets moeten komen die naar het indrukken van een button kijkt, of misschien naar een cel waar b.v. true of false in staat om de macro te stoppen.
Wat je misschien wel zou kunnen gebruiken is een popup vanuit de macro die je moet aanklikken om je timing te stoppen, maar dan heb je geen teller die netjes oploopt.
Misschien dat een macro te stoppen is met Ctrl-C oid, dan moet je in de macro je cel waarde telkens ophogen totdat gebruiker op Ctrl-C drukt zodat de macro gestopt wordt. Ik weet ook niet of je zo'n keyboard event kunt afvangen in een macro.
Je moet voor deze complexiteit echt naar het Engels talige forum.
W11 21H2 (build 22000), LO 7.4.1.2(x64)
Het is Microsoft marketing die laat geloven dat computers geschikt zijn voor niet technici
Het is Microsoft marketing die laat geloven dat computers geschikt zijn voor niet technici
Re: Stopwatch
Wait in een macro legt gewoon het programma stil en dan kunnen andere macro's wel draaien. Villeroy demonstreert dat in zijn korte voorbeeld. Ik ben alleen zo vriendelijk om dat te kopieren voor Benny. Ik heb dat vroeger ook wel eens gebruikt voor een zoek actie in een macro die ook blijft kijken naar het toetsen bord.
Ik ben het Eremmel eens dat je voor echt diepgaande vragen aangaande macro's beter naar het Engelse forum kunt gaan.
Romke
Ik ben het Eremmel eens dat je voor echt diepgaande vragen aangaande macro's beter naar het Engelse forum kunt gaan.
Romke
LibreOffice 7.4.3.2 op openSUSE Leap 15.4
Re: Stopwatch
Ik ben toch nog een poosje door gegaan met het schrijven van een macro. Feitelijk had Villeroy al een mooi basis idee neergelegd. Ik heb dat wat meer uit gebreid. De verklaringen zitten meer in de macro code. Ik voeg de macro code ook los toe zodat ierdereen het ook gewoon kan lezen.
Romke
Romke
Code: Selecteer alles
REM ***** BASIC *****
option explicit
' Namen gedefinieerd in het werkblad
const sNaarActieveSpeler="NaarActieveSpeler"
const sSpelers="Spelers" ' Dit is de naam van de lijst spelers
const sLijstTussentijden="LijstTussentijden" ' Dit is de lijst van de ronde tijden
const sRondeTussentijden = "RondeTussentijden" ' Dit is de teller van de ronde tijden
'Taal gevoelige opdrachten
const sCurrenttime="now" ' Voor Engelse versie
'const sCurrenttime="Nu" ' Voor Nederlands
'Variables voor de macro's
'er is een lijst met deelnemers. In die lijst met komt ook de tijd te staan.
'In de macro kan dat gekoppeld wordt met een index.
dim oSpelers
'Uit die lijst wordt een kolom met namen gehaald. Die kolom wordt gebruikt in een
' een cel waar in een keuze is uit die namen.
' In de cel er naast wordt de index van die naam opgezocht.
dim nNaarActieveSpeler ' Wijst naar het getal wat komt als ik een speler selecteer
dim oNamedRanges ' Dit is een service in een spreadsheet.
' Voor klok tijden
Dim BeginTijd 'Dit is de begin waarde van de tijd. Het wordt gebruikt voor een enkele meting
' als ook voor de tussentijden. Het wordt dan aangepast.
dim Huidigetijd 'Wanneer de klok gestopt wordt dan wordt deze tijd in gesteld
'dim Huidigetijd2
dim Cumulatievetijden ' Dit wordt speciaal gebruikt voor tussentijden. Op deze manier kom ik aan de totaal tijd.
' Voor het programma
dim oTimeSpeler
dim oLijstTussentijden
dim oRondeTussentijden
dim oButtonTussentijd
dim fa ' function acces Ik kan nu de tijd met hondersten krijgen
sub main
loadlibraries
end sub
sub Tussentijden(oEvent)
' Maakt het mogelijk om de tijd op tehalen met hondersten
' Take the time as soon as possible
dim temp
temp = fa.CallFunction(sCurrenttime, Array()) ' DuurvanKlok
Huidigetijd=temp
' we stop the time and search for the time what is cumulatieve
dim tijdje
if oEvent.source.model.state then
'if state is true then we handle stop
tijdje=(Huidigetijd -begintijd)+ Cumulatievetijden
oLijstTussentijden.getCellByPosition(0,oRondeTussentijden.getvalue).setvalue(tijdje)
oRondeTussentijden.setvalue(oRondeTussentijden.getvalue+1)
oTimeSpeler.setvalue(Huidigetijd-begintijd+ Cumulatievetijden) ' Set here the time for the player
else
' We gaan weer opnieuw timen
Cumulatievetijden = oLijstTussentijden.getCellByPosition(0,(oRondeTussentijden.getvalue-1)).getvalue
end if
begintijd = temp
end sub
Sub startCountdown(oEvent)
' Maakt het mogelijk om de tijd op tehalen met hondersten
fa = CreateUnoService("com.sun.star.sheet.FunctionAccess")
' When you see here an error look at the beginning of the code.
' sCurrenttime must be a good value for your language in spreadsheet
' Wanneer hier een fout is opgetreden kijk er naar dat de sCurrentime is
' een opdracht voor de huidige tijd in jouw spreadsheet. Maak de verandering alleen boven in deze code
Begintijd = fa.CallFunction(sCurrenttime, Array())
'There we work with variables for the module we init here most variables for the module.
'BASIC is still running as long we pressed the stop button
' There we use the wait statement we can run other subs. while this sub is running.
' The timing does not depends on how much cycles we run. It is calculate from the system timer.
' We read the timer as soon as possible after pressing a button.
Cumulatievetijden=0
' Maakt het mogelijk om de tijd op tehalen met hondersten
' Take the time as soon as possible
'Huidigetijd = fa.CallFunction(sCurrenttime, Array()) ' DuurvanKlok
oNamedRanges=ThisComponent.NamedRanges 'for the service named ranges
oLijstTussentijden=oNamedRanges.getByName(sLijstTussentijden).getReferredCells
oRondeTussentijden=oNamedRanges.getByName(sRondeTussentijden).getReferredCells
if isempty(oLijstTussentijden)=false then
' we need to erase
oRondeTussentijden.setvalue(0) ' set value on zero
oLijstTussentijden.clearContents(2) ' delete values
end if
' We start here with a timing so reset the button
oButtonTussentijd=oEvent.source.model.parent.getbyname("Tussentijden")
oButtonTussentijd.reset
nNaarActieveSpeler=oNamedRanges.getByName(sNaarActieveSpeler).getReferredCells.getvalue
oSpelers=oNamedRanges.getByName(sSpelers).getReferredCells ' Pak de lijst van active spelers
oTimeSpeler=oSpelers.getCellByPosition(1,nNaarActieveSpeler-1)
while True
' We need this
'beep
if oButtonTussentijd.state =false then oTimeSpeler.setvalue(DuurvanKlok)
wait 100 ' Iedere tiende seconde wordt het getoond. Maar er wordt gemeten in hondersten
wend
End Sub
Sub stopCountdown()
if isempty(begintijd) = false then
' Timer is running but must be stopped
if oButtonTussentijd.state = 0 then
oTimeSpeler.setvalue(DuurvanKlok)
end if
end if
End ' Here we stop BASIC
End Sub
function DuurvanKlok
dim temp
temp = fa.CallFunction(sCurrenttime, Array())
temp = temp - Begintijd + Cumulatievetijden
DuurvanKlok = temp
end function
- Bijlagen
-
- countdownrpg06.ods
- Iets meer uitgewerkt stopwatch
- (20.05 KiB) 164 keer gedownload
LibreOffice 7.4.3.2 op openSUSE Leap 15.4
Re: Stopwatch
Hallo Romke,
Je maak er wel veel werk van. Bedankt daarvoor.
Klopt het dat ik op het werkblad geen lopende tijd heb? Dat is wat ik namelijk zoek.
Ik heb al wat werkend, maar loopt alleen met hele seconden.
Ik kan de klok nu stoppen met het vogende
Cel = Blad.getCellByPosition(1, 0) 'Als cel b1 een 1 heeft stopt de macro
if Cel.Value = 1 then end
De retour waarde is helaas ook hele sec en wil deze in honderdsten. In de macro wordt namelijk elke sec een teller opgehoogd. Door gebruik van de functie "timer"
Dat de display klok in hele seconden loopt is niet zo probleem, alleen na stoppen wil ik de tijd in honderdsten.
De echte tijden heb ik voor mekaar met het aftrekken van de Now tijden. Gewoon in de sheet met start en stop macro.
Waar ik nu mee bezig ben is de display klok na het stoppen te overschrijven met de berekende tijd.
Ik ga je programma goed bekijken of ik wat uit kan halen.
Groetjes Ben
Je maak er wel veel werk van. Bedankt daarvoor.
Klopt het dat ik op het werkblad geen lopende tijd heb? Dat is wat ik namelijk zoek.
Ik heb al wat werkend, maar loopt alleen met hele seconden.
Ik kan de klok nu stoppen met het vogende
Cel = Blad.getCellByPosition(1, 0) 'Als cel b1 een 1 heeft stopt de macro
if Cel.Value = 1 then end
De retour waarde is helaas ook hele sec en wil deze in honderdsten. In de macro wordt namelijk elke sec een teller opgehoogd. Door gebruik van de functie "timer"
Dat de display klok in hele seconden loopt is niet zo probleem, alleen na stoppen wil ik de tijd in honderdsten.
De echte tijden heb ik voor mekaar met het aftrekken van de Now tijden. Gewoon in de sheet met start en stop macro.
Waar ik nu mee bezig ben is de display klok na het stoppen te overschrijven met de berekende tijd.
Ik ga je programma goed bekijken of ik wat uit kan halen.
Groetjes Ben
open office 4.1.3
Re: Stopwatch
Macro's programmeren in OOo is wat anders dan BASIC code schrijven. Je moet moet voor macro's in OOo een gedegen kennis hebben van de normale werking van OpenOffice. Ook een gedegen kennis van OOo-BASIC is noodzakelijk. maar dat is nog maar eenvoudig. Daarna komt ook nog een goede kennis van de API.
Ik vergeet nog dat kennis over programmeren natuurlijk ook noodzakelijk is. Ik denk dat een paar dagen zoeken op het Engelse forum je meer zal leren dan de code waar je nu mee bezig bent.
Probeer wat te leren van de mensen die kennis,Villeroy, MrProgrammer, hebben en pak niet de slechte voorbeelden van mensen die er zelf niet uitgekomen zijn.
Romke
Ik vergeet nog dat kennis over programmeren natuurlijk ook noodzakelijk is. Ik denk dat een paar dagen zoeken op het Engelse forum je meer zal leren dan de code waar je nu mee bezig bent.
Probeer wat te leren van de mensen die kennis,Villeroy, MrProgrammer, hebben en pak niet de slechte voorbeelden van mensen die er zelf niet uitgekomen zijn.
Romke
LibreOffice 7.4.3.2 op openSUSE Leap 15.4
Re: Stopwatch
Ik heb nog wat veranderd. Het laat naar mijn idee nog beter zien waar macro's voor bedoeld zijn. Namelijk het doen van iets kleins wat niet op een normale manier gedaan kan worden en het andere allemaal met standaard opdrachten. Het zou best kunnen dat het geheel wel allemaal op een enkel werkblad gedaan moet. Wel kun je sommige bereiken verplaatsen. Als het bereik van de naam wordt veranderd zal alles waarschijnlijk zonder problemen werken. Wat niet veranderd automatisch kan worden is de positie van de relatieve kolom.
Romke
Romke
- Bijlagen
-
- countdownrpg10.ods
- Nog iets aangepast
- (17.78 KiB) 153 keer gedownload
LibreOffice 7.4.3.2 op openSUSE Leap 15.4