Seite 1 von 1

Menübefehle deaktiveren

Verfasst: Mo, 10.05.2010 10:26
von Maxx88
Hallo zusammen,
wie der Titel schon sagt möchte ich Menübefehle deaktivieren. In diesem Fall in Calc.

Im Klartext möchte ich verhindern das ein User Daten kopieren, einfügen oder Löschen kann.
Dafür möchte ich die entsprechenden Menübefehlen deaktiveren/ausblenden (auch die auf der Rechten Maustaste) sowie die Tastenkürzel unterbinden, auch das Einfügen von Daten mittels ziehen einer Zelle nach unten oder zur Seite soll verhindert werden.

Da ich noch relativ neu in der Makroprogrammierung bin habe ich (da ich bei google nichts für Openoffice gefunden habe) versucht ein für Excel 2003 geschriebenes Makro entsprechend anzupassen. Leider ohne Erfolg.

Hat hier vielleicht jemand einen allgemeinen Lösungsansatz wie ich die Felder ausblende/deaktivere oder einen Tipp was man sich an Tutorials etc. durchlesen könnte um letztendlich mein Problem zu lösen?

Danke schonmal im Vorraus an alle.

Re: Menübefehle deaktiveren

Verfasst: Fr, 14.05.2010 08:40
von Maxx88
Hi,
danke schonmal für deine Antowrt nur leider ist das nicht das was ich brauche.
Also das heißt ich brauche das schon aber das habe ich schon herausgefunden ;)

Mein Problem is das der User durchaus eingaben in einigen Freigegebenen Feldern machen darf, nur darf er in diese Felder nichts hineinkopieren oder herauskopieren oder Ausschneiden.

Auch das Autovervolständigen in den Zellen durch Herunterziehen (z.B. Automatisches berechnen des Datums) darf der User nicht können.

Es sollen wirklich nur manuelle Eingaben erlaubt sein.


Ich hoffe es ist jetzt etwas klarer.

Ich habe hier auch schon etwas gefunden, ein Script das zumindestens zum Teil tut was ich möchte.

Hier erstmal das Script:

Code: Alles auswählen

Option Explicit

Global oDispatchInterceptor
Global oSlaveDispatchProvider
Global oMasterDispatchProvider
Global oFrame
Global bDebug As Boolean

'________________________________________________________
Sub RegisterInterceptor
  Dim oFrame : oFrame = ThisComponent.currentController.Frame
  Dim s$     : s = "com.sun.star.frame.XDispatchProviderInterceptor"
  oDispatchInterceptor = CreateUnoListener("ThisFrame_", s)
  oFrame.registerDispatchProviderInterceptor(oDispatchInterceptor)  
End Sub

'________________________________________________________
Sub ReleaseInterceptor()
On Error Resume Next
  oFrame.releaseDispatchProviderInterceptor(oDispatchInterceptor)  
End Sub

'________________________________________________________
Function ThisFrame_queryDispatch ( oUrl As Object, _
      sTargetFrameName As String, lFlags As Long ) As Variant
  Dim oDisp
  Dim s$
  
  'the slot protocol causes ooo crash...
  If oUrl.protocol = "slot:" Then
    Exit Function
  End If
  
  If bDebug Then 
    Print oUrl.complete, sTargetFrameName, lFlags
  End If

  s =  sTargetFrameName
  oDisp = oSlaveDispatchProvider.queryDispatch( oUrl, s, lFlags )
  
  'do your management here
  Select Case oUrl.complete
    Case ".uno:Copy" 'disable the save command
      Exit Function
    Case ".uno:Insert" 'disable the save command
      Exit Function
    Case ".uno:Cut" 'disable the save command
      Exit Function
    Case Else
      ' do nothing
  End Select

  ThisFrame_queryDispatch = oDisp  
End Function

'________________________________________________________
Function ThisFrame_queryDispatches ( mDispArray ) As Variant
  ThisFrame_queryDispatches = mDispArray
End Function

'________________________________________________________
Function ThisFrame_getSlaveDispatchProvider ( ) As Variant
  ThisFrame_getSlaveDispatchProvider = oSlaveDispatchProvider
End Function

'________________________________________________________
Sub ThisFrame_setSlaveDispatchProvider ( oSDP )
  oSlaveDispatchProvider = oSDP
End Sub

