So endlich bin ich dazugekommen mich um diese Sache zu kümmern (wenn da nicht diese Arbeit wäre die einen ständig von der Arbeit abhält ...

)
Also für mich reicht der einfache Schutz, es geht nur darum, das der Anwender nicht unabsichtlich das Formular zerstört. Ich werde mir bei Gelegenheit auch mal das mit der Calc-Tabelle ansehen, das klingt für mich zumindestens sehr gut.
Der Hinweis mit der Formatierungshilfe (Cursor in geschützten Zonen) war der letzte nötige Baustein um das ganze abzuschließen. Mein größtes Problem war es bisher dabei immer solche Werte dann automatisch zu setzen (z.B.: beim Öffnen oder Erzeugen der Datei), aber nachdem ich nun einen kleinen Configuration-Browser geschrieben habe, ist die Suche einwenig einfacher geworden.
Und zum Abschluß noch zwei kleine Routinen zum Lesen und Schreiben sowie als Beispiel das Umschalten besagter Schutzfunktion
Lesen eines Configuration-Wertes:
Code: Alles auswählen
'
' Funktion liest einen Wert aus der OOo-Registry und liefert das Ergebnis
'
' In: aRoot ... "Pfad" zum Wert
' aKey ... "Name" des Wertes
'
'
Function readOfficeReg(aRoot As String, aKey As String) As Variant
Dim aConfigProvider As Object
Dim oNode As Variant
Dim args(0) As new com.sun.star.beans.PropertyValue
aConfigProvider = createUnoService("com.sun.star.configuration.ConfigurationProvider")
args(0).Name = "nodepath"
args(0).Value = "org.openoffice.Office." + aRoot
oNode = aConfigProvider.createInstanceWithArguments("com.sun.star.configuration.ConfigurationAccess", args())
readOfficeReg = oNode.getPropertyValue(aKey)
End Function
Schreiben eines Wertes:
Code: Alles auswählen
'
' Funktion schreibt einen Wert in die OOo-Registry
'
' In: aRoot ... "Pfad" zum Wert
' aKey ... "Name" des Wertes
' aNewValue ... Neuer Wert
'
Sub writeOfficeReg(aRoot As String, aKey As String, aNewValue As Variant)
Dim aConfigProvider As Object
Dim oNode As Variant
Dim args(0) As new com.sun.star.beans.PropertyValue
aConfigProvider = createUnoService("com.sun.star.configuration.ConfigurationProvider")
args(0).Name = "nodepath"
args(0).Value = "org.openoffice.Office." + aRoot
oNode = aConfigProvider.createInstanceWithArguments("com.sun.star.configuration.ConfigurationUpdateAccess", args())
oNode.setPropertyValue(aKey, aNewValue)
oNode.commitChanges()
End Sub
Die Routinen gehen davon aus, dass es den Wert gibt und der Datentyp stimmt, es fehlt hier noch jegiche Fehlerbehandlung, für meine Zwecke ist das aber ausreichend.
Hier noch ein Beispiel:
Code: Alles auswählen
'
' Umschalten des Cursor-Schutzes
'
sub main
dim iC as Boolean
iC = readOfficeReg("Writer/Cursor/Option", "ProtectedArea")
Print "ProtectedArea = " & iC
iC = not iC
writeOfficeReg("Writer/Cursor/Option", "ProtectedArea", iC)
Print "ProtectedArea = "&readOfficeReg("Writer/Cursor/Option", "ProtectedArea")
end sub
Edit (2): Leider funktioniert das nicht wirklich so wie ich mir das vorgestellt habe. Die Einstellung für "ProtectedArea" scheint während Writer läuft für jedes Dokument extra verwaltet zu werden. Erst beim Schließen der letzen Writerinstanz wir
deren Zustand gespeichert und legt das verhalten für den nächsten Start fest.
Dem entsprechend funktionieren die Routinen oben, aber der Zustand wird erst nach einem Neustart vom Writer übernommen.
Ich habe bisher leider keine Möglichkeit gefunden den Zustand abhängig vom offenen Dokument einzulesen/verändern??
Vielleicht kann da ja jemand weiterhelfen??
So endlich bin ich dazugekommen mich um diese Sache zu kümmern (wenn da nicht diese Arbeit wäre die einen ständig von der Arbeit abhält ... ;) )
Also für mich reicht der einfache Schutz, es geht nur darum, das der Anwender nicht unabsichtlich das Formular zerstört. Ich werde mir bei Gelegenheit auch mal das mit der Calc-Tabelle ansehen, das klingt für mich zumindestens sehr gut.
Der Hinweis mit der Formatierungshilfe (Cursor in geschützten Zonen) war der letzte nötige Baustein um das ganze abzuschließen. Mein größtes Problem war es bisher dabei immer solche Werte dann automatisch zu setzen (z.B.: beim Öffnen oder Erzeugen der Datei), aber nachdem ich nun einen kleinen Configuration-Browser geschrieben habe, ist die Suche einwenig einfacher geworden.
Und zum Abschluß noch zwei kleine Routinen zum Lesen und Schreiben sowie als Beispiel das Umschalten besagter Schutzfunktion
Lesen eines Configuration-Wertes:
[code]
'
' Funktion liest einen Wert aus der OOo-Registry und liefert das Ergebnis
'
' In: aRoot ... "Pfad" zum Wert
' aKey ... "Name" des Wertes
'
'
Function readOfficeReg(aRoot As String, aKey As String) As Variant
Dim aConfigProvider As Object
Dim oNode As Variant
Dim args(0) As new com.sun.star.beans.PropertyValue
aConfigProvider = createUnoService("com.sun.star.configuration.ConfigurationProvider")
args(0).Name = "nodepath"
args(0).Value = "org.openoffice.Office." + aRoot
oNode = aConfigProvider.createInstanceWithArguments("com.sun.star.configuration.ConfigurationAccess", args())
readOfficeReg = oNode.getPropertyValue(aKey)
End Function
[/code]
Schreiben eines Wertes:
[code]
'
' Funktion schreibt einen Wert in die OOo-Registry
'
' In: aRoot ... "Pfad" zum Wert
' aKey ... "Name" des Wertes
' aNewValue ... Neuer Wert
'
Sub writeOfficeReg(aRoot As String, aKey As String, aNewValue As Variant)
Dim aConfigProvider As Object
Dim oNode As Variant
Dim args(0) As new com.sun.star.beans.PropertyValue
aConfigProvider = createUnoService("com.sun.star.configuration.ConfigurationProvider")
args(0).Name = "nodepath"
args(0).Value = "org.openoffice.Office." + aRoot
oNode = aConfigProvider.createInstanceWithArguments("com.sun.star.configuration.ConfigurationUpdateAccess", args())
oNode.setPropertyValue(aKey, aNewValue)
oNode.commitChanges()
End Sub
[/code]
Die Routinen gehen davon aus, dass es den Wert gibt und der Datentyp stimmt, es fehlt hier noch jegiche Fehlerbehandlung, für meine Zwecke ist das aber ausreichend.
Hier noch ein Beispiel:
[code]
'
' Umschalten des Cursor-Schutzes
'
sub main
dim iC as Boolean
iC = readOfficeReg("Writer/Cursor/Option", "ProtectedArea")
Print "ProtectedArea = " & iC
iC = not iC
writeOfficeReg("Writer/Cursor/Option", "ProtectedArea", iC)
Print "ProtectedArea = "&readOfficeReg("Writer/Cursor/Option", "ProtectedArea")
end sub
[/code]
[color=#FF0000][b]Edit (2): [/b][/color]Leider funktioniert das nicht wirklich so wie ich mir das vorgestellt habe. Die Einstellung für "ProtectedArea" scheint während Writer läuft für jedes Dokument extra verwaltet zu werden. Erst beim Schließen der letzen Writerinstanz wir [i]deren[/i] Zustand gespeichert und legt das verhalten für den nächsten Start fest.
Dem entsprechend funktionieren die Routinen oben, aber der Zustand wird erst nach einem Neustart vom Writer übernommen.
Ich habe bisher leider keine Möglichkeit gefunden den Zustand abhängig vom offenen Dokument einzulesen/verändern??
Vielleicht kann da ja jemand weiterhelfen??