Hallo Karl,
schön, dass ich auch mal etwas beitragen kann - aber ich bin auch erst
gerade am Anfang mit der Basic-Programmierung.
Einen Modify-Listener kannst Du wie folgt aktivieren:
Sub Add_Modify_Listener
Dim objDoc As Object
Dim objSel As Object
Dim objBlatt As Object
Dim nCol As Long
Dim nRow As Long
Dim iField As Integer
objDoc = ThisComponent
objSel = objDoc.getCurrentSelection()
oModifyListener = CreateUnoListener( "MyApp_",
"com.sun.star.util.XModifyListener" )
If objSel.supportsService("com.sun.star.sheet.SheetCell" ) Then
ocell = objDoc.getCurrentSelection()
'create a listener on cell
ocell.addModifyListener(oModifyListener)
Elseif objSel.supportsService("com.sun.star.sheet.SheetCellRange" ) Then
objBlatt = objDoc.Sheets.getByIndex(objSel.RangeAddress.Sheet)
For nCol = objSel.RangeAddress.StartColumn To
objSel.RangeAddress.EndColumn
For nRow = objSel.RangeAddress.StartRow To
objSel.RangeAddress.EndRow
ocell = objBlatt.getCellByPosition(nCol, nRow)
'create a listener on cell
ocell.addModifyListener(oModifyListener)
Next
Next
Elseif objSel.supportsService("com.sun.star.sheet.SheetCellRanges" )
Then
For iField = 0 To UBound(objSel.RangeAddresses)
objBlatt =
objDoc.Sheets.getByIndex(objSel.RangeAddresses(iField).Sheet)
For nCol = objSel.RangeAddresses(iField).StartColumn To
objSel.RangeAddresses(iField).EndColumn
For cRow = objSel.RangeAddresses(iField).StartRow To
objSel.RangeAddresses(iField).EndRow
ocell = objBlatt.getCellByPosition(nCol, nRow)
'create a listener on cell
ocell.addModifyListener(oModifyListener)
Next
Next
Next
End If
End Sub
Wie Du siehst, kann ein Modify Listener nur jeder Zelle und nich einem
Sheet zugewiesen werden !!!!
Das Entfernen eines Listeners kannst Du meines Erachtens vergessen, da
die ID des Listeners in Basic nicht gehalten werden kann.
Auch wenn Du globale Variablen verwendest. Habe es selbst schon ausprobiert.
Wichtig ist auch zu wissen, dass ein Listener - nach dem was ich bis
lang gelernt und erfahren habe - anders funktioniert als ein EventHandler.
Ein Handler kann bestimmen, ob weitere Handler und Listener denselben
Event noch erhalten, oder nicht.
Problem: Handler kann man in Basic anscheinend nicht installieren, da
diese einen Rückgabewert benötigen. Aber ich lasse mich gerne eines
besseren belehren.
Der Listener heißt im übrigen dann MyApp_Modified (oEvent as Object)
Aber Vorsicht, es lässt sich nicht alles realisieren. Es gibt sogar ein
paar sehr merkwürdige Effekte, die mit Sicherheit an dem EventHandler
liegen, der ja auch noch im Hintergrund läuft.
Und wenn Du in MyApp_Modified den Zelleninhalt änderst, dann wird wieder
ein Modify Event erzeugt und MyApp_Modified aufgerufen. Das ist also
abzufangen, damit Du nicht in eine Endlos-Schleife gerätst.
Gruß, Fritz
Karl Gust-Stiehl schrieb:
Hallo Jörg, * ,
den Listender wie unten von Jörg vorgeschlagen kriege ich nicht zum laufen
d.h. ich war zwar einmal soweit, das ich den event im Beobachter hatte.
Dann hatte ich individuelle Namen vergeben.. und es ging nicht mehr
aber auch nach dekativiern und einkopieren des orginal code(s.u.) tut sich
gar nichts außer:
dass bei schließen des Docs noch der Fehler " .... noscript" erscheint,
obwohl "Listener_entfernen" bei "Dokument wird geschlossen" zugwiesen ist
Außerdem müsste doch auch "oEvent" deklariert werden, oder?
und müßte das wiederholte definieren des Listeners beim debuggen
ausgeschlossen werden?
etwa: if exist listener......
Wie kann ich Haltepunkte im Dateiöffnen-Makro definieren?
Wo finde ich amschnellsten genauere Infos (Versionspropbleme?) oder ein
spezielles Basic-Forum?
ich habe im Internet Hinweise auf einen anderen Listener entdeckt
oCrngData = CreateUnoListener(
"CrngListener_","com.sun.star.util.XModifyListener" )
oCrng.addModifyListener( oCrngData )
????
kgs-ks
code von Jörg:-------------------------------------------------
Global oListener
Sub Listener_registrieren()
oDocView = ThisComponent.getCurrentController
oListener = CreateUnoListener( "jms_",
"com.sun.star.sheet.XActivationEventListener" )
oDocView.addActivationEventListener(oListener)
End Sub
Sub Listener_entfernen()
ThisComponent.getCurrentController.removeActivationEventListener(oListen
er)
End Sub
Sub jms_activeSpreadsheetChanged(oEvent)
aktives_blatt = ThisComponent.CurrentController.getActiveSheet.Name
Msgbox "aktiviertes Blatt ist: " & aktives_blatt
End Sub
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]