Eingabe von Unicodezeichen via Tastatur und Code

Moin.

In diversen Hinweisen liest man, dass via
STRG+UMSCHALT+U, Codeeingabe, ENTER
Unicozeichen eingegeben werden können.

LO belegt jedoch in der aktuellen Version STRG+UMSCHALT+U mit der
Funktion "Unterstrichen".

Die Doku gibt zu der Sache nix her.
In "Einfügen > Sonderzeichen" haben die Entwickler ein Eingabefeld für
den Code per Tastatur vergessen.

Wie geht es bitte zur Zeit?

Beispiel:
Ich möchte das Zeichen U2009 eingeben, ein schmales Leerzeichen.

Am Rande: Ich gehe mal davon aus, dass LO-Dokumente per Default als
UTF-8 gespeichert werden.

Danke.

Andreas

Hallo,

in Windows:

Registry key
HKEY_CURRENT_USER\Control Panel\Input Method\EnableHexNumpad auf Wert 1
setzen bzw. hinzufügen (String)

dann Alt Taste gedrückt halten und auf der numerischen Tastatur die +
Taste drücken. Danach (noch immer bei gedrückter Alt-Taste) den
hexadezimalwert des Zeuchens mit der numerischen (und a-f der normalen)
Tastatur eingeben. Danach die Alt- Taste freigeben.

mfg
Helmut

Helmut Leininger schrieb:

Registry key
HKEY_CURRENT_USER\Control Panel\Input Method\EnableHexNumpad auf Wert 1
setzen bzw. hinzufügen (String)

dann Alt Taste gedrückt halten und auf der numerischen Tastatur die +
Taste drücken. Danach (noch immer bei gedrückter Alt-Taste) den
hexadezimalwert des Zeuchens mit der numerischen (und a-f der normalen)
Tastatur eingeben. Danach die Alt- Taste freigeben.

Danke für den Tipp.

Windows (7) verwende ich zwar, aber meine Tastatur verfügt über keinen
Ziffernblock.

Ich hatte gehofft, es gibt ein Tastenkürzel unter LO.

Gruß, Andreas

Hallo Andreas,

wenn kein eigener Ziffernblock vorhanden ist, dann gibt es sicher eine
"num" Taste (eventuell in Verbindung mit Fn), die die Ziffern über den
Buchstaben j k l ... freischaltet. Die wirken dann wie der numerische
Ziffernblock

mfg
Helmut

Hallo,