'________________________________________________________
Function ThisFrame_getMasterDispatchProvider ( )  As Variant
  ThisFrame_getMasterDispatchProvider = oMasterDispatchProvider
End Function

'________________________________________________________
Sub ThisFrame_setMasterDispatchProvider ( oMDP ) 
  oMasterDispatchProvider = oMDP
End Sub

'________________________________________________________
Sub ToggleDebug()
'be carefull! you will have a debug message 
' for each dispatch....
  bDebug = Not bDebug
End Sub
Das Script deaktiviert zumindestens die Menübefehle aber nicht die Tastenkürzel (STRG+C, STRG+C und STRG+V) und Autovervollständigen wird auch nicht deaktiviert.

Wenn also noch jemand ein Tip hat, ich bin für jede Lösung offen.


*Korrektur:
Es werden doch die Tastenkürzel unterbunden. Allerdings nach wie vor das Autovervollständigen nicht. Also wenn diesbezüglich noch jemand eine Lösung hat, immer her damit.

Re: Menübefehle deaktiveren

Verfasst: Fr, 14.05.2010 13:42
von Newbiebuh2010
Hi, Maxx,

ich bin nicht sicher, ob das funktioniert - kann im Augenblick nicht testen.

Code: Alles auswählen

 Select Case oUrl.complete
    Case ".uno:AutoComplete"
      ....
Wäre im Moment meine einzige Idee.

Viele Grüße

Re: Menübefehle deaktiveren

