Per Makro Buttons ausblenden

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: Per Makro Buttons ausblenden

Re: Per Makro Buttons ausblenden

von stommy7 » Fr, 18.01.2008 08:57

hmm irgendwie verschwinden die Buttons nun auch schon, wenn ich nur scrolle.

Scheint noch ein kleiner Bug zu sein....

Re: Per Makro Buttons ausblenden

von komma4 » Do, 17.01.2008 17:56

Ja - der Code reagiert auf jeden sheet-Wechsel. Du musst halt abfragen, ob gerade das Blatt mit Deinen Schaltflächen angezeigt wird ('tschuldige; ich habe Deinen Einwand "absoluter Anfänger" vergessen/verdrängt).
Und gliedere den Code noch einfach etwas; lagere die Ausschalt-Anweisungen in eine eigene Routine aus.

Code: Alles auswählen

Global oListener As Object
Global oScalcDocument As Object
Private oAnsicht
Private oForm


' --------------------------------------------------
Sub SheetEventListenerOn
  oScalcDocument=ThisComponent
  'oListener = createUnoListener("OOO_","com.sun.star.lang.XEventListener")
  oListener = createUnoListener("OOO_","com.sun.star.beans.XPropertyChangeListener")
  oScalcDocument.CurrentController.addPropertyChangeListener("ActiveSheet",oListener)
End Sub

Sub SheetEventListenerOff
  oScalcDocument.CurrentController.removePropertyChangeListener("ActiveSheet",oListener
End Sub

Sub OOO_propertyChange(oEvent)
    'print("OK Current Sheet has changed")
   
' nur bei einem bestimmten Blatt aktiv werden
If ThisComponent.getCurrentController().getActiveSheet().Name <> "EINGABE" Then
  Exit sub 
End If

call ausblendenDreiButtons

End Sub 

' --------------------------------------------------
Sub ausblendenDreiButtons()
' setzen FORMULAR und ANSICHT
' oForm am Anfang definiert; gilt für gesamtes Modul
oForm = _
  ThisComponent.DrawPages.getByIndex(1).getForms().getByName( "Standard" ) 
' oAnsicht am Anfang definiert; gilt für gesamtes Modul
oAnsicht = ThisComponent.getCurrentController()

' oButton NICHT definiert; wird immer neu gesetzt
oButton = oForm.getByName( "PushButton2" )
call ausblendenRoutine( oButton ) 
oButton = oForm.getByName( "PushButton3" )
call ausblendenRoutine( oButton ) 
oButton = oForm.getByName( "PushButton4" )
call ausblendenRoutine( oButton ) 


End Sub 

' --------------------------------------------------
Sub ausblendenRoutine( oKontrollObject as Object )

' oButtonAnsicht NICHT definiert; gilt nur in dieser SUB
oButtonAnsicht = oAnsicht.getControl( oKontrollObject )
oButtonAnsicht.Visible = FALSE

End Sub
' --------------------------------------------------
Nun?

Re: Per Makro Buttons ausblenden

von stommy7 » Do, 17.01.2008 16:58

Hmm funktioniert leider noch nicht so ganz wie erhofft. Bei jedem Sheetwechsel wird nun versucht die drei Buttons auszublenden. Es liegen aber nur auf dem Sheet "EINGABE" Buttons. Wenn ich nun auf ein anderes wechsle, kommt eine Fehlermeldung, da auf diesem Sheet keine Buttons vorhanden sind. Hier nochmal der Quelltext:

Code: Alles auswählen

Global oListener As Object
Global oScalcDocument As Object

Sub SheetEventListenerOn
  oScalcDocument=ThisComponent
  'oListener = createUnoListener("OOO_","com.sun.star.lang.XEventListener")
  oListener = createUnoListener("OOO_","com.sun.star.beans.XPropertyChangeListener")
  oScalcDocument.CurrentController.addPropertyChangeListener("ActiveSheet",oListener)
End Sub

Sub SheetEventListenerOff
  oScalcDocument.CurrentController.removePropertyChangeListener("ActiveSheet",oListener
End Sub

Sub OOO_propertyChange(oEvent)
    'print("OK Current Sheet has changed")
   
    oForm = ThisComponent.DrawPages.getByIndex(1).getForms().getByName( "Standard" ) 
	oButton = oForm.getByName( "PushButton2" )
	oAnsicht = ThisComponent.getCurrentController()
	oButtonAnsicht = oAnsicht.getControl( oButton )
	oButtonAnsicht.Visible = FALSE
	
	oForm = ThisComponent.DrawPages.getByIndex(1).getForms().getByName( "Standard" ) 
	oButton = oForm.getByName( "PushButton3" )
	oAnsicht = ThisComponent.getCurrentController()
	oButtonAnsicht = oAnsicht.getControl( oButton )
	oButtonAnsicht.Visible = FALSE
	
	oForm = ThisComponent.DrawPages.getByIndex(1).getForms().getByName( "Standard" ) 
	oButton = oForm.getByName( "PushButton4" )
	oAnsicht = ThisComponent.getCurrentController()
	oButtonAnsicht = oAnsicht.getControl( oButton )
	oButtonAnsicht.Visible = FALSE

End Sub

Re: Per Makro Buttons ausblenden

von komma4 » Mi, 16.01.2008 11:35

Dafür benötigst Du einen listener. Müsste mit folgendem Beispiel gehen:

Code: Alles auswählen

' Notifies if a view of a sheet
' is changing
' scrolling, not value change
' http://www.oooforum.org/forum/viewtopic.phtml?t=5135
' SergeM
' Posted: Sat Jan 24, 2004 3:54 pm  

Global oListener As Object
Global oScalcDocument As Object

Sub SheetEventListenerOn
  oScalcDocument=ThisComponent
  'oListener = createUnoListener("OOO_","com.sun.star.lang.XEventListener")
  oListener = createUnoListener("OOO_","com.sun.star.beans.XPropertyChangeListener")
  oScalcDocument.CurrentController.addPropertyChangeListener("ActiveSheet",oListener)
End Sub

Sub SheetEventListenerOff
  oScalcDocument.CurrentController.removePropertyChangeListener("ActiveSheet",oListener
End Sub

Sub OOO_propertyChange(oEvent)
   print("OK Current Sheet has changed")
End Sub 

Ich komme nochmal auf meinen Einwand zurück, dass Daten und Anwendung an sich getrennt gehören: Schaltflächen etc. sollte IMHO nicht in einer Calc-Tabelle untergebracht werden.... Aber: mach', was Du willst :-)

Re: Per Makro Buttons ausblenden

von stommy7 » Mi, 16.01.2008 11:11

Mir ist grad noch ein kleiner Fehler aufgefallen. Wenn ich das Sheet wechsel und wieder zurück springe werden alle Buttons wieder angezeigt.
Wie kann ich das vermeiden bzw. wie kann ich ein Makro starten, wenn ich ein bestimmtes Sheet aktiviere?

Re: Per Makro Buttons ausblenden

von komma4 » Mi, 16.01.2008 10:21

xray: ein (unerlässliches) Tool zur Untersuchung von Eigenschaften und Methoden eines Objekts.

Du musst die xray-Bibliotheken (nach der Installation) laden***, dann kannst Du ihm Objekte mitgeben

Code: Alles auswählen

xray ThisComponent.Sheets
zeigt Dir (bei einem Calc-Dokument) dann eben vom aktuellen Dokument das Objekt sheets - bspw. dass es dort eine Eigenschaft .Count gibt, die den Wert 3 hat, und bei den Methoden siehst Du, dass Du .getByIndex( i ) nutzen kannst...

Unbedingt ausprobieren!



***das Laden erledige ich mit dem folgenden Code,der bei mir auf einer Schaltfläche im Basic-Editor liegt:

Code: Alles auswählen

Sub XRayLaden
GlobalScope.BasicLibraries.Loadlibrary("XrayTool")
msgbox "Xray geladen / Xray loaded"
End Sub

Re: Per Makro Buttons ausblenden

von stommy7 » Mi, 16.01.2008 10:02

Dankeschön! Das funktioniert bestens!

Was ist denn eigentlich dieses Xray und was kann man damit machen?

Re: Per Makro Buttons ausblenden

von komma4 » Di, 15.01.2008 17:42

OK, versuchen wir es mal...


in einer Calc-Datei gibt es Tabellen, diese haben 1-n "drawpage(s)" (Container für Zeichenelemente, Diagramme, Bilder - oder Formulare)
Schaltflächen befinden sich in einem dieser Formulare

an ein solches Formular kommst Du dann mit:

Code: Alles auswählen

' erste drawpage (normal auf 1 Blatt) 
' Formular normalerweise "Standard" benannt
oForm = ThisComponent.DrawPages.getByIndex(0).getForms().getByName( "Standard" ) 


Auf dieser Form befindet sich auch Deine Schaltfläche, die Du aktivieren/deaktivieren kannst:

Code: Alles auswählen

oForm.getByName( "PushButton" ).Enabled = FALSE
' 5 Sekunden warten
wait 5000
oForm.getByName( "PushButton" ).Enabled = TRUE 

Für "Ansichten" ist generell der Anzeige-Kontrolleur zuständig.
Und hier kannst Du die Sichtbarkeit einstellen

Code: Alles auswählen

oForm = ThisComponent.DrawPages.getByIndex(0).getForms().getByName( "Standard" ) 
oButton = oForm.getByName( "PushButton" )
oAnsicht = ThisComponent.getCurrentController()
oButtonAnsicht = oAnsicht.getControl( oButton )
oButtonAnsicht.Visible = TRUE ' oder: FALSE
Noch nie selbst damit gearbeitet - aber alles in 5 Minuten mit xray rausgefunden


Das hilft Dir?

Per Makro Buttons ausblenden

von stommy7 » Di, 15.01.2008 16:06

Hallo!

Ich bin absoluter Basicanfänger und brauche daher eine einfache Lösung die ich leicht umsetzen kann.
Ich hab 3 Buttons auf einem Tabellenblatt. Wie kann ich diese per Makro ein- und ausblenden bzw. wenigstens aktivieren und deaktivieren.

Ich bekomms einfach nicht hin.

Nach oben