eine Andere Möglichkeit wären Makros (Beispiel siehe Anhang
https://www.dropbox.com/s/zw774dbrrf38v5h/Sonderzeichen.bas) und diese
eventuell mit einer Tastenkombination verknüpfen.

mfg
Helmut

Helmut Leininger schrieb:

Registry key
HKEY_CURRENT_USER\Control Panel\Input Method\EnableHexNumpad auf Wert 1
setzen bzw. hinzufügen (String)

dann Alt Taste gedrückt halten und auf der numerischen Tastatur die +
Taste drücken. Danach (noch immer bei gedrückter Alt-Taste) den
hexadezimalwert des Zeuchens mit der numerischen (und a-f der normalen)
Tastatur eingeben. Danach die Alt- Taste freigeben.

Danke für den Tipp.

Windows (7) verwende ich zwar, aber meine Tastatur verfügt über keinen
Ziffernblock.

Ich hatte gehofft, es gibt ein Tastenkürzel unter LO.

Gruß, Andreas

Ich habe 1 zu dieser E-Mail gehörende Datei hochgeladen:
* Sonderzeichen.bas (15.1 KB) hochgeladen auf Dropbox: http://db.tt/o6SxeKQ0

Helmut Leininger schrieb:

eine Andere Möglichkeit wären Makros (Beispiel siehe Anhang
https://www.dropbox.com/s/zw774dbrrf38v5h/Sonderzeichen.bas) und diese
eventuell mit einer Tastenkombination verknüpfen.

Danke für's Hochladen.
Habe ich mir angesehen.
Das Makro fügt spezifische Zeichen, bietet jedoch kein Eingabefeld für
den Code eines beliebigen Unicodezeichens.

Nochmal zurück zum Ausgangsposting:
Gab' es so eine Funktion je in OOo oder LO?

meines Wissens nicht.

Hallo Andreas,

Nochmal zurück zum Ausgangsposting:
Gab' es so eine Funktion je in OOo oder LO?

So weit mir bekannt ist: Nein.

Das einzige OOo/LO-spezifische, das mir dazu einfällt:

  Einfügen/Sonderzeichen

Dort wird eine Tabelle aller Zeichen und deren Unicode angezeigt.

Zur Tastatur:
Ich verwende eine Apple Wireless am PC.

Ich habe hier einen DELL Vostro 3360, dem fehlen die 10er-Block Tasten
ebenfalls. Scheint ein Trend zu sein... Macht mit manchen alten
Programmen Probleme, die direkt den Scancode einer Taste abfragen.

Gruß,
Michael

Michael Höhne schrieb:

> Nochmal zurück zum Ausgangsposting:
> Gab' es so eine Funktion je in OOo oder LO?

So weit mir bekannt ist: Nein.

Das einzige OOo/LO-spezifische, das mir dazu einfällt:

  Einfügen/Sonderzeichen

Dort wird eine Tabelle aller Zeichen und deren Unicode angezeigt.

Das kannte ich, klar.

Aber dieses Interface halte ich für ziemlich unbrauchbar für eine so
immense Zahl von Zeichen.
Hat ja nicht mal eine Suchfunktion.

Und wer will in einem riesigen Zeichenvorrat schon endlos in mehreren
Tabellen herumblättern um dort die Nadel im Heu zu finden.

Andreas

Verwende ich nur sporadisch und nur wenn ich den Code bereits kenne.

Gruß,
Michael

Guten Tag Andreas Borutta,

In diversen Hinweisen liest man, dass via
STRG+UMSCHALT+U, Codeeingabe, ENTER
Unicozeichen eingegeben werden können.

Wie geht es bitte zur Zeit?

Ich benutze <Alt>+Code (auf dem Ziffernblock)

Beispiel:
Ich möchte das Zeichen U2009 eingeben, ein schmales Leerzeichen.

<Alt> 2009 ergibt dann ┘ (Hoffentlich wird das in der eMail so richtig dargestellt)

Hallo,

Guten Tag Andreas Borutta,

In diversen Hinweisen liest man, dass via
STRG+UMSCHALT+U, Codeeingabe, ENTER
Unicozeichen eingegeben werden können.

Wie geht es bitte zur Zeit?

Ich benutze <Alt>+Code (auf dem Ziffernblock)

Beispiel:
Ich möchte das Zeichen U2009 eingeben, ein schmales Leerzeichen.

<Alt> 2009 ergibt dann ┘ (Hoffentlich wird das in der eMail so richtig dargestellt)

Alt und der Code geht nur für Zeichen bis dezimal 255 (und nicht für
Unicode, der darüber ist). Dein Eingabebeispiel stimmt auch nicht ganz.
Es gibt nämlich nicht das schmale Leerzeichen, sondern eben den kleinen
Haken: 2009 (dez) = 7d9 (hex), da nur das recht Byte bei dieser Art der
Eingabe zählt: d9 (hex) = 217 (dez) ==> Eingabe Alt+217 gibt das gleiche
Ergebnis.

Unicode geht eben nur mit Alt gedrückt halten, dann numerisches + (auf
dem Ziffernblock) und dann Ziffern und Buchstaben a bis f, dann Alt
loslassen.

Helmut

Jörg Kleinfeld schrieb:

Ich benutze <Alt>+Code (auf dem Ziffernblock)

Siehe meine andere Antwort:
Meine Tastatur besitzt keinen Ziffernblock und auch eine Emulation via
FN-Taste ist nicht möglich.

OK, ich sehe schon.
Das ist ein Betriebssystemproblem und keines von LO.

Word bietet ein Kürzel:
http://www.tippscout.de/word-sonderzeichen-ueber-unicode-eingeben_tipp_4123.html

Hätte ja sein können, dass es sowas bei LO auch gibt.

Andreas

Jörg Kleinfeld schrieb:

Ich benutze <Alt>+Code (auf dem Ziffernblock)

Siehe meine andere Antwort:
Meine Tastatur besitzt keinen Ziffernblock und auch eine Emulation via
FN-Taste ist nicht möglich.

OK, ich sehe schon.
Das ist ein Betriebssystemproblem und keines von LO.

Word bietet ein Kürzel:
http://www.tippscout.de/word-sonderzeichen-ueber-unicode-eingeben_tipp_4123.html

Hätte ja sein können, dass es sowas bei LO auch gibt.

Müsste über ein Makro lösbar sein. Vielleicht kann jemand einen schreiben?

Andreas

Helmut

Es sollte nicht allzu schwer sein, das als Makro nachzubilden. Hier
meine Lösung:

Sub UNICODE
  Dim myAuswahl as Object
  myAuswahl = ThisComponent.getCurrentSelection()
  If IsNull( myAuswahl ) Then
    MsgBox "Fehler: Objekt ""Auswahl"" = NULL"
  Else
    Dim myInhalt as Object
    myInhalt = myAuswahl.getByIndex(0)
    If IsNull( myInhalt ) Then
      MsgBox "Fehler: Objekt ""Inhalt"" = NULL"
    Else
      Dim myCode as String
      myCode = myInhalt.getstring()
      If Len( myCode ) <> 4 Then
        MsgBox "Fehler: Selektion ist nicht genau 4 Stellen lang"
      Else
        Dim myValue as Long
        myValue = clng( "&H"&myCode )
        If myValue = 0 Then
          MsgBox "Fehler: Selektion ist kein Hexadezimalwert"
        Else
          myCode = Chr( myValue )
          myInhalt.setstring ( myCode )
        End If
      End If
    End If
  End If
End Sub

Einbinden über 'Ansicht => Symbolleisten => Anpassen => Tastatur =>
Tastenkombinationen="ALT-C" => Bereich="Makros [...]" =>
Funktionen="UNICODE" => ÄNDERN(Button)'.

Wolfgang

Wolfgang Jäth schrieb:

Es sollte nicht allzu schwer sein, das als Makro nachzubilden. Hier
meine Lösung:

Sub UNICODE
  Dim myAuswahl as Object
  myAuswahl = ThisComponent.getCurrentSelection()
  If IsNull( myAuswahl ) Then
    MsgBox "Fehler: Objekt ""Auswahl"" = NULL"
  Else
    Dim myInhalt as Object
    myInhalt = myAuswahl.getByIndex(0)
    If IsNull( myInhalt ) Then
      MsgBox "Fehler: Objekt ""Inhalt"" = NULL"
    Else
      Dim myCode as String
      myCode = myInhalt.getstring()
      If Len( myCode ) <> 4 Then
        MsgBox "Fehler: Selektion ist nicht genau 4 Stellen lang"
      Else
        Dim myValue as Long
        myValue = clng( "&H"&myCode )
        If myValue = 0 Then
          MsgBox "Fehler: Selektion ist kein Hexadezimalwert"
        Else
          myCode = Chr( myValue )
          myInhalt.setstring ( myCode )
        End If
      End If
    End If
  End If
End Sub

Dein Makro funktioniert perfekt.

Ganz herzlichen Dank Wolfgang! :slight_smile:

Andreas

An Wolfgang Jäth:

Hallo und guten Morgen Wolfgang,

Könntest Du Dein Makro so interpretieren, damit sich andere auch
weiterbilden können?

Es sollte nicht allzu schwer sein, das als Makro nachzubilden. Hier
meine Lösung:

z.B. so: Progr.-Sprache: . . .

Sub UNICODE
  Dim myAuswahl as Object

Übersetzung je Progr.-Zeile: Lies: deutscher Text: . . . .
'Dimensioniere Auswahl als Objekt'

  myAuswahl = ThisComponent.getCurrentSelection()
  If IsNull( myAuswahl ) Then
    MsgBox "Fehler: Objekt ""Auswahl"" = NULL"
  Else
    Dim myInhalt as Object
    myInhalt = myAuswahl.getByIndex(0)
    If IsNull( myInhalt ) Then
      MsgBox "Fehler: Objekt ""Inhalt"" = NULL"
    Else
      Dim myCode as String
      myCode = myInhalt.getstring()
      If Len( myCode ) <> 4 Then
        MsgBox "Fehler: Selektion ist nicht genau 4 Stellen lang"
      Else
        Dim myValue as Long
        myValue = clng( "&H"&myCode )
        If myValue = 0 Then
          MsgBox "Fehler: Selektion ist kein Hexadezimalwert"
        Else
          myCode = Chr( myValue )
          myInhalt.setstring ( myCode )
        End If
      End If
    End If
  End If
End Sub

Einbinden über 'Ansicht => Symbolleisten => Anpassen => Tastatur =>
Tastenkombinationen="ALT-C" => Bereich="Makros [...]" =>
Funktionen="UNICODE" => ÄNDERN(Button)'.

Wolfgang

Alles Gute !
     JoLa

Hallo Jost,

Könntest Du Dein Makro so interpretieren, damit sich andere auch
weiterbilden können?

Ein interessantes Anliegen :slight_smile:

Was dagegen, wenn ich es mal versuche? Reizt mich irgendwie ...

Wolfgang kann ja dann kommentieren/korrigieren.

Es sollte nicht allzu schwer sein, das als Makro nachzubilden. Hier
meine Lösung:

z.B. so: Progr.-Sprache: . . .

ist vermutlich OOoBasic, also die "Standard-Programmiersprache" von OpenOffice.org und jetzt eben LibreOffice. Einen neuen Namen (wie z.B. LibreBasic) hat die Sprache meines Wissens noch nicht erhalten.

------------------------START------------------------

Sub UNICODE
   Dim myAuswahl as Object

Übersetzung je Progr.-Zeile: Lies: deutscher Text: . . . .
'Dimensioniere Auswahl als Objekt'

Mein Vorschlag:
Deklariere die Variable "myAuswahl" vom Typ "Objekt"

(Keine Ahnung, ob das Wort "Dimensionieren" gibt)

   myAuswahl = ThisComponent.getCurrentSelection()

Weise der Variablen die aktuelle Selektion zu (also was mit der Maus oder per Tastatur gerade markiert wurde)

   If IsNull( myAuswahl ) Then

Falls nix markiert ist,

     MsgBox "Fehler: Objekt ""Auswahl"" = NULL"

gib in einer Message-Box (also einem Hinweis-Fensterchen) die Meldung "Fehler: Objekt ""Auswahl"" = NULL" aus

   Else

ansonsten (also WENN irgendwas markiert ist)

     Dim myInhalt as Object

deklariere die Variable myInhalt ebenfalls als Objekt

     myInhalt = myAuswahl.getByIndex(0)

und weise ihr den ersten Teil (Abschnitt? Portion?) der Auswahl zu

(vermutlich kann eine Auswahl aus mehreren Teile bestehen, möglicherweise, wenn nicht-zusammenhängende Objekte mittels Strg+Markierung zusammen markiert wurden)

(oder ist damit der Wert von myAuswahl ab Position 0, also vom ersten Zeichen an, gemeint???)

     If IsNull( myInhalt ) Then

Falls myInhalt ein leeres Objekt ist,

       MsgBox "Fehler: Objekt ""Inhalt"" = NULL"

gib die Meldung "Fehler: Objekt ""Inhalt"" = NULL" aus

     Else

ansonsten (also wenn die Variable etwas enthält)

       Dim myCode as String

deklariere die Variable myCode als Zeichenkette

       myCode = myInhalt.getstring()

und weise ihr den Inhalt der Variable myInhalt zu.

       If Len( myCode ) <> 4 Then

Sollte die Zeichenkette ungleich 4 Zeichen sein,

         MsgBox "Fehler: Selektion ist nicht genau 4 Stellen lang"

gib die obige Fehlermeldung raus.

       Else

Ansonsten (also wenn die Zeichenkette genau 4 Zeichen lang ist)

         Dim myValue as Long

deklariere myValue als Long (vermutlich eine Integer-Variante)

         myValue = clng( "&H"&myCode )

und weise ihr die (nach Long konvertierte, also dezimale) Zahl zu, die sich aus (der Hexadezimalzahl) "&H" und myCode ergibt

         If myValue = 0 Then

Wenn der Wert der Zahl 0 ist,

           MsgBox "Fehler: Selektion ist kein Hexadezimalwert"

dann wars kein Hex-Wert,

         Else

Ansonsten (ein von 0 abweichender Wert liegt vor)

           myCode = Chr( myValue )

weise der Variable myCode das ASCII-Zeichen zum Wert myValue zu

           myInhalt.setstring ( myCode )

und überschreibe damit den Inhalt der Variable myInhalt

(die ja bekanntlich die zuvor markierte Stelle/Zeichenfolge enthalten hat)

         End If
       End If
     End If
   End If
End Sub

Ende aller Verzweigungen und der Routine.

------------------------ENDE-------------------------

Passt das so?

Schöne Grüße,
Nino

Hallo Nino,

Hallo Jost,

Könntest Du Dein Makro so interpretieren, damit sich andere auch
weiterbilden können?

meine ganz eigene Meinung zu diesem Thema:
Ich habe früher (länger als 10 Jahre zurück) mal Basic programmiert und kann sagen, abgesehen von den Objekten von LibreOffice, die ich nicht kenne, habe ich den Code verstanden.
Es gibt 2 Kategorien von Usern, die Zielpersonen einer entsprechenden Dokumentierung sein könnten, Laien und Kenner.
1. Die Laien werden auch nichts mit den Kommentaren anfangen, weil sie sich mit der Programmierung von Grund auf beschäftigen müssen um was damit anfangen zu können.
2. Für Kenner ist es kalter Kaffee, weil der Code einfach ist. Man muss sich nur mit den Objekten die LO bereitstellt beschäftigen. Das kann man in keinen Kommentarzeilen unterbringen, da muss man das Programmier-Handbuch lesen.

So ein Projekt wäre vielleicht interessant auf einer Wiki-Seite als Beispielcode und Einstieg in LibreOffice-Basic Programmierung, hier auf der Liste verursacht es nur unnötiges Rauschen.

Aber bitte schön, wie anfänglich geschrieben: Nur meine Meinung zum Thema. Ich weiß ja wo die Entf-Taste auf meiner Tastatur liegt.

An Andreas Borutta:

Hallo Andreas:

Anfrage Unten:

Wolfgang Jäth schrieb:

Es sollte nicht allzu schwer sein, das als Makro nachzubilden. Hier
meine Lösung:

Sub UNICODE
  Dim myAuswahl as Object
  myAuswahl = ThisComponent.getCurrentSelection()
  If IsNull( myAuswahl ) Then
    MsgBox "Fehler: Objekt ""Auswahl"" = NULL"
  Else
    Dim myInhalt as Object
    myInhalt = myAuswahl.getByIndex(0)
    If IsNull( myInhalt ) Then
      MsgBox "Fehler: Objekt ""Inhalt"" = NULL"
    Else
      Dim myCode as String
      myCode = myInhalt.getstring()
      If Len( myCode ) <> 4 Then
        MsgBox "Fehler: Selektion ist nicht genau 4 Stellen lang"
      Else
        Dim myValue as Long
        myValue = clng( "&H"&myCode )
        If myValue = 0 Then
          MsgBox "Fehler: Selektion ist kein Hexadezimalwert"
        Else
          myCode = Chr( myValue )
          myInhalt.setstring ( myCode )
        End If
      End If
    End If
  End If
End Sub

Dein Makro funktioniert perfekt.

Und in welche Umgebung hast Dur das eingebunden ?

Ganz herzlichen Dank Wolfgang! :slight_smile:

Andreas

Alles Gute !
     JoLa

Hallo Jost,

Könntest Du Dein Makro so interpretieren, damit sich andere auch
weiterbilden können?

Ehrlich gesagt hab ich das ziemlich schnell hin geschmiert, ohne mir
größere Gedanken darüber zu machen; sonst hätte ich zumindest noch einen
kurzen Kommentar mit einer Beschreibung über den Zweck der Prozedur
eingefügt; irgend was in der Art:

REM Liest einen markierten Text ein, und ersetzt diesen (sofern
REM möglich) durch das entsprechende Unicode-Zeichen.
REM Der markierte Text muss eine genau 4-stellige hexadezimale
REM Ziffernfolge darstellen.
REM Beispiel: '2212' -> Sigma-Zeichen

o. ä.

Und im Nachhinein betrachtet könnte man einige Variablen sowie die
Prozedur selbst durchaus etwas [tm] sinnvoller benennen. Z. B.
könnte ...

Sub UNICODE

... besser 'HEXSTR2UNICODE' heißen ... ;-/

   If IsNull( myAuswahl ) Then

Falls nix markiert ist,

Nein; falls bei der vorherigen Zuweisung kein Objekt zugewiesen werden
konnte.

Das kommt zwar nur gaaaaaaaanz selten vor, und wenn, ist das i. d. R.
ein Signal dafür, daß die Rechnerhardware hoffnungslos überfordert ist.
Aber Fehler sollten nun mal grundsätzlich abgefangen werden, egal wie
(un)wahrscheinlich sie sind. Irgendwo und irgendwann *werden* sie
auftreten (man Murphys Law).

ansonsten (also WENN irgendwas markiert ist)

     Dim myInhalt as Object

Besser: 'myMarkierung'.

deklariere die Variable myInhalt ebenfalls als Objekt

     myInhalt = myAuswahl.getByIndex(0)

und weise ihr den ersten Teil (Abschnitt? Portion?) der Auswahl zu

Die /erste/ Markierung.

OO erlaubt grundsätzlich das Markieren /mehrerer/ Textabschnitte
gleichzeitig; das muss von dem Objekt natürlich berücksichtigt werden.

(vermutlich kann eine Auswahl aus mehreren Teile bestehen,
möglicherweise, wenn nicht-zusammenhängende Objekte mittels
Strg+Markierung zusammen markiert wurden)

Genau.

     If IsNull( myInhalt ) Then

Falls myInhalt ein leeres Objekt ist,

Yepp (s. o.).

       myCode = myInhalt.getstring()

und weise ihr den Inhalt der Variable myInhalt zu.

Welche direkt die (erste; s. o.) Markierung im Text repräsentiert.

         myValue = clng( "&H"&myCode )

und weise ihr die (nach Long konvertierte, also dezimale) Zahl zu, die
sich aus (der Hexadezimalzahl) "&H" und myCode ergibt

Aus myCode, ja; das '&H' ist nur ein Präfix, welches dem Compiler
signalisiert, daß es sich hier um eine hexadezimale Darstellung handelt.
Bei einem Wert wie '221A' (Wurzelzeichen) wäre das zwar offensichtlich,
aber woran könnte er das bei einem Wert wie z. B. '2212' (Sigma- oder
Summenzeichen) erkennen?

           myCode = Chr( myValue )

weise der Variable myCode das ASCII-Zeichen zum Wert myValue zu

           myInhalt.setstring ( myCode )

und überschreibe damit den Inhalt der Variable myInhalt

Den Text, auf den das Objekt myInhalt verweist; oder kurz gesagt der
markierte Text (daher wäre 'myMarkierung' ein besserer Variablenname; s.
o.).

Übrigens hätte man diese beiden Zeilen auch problemlos zusammenfassen
können:

myInhalt.setstring ( Chr( myValue ) )

Passt das so?

Ja.

Wolf '<kopfschüttelnd> da hab ich ja was losgetreten ... :-/
</kopfschüttelnd>' gang