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

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

Moderator: Moderatoren

Stephan
********
Beiträge: 12369
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

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

Beitrag 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
Dateianhänge
Dialogtest.ods
(11.93 KiB) 127-mal heruntergeladen
erikafuchs
******
Beiträge: 690
Registriert: Di, 13.02.2007 17:38
Wohnort: Büttelborn

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

Beitrag 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
mikeleb
*******
Beiträge: 1316
Registriert: Fr, 09.12.2011 16:50

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

Beitrag 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.
Dateianhänge
Dialogtest.ods
(13.13 KiB) 150-mal heruntergeladen
Gruß,
mikeleb
Stephan
********
Beiträge: 12369
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

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

Beitrag 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
Stephan
********
Beiträge: 12369
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

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

Beitrag 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
mikeleb
*******
Beiträge: 1316
Registriert: Fr, 09.12.2011 16:50

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

Beitrag 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.
Gruß,
mikeleb
Antworten