Keine Werbeeinblendungen für registrierte User

❤ SPENDEN Sie jetzt für das ❤
🙏 LibreOffice Forum 🙏



  🌹 Danke für Ihre Unterstützung 🌹


[gelöst] alternerierender Timer / Puls

Alles zur Programmierung im LibreOffice.
Antworten
Makromador
Beiträge: 10
Registriert: Fr 18. Dez 2015, 13:01
Kontaktdaten:

[gelöst] alternerierender Timer / Puls

Beitrag von Makromador » Di 9. Mär 2021, 20:12

Hallo,

versuche gerade einen alternierenden Timer zu programmieren. Der hierfür benutzte Serviçe ist ein asynchroner Callback, also ein Rücksprung, bei dem auch laufende Anwendungen umgangen werden können.
Das funktioniert auch ganz wie gewünscht bis zum 2. Aufruf der notify()-Prozedur. Dann ruft sich diese nicht mehr selbst auf. Oder anders formuliert, nachdem der Wert für die Variable cnt = 2 erreicht wurde, zählt der Timer scheinbar nicht mehr weiter.

Woran kann das liegen? Jeder Hinweis willkommen.

Dazu habe ich ein Beispiel programmiert, mit dem man es testen kann. Mann muss sich nur einen Dialog (Dialog1)mit einem Label (Label1) zusammenbauen und kann das testen.

Code: Alles auswählen

Option Explicit

Dim cnt 
Dim oDlg

Dim	oASync
Dim	oCallback
	
sub testtimer

	cnt = 0

	oDlg = CreateUnoDialog(GlobalScope.DialogLibraries.Test.Dialog1)

	oASync = CreateUnoService ("com.sun.star.awt.AsyncCallback")
	oCallback = CreateUnoListener ("Callback_", "com.sun.star.awt.XCallback")
	oASync.addCallback(oCallback, "Pos")
	
	oDlg.getControl("Label1").Text = "Status: " & cnt
	oDlg.execute()
	
end sub

Sub Callback_notify(aData)
	
	If aData = "Pos" Then
		wait(1000)
		cnt = cnt+1
		oDlg.getControl("Label1").Text = "Status: " & cnt		
		oCallback.notify("Neg")
	ElseIf aData = "Neg" Then
		wait(1000)
		cnt = cnt+1
		oDlg.getControl("Label1").Text = "Status: " & cnt
		oCallback.notify("Pos")
	End If
	
End Sub
Bereits vielen Dank für die Unterstützung

Makromador
Dateianhänge
Timer.png
Timer.png (14.77 KiB) 1030 mal betrachtet
Zuletzt geändert von Makromador am Di 14. Jun 2022, 10:25, insgesamt 1-mal geändert.

mikele
Beiträge: 1406
Registriert: Mo 1. Aug 2011, 20:51

Re: alternerierender Timer / Puls

Beitrag von mikele » Sa 3. Apr 2021, 17:13

Hallo,
so zählt er ewig weiter

Code: Alles auswählen

Sub Callback_notify(aData as string)
	dim tmp as string
	If aData = "Pos" Then
		wait(1000)
		cnt = cnt+1
		oDlg.getControl("Label1").Text = "Status: " & cnt		
		tmp="Neg"
	Else 
		wait(1000)
		cnt = cnt+1
		oDlg.getControl("Label1").Text = "Status: " & cnt
		tmp="Pos"
	End If
	oASync.addCallback(oCallback, tmp)
	
End Sub
Gruß,
mikele

Solarman
Beiträge: 4
Registriert: Sa 23. Jan 2021, 03:15

Re: alternerierender Timer / Puls

Beitrag von Solarman » Do 8. Apr 2021, 16:37

Thx for the snipped.

btw: if you change oDlg.execute() to oDlg.setVisible(True), then you can continue working on the spreadsheet while the counting goes on.

Makromador
Beiträge: 10
Registriert: Fr 18. Dez 2015, 13:01
Kontaktdaten:

Re: alternerierender Timer / Puls

Beitrag von Makromador » Di 14. Jun 2022, 10:12

Auch wenn nun einige Zeit vergangen ist. Super, Danke für die Lösung. Das hilft mir weiter.

Antworten