Hi Bernd,
Hi ich versuche gerade in Draw per Makro eine Ebene zu sperren
------------8<----------------
Sub EbeneSperren(sName As string)
Dim oDoc as Object, oEbenen as Object
Dim oEbene as Object
oDoc = ThisComponent
oEbenen = oDoc.getLayerManager()
if oEbenen.hasByName(sName) then
oEbene = oEbenen.getByName(sName)
oEbene.IsPrintable("IsLocked", true)
Du kannst in der APi https://api.libreoffice.org/docs/idl/ref/index.html nach "Layer" suchen und dann rechts oben auf "List all members" klicken. Das gibt eine kompakte Übersicht. In diesem Fall würdest du sehen, dass das Setzen über die allgemeine "setPropertyValue" erfolgt. Aber wir sind ja in Basic, das die abkürzende Schreibweise erlaubt bei Properties erlaubt.
'oEbene.IsLocked = true 'geht auch nicht
Doch genau das funktioniert. Aber s.u.
'Mri oEbene
End if
End Sub
-------8<------------
Das funktioniert nicht, keine Statusänderung. Es gibt keine Fehlermeldung.
Was ist da los? Ist IsLocked evtl. readonly? Ich habe dazu keinen Hinweis
gefunden (SDK und Websuche)
Das Problem ist, dass die Eigenschaft zwar gesetzt wird, aber die LayerTabBar nicht automatisch aktualisiert wird. Ich benutze dazu folgendes [VPL = visible/printable/locked]
sub UpdateLayerTabBar
Rem Der Layer erhält die VPL Eigenschaften, aber die LayerTabBar
Rem wird nicht automatisch aktualisiert
Rem Trick: ActiceLayer setzen und zurücksetzen
dim oDocument as variant: oDocument = ThisComponent
dim oController as variant: oController = oDocument.CurrentController
dim oLayerManager as variant: oLayerManager = oDocument.LayerManager
dim xLayer as variant: xLayer = oLayerManager.getByIndex(0)
dim oTempLayer as variant: oTempLayer = oController.ActiveLayer
oController.ActiveLayer = xLayer
oController.ActiveLayer = oTempLayer
end sub
Noch ein Problem: Das Watchwindow zeigt die VPL-Properties nicht richtig an. Für Fehlersuche bei Layers benutze ich daher
sub ShowLayerProperties(byVal aLayer as variant)
if Not(aLayer.supportsService("com.sun.star.drawing.Layer")) then
msgbox('no Layer')
exit sub
end if
dim sMessage as string
sMessage = "Layer: " & aLayer.name & chr$(13)
sMessage = sMessage & "title:" & aLayer.title & chr$(13)
sMessage = sMessage & "description:" & chr$(13) & aLayer.description & chr$(13)
sMessage = sMessage & "is visible: " & aLayer.isVisible & chr$(13)
sMessage = sMessage & "is printable: " & aLayer.isPrintable & chr$(13)
sMessage = sMessage & "is locked: " & aLayer.isLocked
msgbox(sMessage)
end sub
Mit freundlichen Grüßen
Regina