Ich habe nach einer Möglichkeit gesucht Unicode-Zeichen in ein Dokument einzufügen (um z.B. typografische Zeichen per Tastatur bzw. Icon einzufügen). Da bin ich auf folgendes Makro gestossen:
http://codesnippets.services.openoffice ... acter.snip
Allerdings hat Writer nach dem Einfügen quasi noch eine Markierung versucht. Wenn man also den Cursor per Taste nach links bewegt hat, wurde Text markiert. Nach dem Lesen des c't-Artikels Text-Dirigent, 16/06, S. 194 habe ich das Makro dann mal umprogrammiert und etwas ausführlicher deutsch kommentiert. Hier ist es:
Code: Alles auswählen
Sub insertUnicode
' Original hier:
' http://codesnippets.services.openoffice.org/Writer/Writer.InsertUnicodeCharacter.snip
' Abgewandelt von Torsten Landsiedel nach Lesen des ct-Artikels 16/06 - S. 194 ff
' Stand: Version 1.0 vom 06.10.2006
Dim objDokument As Object
Dim objText As Object
Dim objViewCursor As Object
Dim Character as String
' Dokument definieren
objDokument = GlobalScope.ThisComponent
' Text definieren
objText = objDokument.Text
' sichtbaren Cursor - Position holen
objViewCursor = objDokument.CurrentController.getViewCursor()
' Zeichen in Hexadezimal wird per clng in long-Wert umgewandelt
' chr macht aus dem long-Wert einen String
Character = chr(clng("&H2026"))
' Oben definiertes Zeichen an Cursorposition einfügen und dabei nicht überschreiben.
objText.insertString(objViewCursor, Character, false)
End Sub
Das Unicode-Zeichen bekomme ich ja über Einfügen - Sonderzeichen heraus. Aber da stehen längst nicht alle drin. Und noch schlimmer: Wenn sie nicht drin stehen, lassen sie sich auch meist nicht darstellen. Ich kenne mich mit diesem internationalen Zeichensatz-Unicode-Kram noch nicht so aus. Aber wenn z.B. im Unicode 2009 ein schmales Leerzeichen ist (Laut OOo-Wiki über Leerzeichen), wieso kann ich es dann nicht darstellen? Da kommt bei mir immer ein kleines Quadrat bei raus.
Oder die hier im Beispiel verwendet Ellipse (Auslasszeichen, drei Punkte nebeneinander) ist über ALT+0133 (Nummernblock!) zu erreichen, oder aber Unicode 2026. Eine Zuordnung Dezimal - Hexadezimal ist das also nicht. Beim geschützen Leerzeichen klappt es (00A0 Hex und 160 Dez).
So richtig schlau werde ich nicht daraus...
Hat jemand eine Idee?