Draw Ebene per Makro sperren

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)
    'oEbene.IsLocked = true 'geht auch nicht
    '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)

Gerade hab ich noch festgestellt, dass die anderen Properties Isvisible und
IsPrintable auch nicht änderbar sind.
Den Namen der Ebene kann man mit setPropertyValue ändern.

Bitte um Hilfe :slight_smile:

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

Hallo Regina,
Danke für die schnelle Antwort.
Hab's natürlich sofort probiert :slight_smile:
Leider funktioniert das immer noch nicht :frowning:

Layer: Test
title:
description:

is visible: False
is printable: False
is locked: False

Die Datei ist hier:
https://www.dropbox.com/s/3z5m7ryz49ilk3n/draw-macrotest2.odg?dl=0

Hallo Bernd,

ich schicke dir die korrigierte Datei und meine "Layer"-Bibliothek direkt.

Mit freundlichem Gruß
Regina

Hallo Regina,
ich steh auf dem Schlauch...
es geht nicht.
Übrigens auch mit OOo nicht. :slight_smile:

LO Version: 6.0.1.1
SuSE tumbleweed

Hallo Bernd,

Hallo Bernd,

ich schicke dir die korrigierte Datei und meine "Layer"-Bibliothek direkt.

Mit freundlichem Gruß
Regina

Hallo Regina,
ich steh auf dem Schlauch...
es geht nicht.
Übrigens auch mit OOo nicht. :slight_smile:

Du öffnest die Datei und wählst "Main" aus den Makros der _Datei_? Ich habe hier neben LO 5.4.7, 6.0, 6.1 und 6.2 auch AOO4.1 getested. Es geht mit allen wie gewünscht. Ich arbeite hier unter Window 10.

Welches Betriebssystem hast du? Hast du eine Original-LibreOffice Version?

Welche Einstellungen hast du bei Makro-Sicherheit?

Was genau "geht nicht"? Siehst du die Änderung im Layernamen? Hast du das Ergebnis in "Ändern"-Dialog des Layers kontolliert?

Mit freundlichem Gruß
Regina

Hallo Bernd,

Hallo Bernd,

ich schicke dir die korrigierte Datei und meine "Layer"-Bibliothek direkt.

Mit freundlichem Gruß
Regina

Hallo Regina,
ich steh auf dem Schlauch...
es geht nicht.
Übrigens auch mit OOo nicht. :slight_smile:

Hallo Regina,
ja so mach ich das :slight_smile:
Ich habs mit LO5.2, 6.1.1 und AOO4.1.3 unter Linux getestet.
Mit AAO Portable auf windows 7 und Eben hab ich noch LO Version: 6.1.0.3 (x64)
auf Windows 10 neu installiert und dort das Makro getestet.
Überall das Selbe: IsLocked und IsVisible wird nicht verändert, Name und Title
schon.

Du öffnest die Datei und wählst "Main" aus den Makros der _Datei_? Ich
habe hier neben LO 5.4.7, 6.0, 6.1 und 6.2 auch AOO4.1 getested. Es geht
mit allen wie gewünscht. Ich arbeite hier unter Window 10.

Welches Betriebssystem hast du? Hast du eine Original-LibreOffice Version?

s.o

Welche Einstellungen hast du bei Makro-Sicherheit?

Alles erlaubt. Wenns hieran läge, käme ja auch ein Hinweis.

Was genau "geht nicht"? Siehst du die Änderung im Layernamen? Hast du
das Ergebnis in "Ändern"-Dialog des Layers kontolliert?

s.o
Ja, natürlich hab ich das Ergebnis dort auch geprüft. :slight_smile:

Ich habe schon sehr viele Makros programmiert, der Umgang mit den Einstellungen
und dem Editor ist mir vertraut.
Makros für Draw sind Neuland für mich, damit habe ich mich bisher noch nie
beschäftigt. Mein Einstieg hier war, wie man evtl am Code sehen kann, das Buch
von Thomas Krumbein, schon etwas älter, aber immer noch hilfreich :slight_smile: