Aus Word bekannter Shift-F3 Shortcut in OpenOffice

Unter Microsoft Word gibt es wohl den Shortcut „Shift-F3“, der die Gross- und Kleinschreibung von Woertern wie folgt aendert: „woerter Woerter WOERTER“. OpenOffice bringt diese Funktion von Haus aus nicht so mit. Abhilfe schafft dort ein kleines Makro. Dazu: Extras ->  Makros -> Makros verwalten -> [Makro|OpenOffice BASIC]. Dort auf Bearbeiten klicken und folgendes Makro einfuegen:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
Sub CaseToggle
' CaseToggleMk3 phb 20070828
' Should preserve formatting and bookmarks in Writer
' Should work on text within a table in Writer (but not on whole cells)
' Should work on multiple words
' Does not handle non-contiguous text selection
   dim document,dispatcher,vcursor,oText,alpha,omega,ThisSeln,oBookmark As Object
   dim seln,nextword,nextbit as string
   dim loops,posn,nSelCount as integer
   dim ctogbmpv(0) as new com.sun.star.beans.PropertyValue
   On Error GoTo ExitPoint ' In case selection is not text
   nSelCount = thiscomponent.getCurrentSelection().getCount()
   if nSelCount>1 then
      msgbox ("There seems to be more than one piece of text selected." & _
      chr(10) & "Try making one selection.",0,"Case Conversion")
      goto ExitPoint
   endif
   loops=0
   document=ThisComponent.CurrentController.Frame
   dispatcher=createUnoService("com.sun.star.frame.DispatchHelper")
   vcursor=ThisComponent.currentcontroller.getViewCursor()
   ctogbmpv(0).Name="Bookmark"
   ctogbmpv(0).Value="ctogbm"
   dispatcher.executeDispatch(document, ".uno:DeleteBookmark", "", 0, ctogbmpv())
   dispatcher.executeDispatch(document, ".uno:InsertBookmark", "", 0, ctogbmpv())
GetSeln: ' Much here is taken from Andrew Brown and Andrew Pitonyak
   oText=vcursor.getText()
   alpha=vcursor.getStart()
   omega=vcursor.getEnd()
   ThisSeln=oText.createTextCursorByRange(alpha)
   ThisSeln.goToRange(omega,TRUE)
   seln=ThisSeln.getString()
   if seln<>"" then ' There is a selection - go and change case
      goto ChgCase
   endif ' make a selection to change
   dispatcher.executeDispatch(document, ".uno:GoToNextWord", "", 0, Array())
   dispatcher.executeDispatch(document, ".uno:WordLeftSel", "", 0, Array())
   loops=loops+1
   if loops=2 then goto FinishOff ' in case we failed to find any text to select
   goto GetSeln
ChgCase: 'Check case of seln and alter accordingly
   if seln=ucase(seln) then 'seln is already UPPER - set to lower
      dispatcher.executeDispatch(document, ".uno:ChangeCaseToLower", "", 0, Array())
      goto FinishOff
   endif
   if seln=lcase(seln) then 'seln is already lower - set to Title
      goto SetToTitle
   endif 'seln is probably mixed case - set to UPPER
      dispatcher.executeDispatch(document, ".uno:ChangeCaseToUpper", "", 0, Array())
      goto FinishOff
SetToTitle:
      vcursor.collapsetoStart()
      posn=0
      do while posn<len(seln)
         loops=0
         nextbit="1"
         do while nextbit=lcase(nextbit) and loops<2
            vcursor.goRight(1,TRUE)
            dispatcher.executeDispatch(document, ".uno:ChangeCaseToUpper", "", 0, Array())
            alpha=vcursor.getStart()
            omega=vcursor.getEnd()
            ThisSeln=oText.createTextCursorByRange(alpha)
            ThisSeln.goToRange(omega,TRUE)
            nextbit=ThisSeln.getString()
            loops=loops+1
         loop
            if instr(nextbit," ")>0 or instr(nextbit,chr(10))>0 then
               vcursor.goLeft(1,TRUE) ' To avoid problems due to punctuation marks
            endif
         dispatcher.executeDispatch(document, ".uno:WordRightSel", "", 0, Array())
         alpha=vcursor.getStart()
         omega=vcursor.getEnd()
         ThisSeln=oText.createTextCursorByRange(alpha)
         ThisSeln.goToRange(omega,TRUE)
         nextword=ThisSeln.getString()
         posn=posn + len(nextword)
         vcursor.collapsetoEnd()
      loop
FinishOff: 'set vcursor back to the original position
   oBookmark=ThisComponent.getBookmarks().getByName("ctogbm")
   ThisComponent.getCurrentController().select(oBookmark)
   dispatcher.executeDispatch(document, ".uno:DeleteBookmark", "", 0, ctogbmpv())
ExitPoint:
end Sub

Das Makro habe ich auf dieser Seite gefunden. Ueber Datei -> Speichern abspeichern und dann schliessen. Nun noch das Makro dem gewuenschten Shortcut zuordnen. Dafuer: Extras -> Anpassen, in den Tab Tastatur wechseln, als Tastenkombination Umschalt+F3 auswaehlen, als Funktion unter OpenOffice.org Makros -> user -> Standard -> Module1 das soeben gespeicherte CaseToggle auswaehlen und anschliessend (oben) auf Aendern klicken. Danach steht die gewuenschte Funktionalitaet zur Verfuegung