Date: prev next · Thread: first prev next last
2018 Archives by date, by thread · List index


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

Mit freundlichen Grüßen
Regina



--
Liste abmelden mit E-Mail an: users+unsubscribe@de.libreoffice.org
Probleme? https://de.libreoffice.org/hilfe-kontakt/mailing-listen/abmeldung-liste/
Tipps zu Listenmails: https://wiki.documentfoundation.org/Netiquette/de
Listenarchiv: https://listarchives.libreoffice.org/de/users/
Datenschutzerklärung: https://www.documentfoundation.org/privacy

Context


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.