Keine Werbeeinblendungen für registrierte User

  ❤ Jede SPENDE hilft unserer Community ❤


  🌹 Danke für Eure Unterstützung 🙏



  📲 Zum Smartphone Forum📱


alternerierender Timer / Puls

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

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) 280 mal betrachtet

mikele
Beiträge: 1202
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.

Antworten