Keine neuen Zeilen in Tabelle zulassen?

Das Textverarbeitungsprogramm

Moderator: Moderatoren

NIiLs
*
Beiträge: 18
Registriert: Mo, 02.11.2009 12:34

Keine neuen Zeilen in Tabelle zulassen?

Beitrag von NIiLs »

Ich habe ein Formular erstellt, in dem ich einige Tabellen verwende die eine genau definierte Anzahl von Zeilen haben. Nur in deren Zellen soll der Anwender Daten eingeben können und vor allem nicht durch Drücken der TAB-Taste in der letzten Zelle eine neue Zeile einfügen können!!
Bisher habe ich durch keine Schutzmethode (Zellen, Bereich) das gewünschte verhalten erreichen können, daher natürlich die Frage: Geht das überhaupt?

TIA
NIiLs
NIiLs
*
Beiträge: 18
Registriert: Mo, 02.11.2009 12:34

Re: Keine neuen Zeilen in Tabelle zulassen?

Beitrag von NIiLs »

Hallo Rocko!
Danke für deine Antwort, ich habe Dein Formular natürlich schon gefunden und ausprobiert aber es funktionert halt auch nicht.... (also zur Probe einfach mal mit der Maus auf "Frage 6" klicken, das setzt den Mauscursor dort hin - und dann 2 mal die TAB - Taste drücken und schon bekommt deine Tabelle Zeile um Zeile dazu ...)

Was ich suche ist eine Möglichkeit eben das zu verhindern, so kann man jedes Formular zerstören...
Stephan
********
Beiträge: 12368
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: Keine neuen Zeilen in Tabelle zulassen?

Beitrag von Stephan »

Bisher habe ich durch keine Schutzmethode (Zellen, Bereich) das gewünschte verhalten erreichen können, daher natürlich die Frage: Geht das überhaupt?
Strenggenommen Nein.
Zunächst wäre zu klären was Du überhaupt bezweckst. Alle DEine Ansätze sind nämlich kein wirksamer SChutz solange Du das Dokument nicht signierst (Ein Signieren wiederum schliesst aus das der Nutzer selbst etwas ändren kann und abspeichern), da sonst ohnehin der Anwender alles kopieren und den SChutz umgehen kann.

Falls Dir solch ein Pseudo-SChutz reicht, ist es natürlich einfach eine Tabelle vor dem Hinzufügen weiterer Zeilen/Zellen zu schützen, indem Du eine 'verknüpfte' Tabelle erstellst:
Öffne ein neues Leeres Calc-Dokument, markiere dort soviele Zellen wie die Tabelle in Writer haben soll, kopiere diese und wähle im Writer Bearbeiten-Inhalte Einfügen-DDE-Verknüpfung, danach schliesse das Calc-Dokument OHNE es zu speichern.
In der so entstandenen Tabelle sind keinerlei Änderungen der Zeilen-/Zellen-anzahl möglich (weder per Tab noch sonstwie), allerdings nur solange niemand die Verknüfung löst, was aber möglich ist.


Gruß
Stephan
NIiLs
*
Beiträge: 18
Registriert: Mo, 02.11.2009 12:34

Re: Keine neuen Zeilen in Tabelle zulassen?

Beitrag von NIiLs »

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??
Antworten