Hi Bernd,
Bernd Obermayr schrieb am 05-Sep-18 um 12:36:
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
Privacy Policy |
Impressum (Legal Info) |
Copyright information: Unless otherwise specified, all text and images
on this website are licensed under the
Creative Commons Attribution-Share Alike 3.0 License.
This does not include the source code of LibreOffice, which is
licensed under the Mozilla Public License (
MPLv2).
"LibreOffice" and "The Document Foundation" are
registered trademarks of their corresponding registered owners or are
in actual use as trademarks in one or more countries. Their respective
logos and icons are also subject to international copyright laws. Use
thereof is explained in our
trademark policy.