Wie benutzt man in Basic PropertyChangeListener

Antwort erstellen


BBCode ist eingeschaltet
[img] ist ausgeschaltet
[url] ist eingeschaltet
Smileys sind ausgeschaltet

Die letzten Beiträge des Themas
   

Ansicht erweitern Die letzten Beiträge des Themas: Wie benutzt man in Basic PropertyChangeListener

Re: Wie benutzt man in Basic PropertyChangeListener

von regina » So, 10.01.2010 11:09

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

Re: Wie benutzt man in Basic PropertyChangeListener

von peterschleif » Sa, 09.01.2010 15:39

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

von regina » Sa, 09.01.2010 15:19

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

von peterschleif » Sa, 09.01.2010 13:19

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

Wie benutzt man in Basic PropertyChangeListener

von regina » Do, 07.01.2010 22:41

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


Nach oben