Seite 1 von 1

Wie benutzt man in Basic PropertyChangeListener

Verfasst: Do, 07.01.2010 22:41
von regina
Hallo,

ich lerne gerade mit Listenern umzugehen, zum Beispiel KeyHandler klappen. Aber einen PropertyChangeListener bekomme ich nicht hin. Eigentlich sollte auf Änderung des Zoom-Wertes reagiert werden. In XRay ist ZoomValue auch als 'value change may be listened' gekennzeichnet. Vielleicht erkennt ja jemand meinen Fehler. (Das Ganze benötige ich in Draw.)

mfG
Regina

Code: Alles auswählen

Global oCurrentController as object
Global oListener as object
Global sProperty as string

sub startListener
dim sListenerName as string: sListenerName = "com.sun.star.beans.XPropertyChangeListener"
oListener = CreateUnoListener( "myChangeListener_", sListenerName )
dim oDocument as variant: oDocument = ThisComponent
oCurrentController = oDocument.getCurrentController()
sProperty = "ZoomValue"
oCurrentController.addPropertyChangeListener(sProperty,oListener)
end sub

sub stopListener
oCurrentController.removePropertyChangeListener(sProperty,oListener)
end sub

Sub myChangeListener_disposing(oEvt)
    MsgBox "myChangeListerner disposing"
End Sub

Sub myChangeListener_propertyChange(oEvt)
	MsgBox "propertyChange"
	msgbox "PropertyName= " + oEvt.PropertyName
	MsgBox oEvt.Dbg_Properties
End Sub


Re: Wie benutzt man in Basic PropertyChangeListener

Verfasst: Sa, 09.01.2010 13:19
von peterschleif
Hallo Regina.

Ich kann in deinem Code keinen Fehler erkennen – mit Ausnahme der falschen Variablen ganz am Schluss: oEvent statt oEvt. Fällt aber nicht auf, weil die Verarbeitungs-Routine ja gar nicht aufgerufen wird. Seltsamerweise funktioniert dein Code (mit der kleinen oEvent/oEvt-Korrektur) in Calc problemlos. Scheint wohl irgendwie an Draw zu liegen. :(

Peter

Re: Wie benutzt man in Basic PropertyChangeListener

Verfasst: Sa, 09.01.2010 15:19
von regina
Hallo Peter,

danke fürs Testen. Auf die Idee, das Ganze mal in Calc zu probieren, bin ich gar nicht gekommen. In Calc wird die Routine zwar aufgerufen, aber außer Source sind alle Eventeigenschaften leer. Ich habe es jetzt auch in Writer und Impress probiert. Dort wird wie in Draw, das Ereignis gar nicht ausgelöst. Es scheint wohl nicht ein einfacher Fehler zu sein. Ich frage mal in der API-Mailingliste.
(oEvent --> oEvt habe ich geändert.)

mfG
Regina

Re: Wie benutzt man in Basic PropertyChangeListener

Verfasst: Sa, 09.01.2010 15:39
von peterschleif
regina hat geschrieben:[...] aber außer Source sind alle Eventeigenschaften leer.
Jepp. Obwohl oEvt sogar eine Eigenschaft "NewValue" hat. Aber mit oEvt.Source.ZoomValue kommt man an den Wert.
regina hat geschrieben:Ich frage mal in der API-Mailingliste.
Würde mich auch interessieren, wieso es in Calc klappt, aber in Draw nicht. Kannst Du ein kurzes Feedback posten? Vielen Dank.

Peter

Re: Wie benutzt man in Basic PropertyChangeListener

Verfasst: So, 10.01.2010 11:09
von regina
Hallo Peter,

der Thread auf der api-Liste ist in http://api.openoffice.org/servlets/Brow ... to=2326032. Die letzte Antwort von Bernhard enthält auch Basic-Code zum Testen.

Wesentliche Ergebnisse:
Eine Property hat einen Teil "Attribute", das die Eigenschaften beschreibt.http://api.openoffice.org/docs/common/r ... ibute.html
Wenn man in Xray die Anzeige auf Details schaltet, wird der Wert rechts angezeigt. Ansonsten kann man ihn über getPropertSetInfo erfragen oder im Watch-Fenster der IDE nachschauen.
Eine Property, bei der Attribute den Wert BOUND enthält, sollte bei Änderung ein PropertyChange-Ereignis auslösen.

Speziell bezüglich "ZoomValue" sieht es so aus, dass nur das Verhalten in Writer in Ordnung ist. In Calc hat "ZoomValue" nicht die Eigenschaft BOUND, löst bei Änderung des Zooms aber trotzdem aus. In Draw/Impress hat "ZoomValue" die Eigenschaft BOUND, löst aber nicht aus. Eigentlich müsste man dafür einen Issue schreiben. Ich bin mir aber nicht sicher, ob es sich lohnt. Ich hatte "ZoomValue" ja auch nur benutzt, um überhaupt mal mit einem PropertyChangeListener zu arbeiten.

mfG
Regina