Verfasst: Fr, 14.05.2010 13:49
von Maxx88
Hi,
nee geht leider nicht. Schade :(

Das mit dem Autovervollständigen war erstmal meine Wortkreation. Weiß zufällig jemand wie diese Funktion in Excel heißt (auf Englisch) ?

Re: Menübefehle deaktiveren

Verfasst: Fr, 14.05.2010 16:43
von turtle47
Hi,
Maxx88 hat geschrieben:Weiß zufällig jemand wie diese Funktion in Excel heißt
Excel? :shock: Nein, weiss ich nicht.

Für Calc ist die Bezeichnung "Autoinput". :D

Jürgen

Re: Menübefehle deaktiveren

Verfasst: Mo, 17.05.2010 08:28
von Maxx88
Hallo,
natürlich meine ich Calc..ich werd langsam mürbe.

Aber nichts desto trotz kann ich diese Funktion nicht deaktivieren :(

Mein Makro sieht derzeit so aus:

Code: Alles auswählen

Option Explicit

Global oDispatchInterceptor
Global oSlaveDispatchProvider
Global oMasterDispatchProvider
Global oFrame
Global bDebug As Boolean

'________________________________________________________
Sub RegisterInterceptor
  Dim oFrame : oFrame = ThisComponent.currentController.Frame
  Dim s$     : s = "com.sun.star.frame.XDispatchProviderInterceptor"
  oDispatchInterceptor = CreateUnoListener("ThisFrame_", s)
  oFrame.registerDispatchProviderInterceptor(oDispatchInterceptor)  
End Sub

'________________________________________________________
Sub ReleaseInterceptor()
On Error Resume Next
  oFrame.releaseDispatchProviderInterceptor(oDispatchInterceptor)  
End Sub

'________________________________________________________
Function ThisFrame_queryDispatch ( oUrl As Object, _
      sTargetFrameName As String, lFlags As Long ) As Variant
  Dim oDisp
  Dim s$
  
  'the slot protocol causes ooo crash...
  If oUrl.protocol = "slot:" Then
    Exit Function
  End If
  
  If bDebug Then 
    Print oUrl.complete, sTargetFrameName, lFlags
  End If

  s =  sTargetFrameName
  oDisp = oSlaveDispatchProvider.queryDispatch( oUrl, s, lFlags )
  
  'do your management here
  Select Case oUrl.complete
    Case ".uno:Copy" 'disable the copy command
      Exit Function
    Case ".uno:Paste" 'disable the paste command
      Exit Function
    Case ".uno:Cut" 'disable the cut command
      Exit Function
    Case ".uno:AutoInput" 'disable the AutoInput command
      Exit Function
    Case Else
      ' do nothing
  End Select

  ThisFrame_queryDispatch = oDisp  
End Function

'________________________________________________________
Function ThisFrame_queryDispatches ( mDispArray ) As Variant
  ThisFrame_queryDispatches = mDispArray
End Function

'________________________________________________________
Function ThisFrame_getSlaveDispatchProvider ( ) As Variant
  ThisFrame_getSlaveDispatchProvider = oSlaveDispatchProvider
End Function

'________________________________________________________
Sub ThisFrame_setSlaveDispatchProvider ( oSDP )
  oSlaveDispatchProvider = oSDP
End Sub

'________________________________________________________
Function ThisFrame_getMasterDispatchProvider ( )  As Variant
  ThisFrame_getMasterDispatchProvider = oMasterDispatchProvider
End Function

'________________________________________________________
Sub ThisFrame_setMasterDispatchProvider ( oMDP ) 
  oMasterDispatchProvider = oMDP
End Sub

'________________________________________________________
Sub ToggleDebug()
'be carefull! you will have a debug message 
' for each dispatch....
  bDebug = Not bDebug
End Sub
Ich hoffe ihr meint auch alle die Richtige funktion hier vielleicht nochmal zur Erklärung:

Wenn ich ein z.B. das Datum 01.05.2010 in eine Zelle eingebe dann die Zelle makriere und an dem kleinen schwarzen Kasten nach unten (oder zur seite) ziehe und Calc mit automatisch das Datum hochzählt (02.05.2010, 03.05.2010, etc)

Wenn diese Funktion wirklich "AutoInput" heißt kann ich sie nicht, wie ich es oben probiert habe, mit dem Makro deaktivieren.

Also ergeben sich folgende Fragen:

1. heißt diese Funktion wirklich "AutoInput" ?
Wenn ja:
1.1 Hat jemand vielleicht eine Idee wie ich diese per Makro deaktiveren kann?
Wenn nein:
1.2 Wie heißt sie dann bzw. gibt es irgendwo eine Übersicht der Funktionen von OpenOffice?

Bin für jede Hilfe dankbar.

Re: Menübefehle deaktiveren

Verfasst: Mo, 17.05.2010 12:30
von Newbiebuh2010
Hi,

ist die Makroverwendung dafür zwingend ?

Um bei deinem Datumsbeispiel zu bleiben:
> wenn in A1 das Datum steht,
> B1 und C1 als Eingabefelder zu Verfügung stehen sollen,
> aber A1 nicht dorthin gezogen werden soll:
dann hilft das Sperren von A1 (Zellschutz), aber Freigabe von B1 und C1 und dann Tabellenschutz.
Das ist alles auch per Makro möglich. Das Hinüberziehen wird dann geblockt mit der Meldung "Gesperrte Zellen..."
Das Übernehmen des Wertes ist allerdings dann immer noch per Formel möglich (=A1).

Das, was beim Hinüberziehen passiert, ist eigentlich das Füllen = Fill bzw. Autofill.
Ob das allerdings der richtige Ausdruck für den OO-Befehl ist, weiß ich nicht. Bin selber noch nicht tief drin in diesen Dingen :?

Eine andere Variante weiß ich leider auch nicht.

Viel Erfolg !

Re: Menübefehle deaktiveren

Verfasst: Mo, 17.05.2010 12:40
von Maxx88
Hi,
also der User gibt in den Feldern komplett alles alleine ein.

In A1 steht also erstmal gar nichts
Der User gibt jetzt in A1 ein Datum ein.
Und in B1 und C1 muss er seine Eingaben auch Manuell machen und nicht von A1 runterziehen. Und das klappt mit dem Zellschutz ja nicht, oder irre ich mich da?

Habs mit Fill und AutoFill probiert. Klappt leider auch nicht ...

Aber danke für die IDee

*Edit:
In Excel heißt die Funktion CellDragAndDrop was in Openoffice allerdings nicht funktioniert..Aber es war ein Versuch wert.

Re: Menübefehle deaktiveren

Verfasst: Mo, 17.05.2010 13:11
von Stephan
Wenn also noch jemand ein Tip hat, ich bin für jede Lösung offen.
Vergiss die ganze Gängelei des Nutzers der Datei und biete gleich Hilfe in Form einer vernünftigen Eingabemaske an. Ein ausführlichst dokumentiertes Beispiel dafür ist das 'Fahrtenbuch':

http://www.amt-wiesbaden.de/downloads/F ... Muster.sxc
http://www.amt-wiesbaden.de/downloads/B ... enbuch.pdf




Gruß
Stephan

Re: Menübefehle deaktiveren

Verfasst: Di, 18.05.2010 00:10
von Newbiebuh2010
Also zunächst @Stephan: Klasse, dein Stichwortverzeichnis möchte ich haben :lol:
Aber ehrlich: Ich habe keine Ahnung, warum sich einige Menschen solche Infos mal so abschütteln :shock:
Hilft mir aber auch - also auch von mir ein DANKE !

Und nun aber mal noch eine Bitte für das Verständnis @maxx:

Wenn ich das nun richtig verstanden habe (Zellbezeichnungen als Beispiele):
> DARF ich als Datei-Benutzer Zelle A1 mit einem von mir gewählten Eintrag belegen;
> DARF ich als Datei-Benutzer Zelle B1 mit einem von mir gewählten Eintrag belegen;
> ist es mir als Datei-Benutzer verboten, meinen eigenen Eintrag aus A1 in B1 zu kopieren ??? :shock: :shock: :? ???

Tut mir leid, das erschließt sich mi nun gar nicht mehr :?

Viele Grüße

Re: Menübefehle deaktiveren

Verfasst: Di, 18.05.2010 00:31
von Stephan
Also zunächst @Stephan: Klasse, dein Stichwortverzeichnis möchte ich haben
würdest Du weniger Zeit damit verschwenden DEinen Beitrag mit völlig sinnlosen Smileys zuzumüllen, die allen hier das Lesen zur Qual machen, hättest Du den entsprechenden Link leicht finden können denn er stewht seit Jahren im ersten Post des Basic-Forums (im unteren Bereich unter "Beispieldateien"):
viewtopic.php?f=18&t=1553



Gruß
Stephan

Re: Menübefehle deaktiveren

Verfasst: Di, 18.05.2010 00:40
von Newbiebuh2010
@Stephan

Ich bitte untertänigst um Verzeihung - hatte eigentlich lediglich etwas Nettes als Danke sagen wollen - melde mich ja schon ab

Nicht jeder kennt innerhalb von Sekunden seinen Platz - ich brauche halt NOCH länger

Re: Menübefehle deaktiveren

Verfasst: Di, 18.05.2010 00:56
von Stephan
Ich bitte untertänigst um Verzeihung
das solltest Du Dir sparen, Untertänigkeit tut niemandem gut und ich persönlich hasse sie
hatte eigentlich lediglich etwas Nettes als Danke sagen wollen
Du willst doch aber nicht ernsthaft sagen das Du Leute kennst denen Dinge wie die Kombination von 6 Fragezeichen mit 3 Smileys:

??? :shock: :shock: :? ???

als nett vorkommen KÖNNTEN. Sowas tut doch jedem beim Lesen weh.



kopfschüttelnd,

Stephan

Re: Menübefehle deaktiveren

Verfasst: Di, 18.05.2010 06:52
von Maxx88
Wenn ich das nun richtig verstanden habe (Zellbezeichnungen als Beispiele):
> DARF ich als Datei-Benutzer Zelle A1 mit einem von mir gewählten Eintrag belegen;
> DARF ich als Datei-Benutzer Zelle B1 mit einem von mir gewählten Eintrag belegen;
> ist es mir als Datei-Benutzer verboten, meinen eigenen Eintrag aus A1 in B1 zu kopieren ???
Das hast du soweit richtig verstanden....Den Sinn kann ich dir auch nicht sagen. Anforderung ist Anforderung.
Vergiss die ganze Gängelei des Nutzers der Datei und biete gleich Hilfe in Form einer vernünftigen Eingabemaske an. Ein ausführlichst dokumentiertes Beispiel dafür ist das 'Fahrtenbuch':

http://www.amt-wiesbaden.de/downloads/F ... Muster.sxc
http://www.amt-wiesbaden.de/downloads/B ... enbuch.pdf
ICh gebe dir Feedback sobald ich das Script für meine Zwecke zum Laufen gebracht habe.

Danke für die vielen Antworten.

Re: Menübefehle deaktiveren

Verfasst: Mi, 26.05.2010 11:31
von Maxx88
Sooo,
hab das jetzt mal umgebaut und ausprobiert.

Ergebnis war meines erachtens gut die Lösung gefällt dem Anforderer allerdings nicht so richtig.

Gibt es vielleicht noch jemanden mit einer Idee ? Am besten wäre es wirklich wenn mir jemand den Namen der Funktion nennen könnte bzw. ein kleines Makro mit dem ich diese Funktion deaktivieren kann.

Gruß Max