Wie benutzt man in Basic PropertyChangeListener

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

Moderator: Moderatoren

regina
****
Beiträge: 181
Registriert: So, 30.07.2006 14:41

Wie benutzt man in Basic PropertyChangeListener

Beitrag 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

Zuletzt geändert von regina am Sa, 09.01.2010 15:13, insgesamt 1-mal geändert.
peterschleif
**
Beiträge: 34
Registriert: Fr, 06.11.2009 05:49

Re: Wie benutzt man in Basic PropertyChangeListener

Beitrag 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
regina
****
Beiträge: 181
Registriert: So, 30.07.2006 14:41

Re: Wie benutzt man in Basic PropertyChangeListener

Beitrag 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
peterschleif
**
Beiträge: 34
Registriert: Fr, 06.11.2009 05:49

Re: Wie benutzt man in Basic PropertyChangeListener

Beitrag 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
regina
****
Beiträge: 181
Registriert: So, 30.07.2006 14:41

Re: Wie benutzt man in Basic PropertyChangeListener

Beitrag 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
Antworten