Seite 1 von 1

WAIT() bei com.sun.star.awt.XMouseListener

Verfasst: Di, 25.02.2020 07:46
von Stephan
Hallo,

ich erzeuge einen Dialog mit Label-FEldern zur Laufzeit und registriere für jedes Labelfeld einen Listener:

Code: Alles auswählen

'...
oListener = CreateUnoListener("CheckAction_", "com.sun.star.awt.XMouseListener")

'...

With oDialog1
  '...
  .getControl("Test" & nummer).addMouseListener(oListener)
End With

'...

Sub CheckAction_mouseEntered(rueck)
	Dim s1
	Dim akt_i
	Dim fvh
	Dim ctr
	
	rueck.Source.Model.Border = 2
	
	For i = 0 To UBOUND(Colors())
		If rueck.Source.Model.BackgroundColor = sv.getByName(Colors(i)) Then
			fvh = Colors(i)
			Exit For
		End If
	Next i

	
	oDialog1.Title = fvh 'rueck.Source.Model.BackgroundColor

End Sub

Sub CheckAction_mouseExited( oEvent As Object )
	oEvent.Source.Model.Border = 1
End Sub

Sub CheckAction_mouseReleased( oEvent As Object )
End Sub

Sub CheckAction_mousePressed( oEvent As Object )
	Wait 3000
	oDialog1.Title = oEvent.Source.Model.BackgroundColor
End Sub

Leider wird "Wait 3000" in CheckAction_mousePressed nicht beachtet bzw. ausgeführt.


Wie erzwinge ich eine Pause/Verzögerung nach dem Mausklick?



Gruß
Stephan

Re: WAIT() bei com.sun.star.awt.XMouseListener

Verfasst: Mi, 26.02.2020 17:09
von erikafuchs
Lieber Stephan,
vielleicht hilft es Dir weiter. Ich hatte das Problem auch. Beim Klick auf "nächste Aufgabe" in einem Dialog wollte ich den Dialog kurz ausblenden:

Code: Alles auswählen

sub AufgWeiter
	dDialog.SetVisible(false)
print
	wait 3000
print
	dDialog.SetVisible(true)
	z=-2
	AWeiter=1
end sub
das Programm wird auch bei mir hier nicht für 3 Sekunden angehalten (sieht man bei print/print). Ich musste das anders lösen (hat aber auch noch nicht zuverlässig geklappt. Ich habe es auf eine do .. loop Schleife zurückgeführt (die bei Dir ja auch da ist). Da ist einmal diese:

Code: Alles auswählen

  	do while not aWeiter
	    wait 100
	loop
	Aweiter=0
.. die funktioniert zusammen mit dem Aweiter=1
Es gibt bei mir aber noch eine Schleife:

Code: Alles auswählen

		dDialog.SetVisible(false)
		oDialog.setVisible(True)
		aweiter=0
		z=-2
		DialogeAuf=1
		do while DialogeAuf
			dDialog.getControl("Stoppuhr").text=z
			if z>=0 then dDialog.SetVisible(True)
			wait 1000
			z=z+1
		loop
		dDialog.SetVisible(false)
		oDialog.setVisible(false)
... das funktioniert und zeigt sogar ab z=0 eine Stoppuhr an ... meistens (leider nicht zuverlässig). Ich sehe aber das Problem in diesen do ... loop Schleifen.
... vielleicht hilft es Dir was

Re: WAIT() bei com.sun.star.awt.XMouseListener

Verfasst: Mi, 26.02.2020 21:33
von mikeleb
Hallo,
ich weiß zwar nicht warum, aber wenn du die Dialogvariable als Global deklarierst klappt es. Für das Beenden des Dialogs kommst du dann auch ohne die Variable beenden aus.

Re: WAIT() bei com.sun.star.awt.XMouseListener

Verfasst: Do, 27.02.2020 09:38
von Stephan
das funktioniert und zeigt sogar ab z=0 eine Stoppuhr an ... meistens (leider nicht zuverlässig).
es braucht für meine Zwecke keine genaue Zeitmessung, nur etwas Verzögerung


Gruß
Stephan

Re: WAIT() bei com.sun.star.awt.XMouseListener

Verfasst: Do, 27.02.2020 09:39
von Stephan
ich weiß zwar nicht warum, aber wenn du die Dialogvariable als Global deklarierst klappt es.
das ist sehr interessant und war mir selbst nicht aufgefallen. Danke.


Gruß
Stephan

Re: WAIT() bei com.sun.star.awt.XMouseListener

Verfasst: Do, 27.02.2020 12:42
von mikeleb
Hallo,
interessant ist auch folgendes: Ich hatte zwischendurch mal GetSystemTicks() in die Sub eingebaut. Dann wird die Sub zum mousepressed-ereignis irgendwie gar nicht mehr abgearbeitet. Ich vermute mal, dass sich dann intern verschiedene Ereignisse gegenseitig blockieren oder aufheben.