Tastatureingaben umsetzen

Moderator: Moderatoren

Antworten
Ewald
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 475
Registriert: Sa, 08. Apr 2006 14:07
Wohnort: Datteln
Danksagung erhalten: 3 Mal
Kontaktdaten:

Tastatureingaben umsetzen

Beitrag von Ewald »

Hallo und guten Tage zusammen,
ich sitzte hier vor meiner neuen Cherry-Tastatur -Deutsch-Russisch- und beschäftige mich mal wieder mit meinem Hobby kyrillische Schriftzeichen. Da alle Probleme mit dem Speichern dieser Zeichen gelöst sind, wollte ich die Eingabe mit der Tastatur komfortabler gestalten. Bisher habe ich das bei vorhandenen Texten immer über die Zwischeablage oder aber mit dem ALT Taste und dem Zehnerblock gemacht. (Die kyrillischen Buchstaben befinden sich jenseits chr(125))
Irgendwie hatte ich gehofft, dass man auf einer solchen Tastatur von deutsch auf russisch umschalten kann und die Tastatur dann unterschiedliche Codes an den PC sendet. Geht aber nicht. Die Tasten sind nur doppelt beschriftet. Die Wirkung tritt erst dann ein, wenn man Windows von Deutsch in das Eingabegebiet Russisch umschaltet. Dann geht das z.B. im Word.
In Xbase passiert nichts und das Umschalten auf die Codepage 204 hat nur die Auswirkung, dass wieder die berühmten Fragezeichen auf dem Bildschirm erscheinen. :angry4:
Wenn ich auf der Tastatur z.B. ein "L" drücke, verarbeitet das System chr(76).
"L" ist aber auch mit dem kyrillischen Buchstaben "д" belegt. Das wäre dann chr(142).
Um aus dieser Nummer rauszukommen, müßte ich wahrscheinlich eine Umsetzungstabelle (für alle Tasten) erstellen. chr(76)=chr(142). Das "L" sollte überhaupt nicht auf dem Schirm erscheinen sondern sofort der kyrillische Buchstabe "д". Das Erstellen der Tabelle ist kein großes Problem, aber die Umsetzung.
Ist das wohl denkbar, dass bei einer Eingabe in ein Eingabefeld jeder Buchstabe sofort abgefangen, in einer Funktion umgesetzt und dann erst angezeigt wird ?
Benutzeravatar
Wolfgang Ciriack
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2932
Registriert: Sa, 24. Sep 2005 9:37
Wohnort: Berlin
Hat sich bedankt: 13 Mal
Danksagung erhalten: 34 Mal
Kontaktdaten:

Re: Tastatureingaben umsetzen

Beitrag von Wolfgang Ciriack »

Hallo Ewald,
ich mache das in einem DCMULTILINE mit dem keyboard slot um nur Großbuchstaben zu erhalten.
Vielleicht kannst du das ja adaptieren.

Code: Alles auswählen

local bUpper := {|a,b,o,x,n|x:=o:getdata(), ;
                       n:=o:pos(), ;
                       n--,;
                       IIF(n>0,;
                       (c:=Upper(substr(x,n,1)), ;
                       o:delete(n,1),;
                       o:insert(,c)),nil)}
......
@2.6,1.00 DCMULTILINE m->notizen ;
       FONT..... EVAL {|oMle|oMle:keyboard := bUpper}
Viele Grüße
Wolfgang
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: Tastatureingaben umsetzen

Beitrag von AUGE_OHR »

Ewald hat geschrieben:ich sitzte hier vor meiner neuen Cherry-Tastatur -Deutsch-Russisch- und beschäftige mich mal wieder mit meinem Hobby kyrillische Schriftzeichen. Da alle Probleme mit dem Speichern dieser Zeichen gelöst sind, wollte ich die Eingabe mit der Tastatur komfortabler gestalten.
...
Irgendwie hatte ich gehofft, dass man auf einer solchen Tastatur von deutsch auf russisch umschalten kann und die Tastatur dann unterschiedliche Codes an den PC sendet. Geht aber nicht. Die Tasten sind nur doppelt beschriftet. Die Wirkung tritt erst dann ein, wenn man Windows von Deutsch in das Eingabegebiet Russisch umschaltet.
da du "umschalten" kannst hast du wohl einen IME installiert ... nur ist das auch der "richtige" ?
Auch wenn es in Word funktioniert muss das noch nicht in Xbase++ funktionieren.

Ich habe doch chinesisch auf dem Notebook mit "original" OS(), also der "richtige" IME. Trotzdem
habe ich zunächst lateinische Zeichen und muss erst auf "Pejin" umschalten damit es funktioniert.

Das ganz ist aber auf dem chinesischen System den wenn ich auf dem deutschen System bin
MUSS ich einen UniCode Font benutzen damit ich die "eingeben" kann.
Ich nehme dafür ArialUNI.TTF aus M$ Office welches auf "beiden" PC´s installiert ist.
gruss by OHR
Jimmy
Ewald
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 475
Registriert: Sa, 08. Apr 2006 14:07
Wohnort: Datteln
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: Tastatureingaben umsetzen

Beitrag von Ewald »

Hallo Jimmi,
mit Umschalten meine ich das Eingabegebiet von WIN XP, in dem ich standardmäßig von DE auf US umschalten kann. Da habe ich noch russisch aktiviert.
Wie ich das sehe, hat das aber alles nichts mit ASCII Codes zu tun, die ich für XBASE++ brauche.
Wenn ich das russische "д" haben will, muss ich mit Arial und Codepage 204 chr(142) an den Rechner geben. Das kann ich aber mit einer Tastatur nicht, da ich damit nur bis chr(125) komme. Darüber sind dann die Sonderzeichen. Und es nutzt mir auch nichts, wenn Cherry auf das deutsche "L" zusätzlich den Buchstaben "д" druckt.
Wie oben geschrieben hatte ich beim Kauf der Tastatur wirklich gedacht, es würde auf einer solchen Tastatur einen Knopf oder sonstwas geben, mit dem man hardwaremäßig von deutsch auf russisch umschalten kann und der dann auch bewirkt, dass die Taste "L" nicht chr(76) sonder dann chr(142) sendet.
Aber das bekomme ich mit dem Vorschlag von Wolfgang irgendwie in den Griff. Bin schon mitten in der Testphase ;-)

@Wofgang,
danke für den Tip. (Hier hätte ich übrigens für deinen Zweck auch erwartet, das man das mit picture "@!" machen kann. Gut dass ich nicht auf dieses Problem gestoßen bin)

Gruß
Ewald
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: Tastatureingaben umsetzen

Beitrag von AUGE_OHR »

Ewald hat geschrieben:Wenn ich das russische "д" haben will, muss ich mit Arial und Codepage 204 chr(142) an den Rechner geben.
du meinst sicherlich Arial "normal", wo es "auch" verschiede Codepages gibt.
Ich bin aber der Meinung das die "System" Fonts NICHT UniCode sind !

Deshalb sprach ich ja auch von ArialUNI.TTF und da wird, je nach Codepage, auch für > CHR(128)
dann die Tastatur richtig "gemappt".
gruss by OHR
Jimmy
Ewald
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 475
Registriert: Sa, 08. Apr 2006 14:07
Wohnort: Datteln
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: Tastatureingaben umsetzen

Beitrag von Ewald »

Hallo Jimmy,
diese babylonische Sprachverwirrung macht mich etwas ratlos. Ist mir aber so wichtig, dass ich noch mal ganz gezielt nachfragen möchte.
Wenn ich dich richtig verstehe, sollte ich auch ohne Umsetzungstabelle weiterkommen.
Ich habe auch "Arial Unicode MS" = "ArialUNI.TTF" auf meinem Rechner. Die Schriftart ist 23566 KB und vom 12.1.1999.
Wenn ich mir mit dieser Schriftart und mit Codepage 204 einen font create

Code: Alles auswählen

ofont:= xbpfont():new()
ofont:familyname:="Arial Unicode MS"
ofont:codepage:=204
ofont:create()
und mit diesem Font dann chr(76) = "L" doppelt belegt mit dem russischen "д" ausgebe, muss dann nach deiner Kenntnis der deutsche oder der russische Buchstabe erscheinen ?
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: Tastatureingaben umsetzen

Beitrag von AUGE_OHR »

Ewald hat geschrieben:diese babylonische Sprachverwirrung macht mich etwas ratlos.
:sign1:
Ewald hat geschrieben:Ist mir aber so wichtig, dass ich noch mal ganz gezielt nachfragen möchte.
:thumbright:
Ewald hat geschrieben:Wenn ich dich richtig verstehe, sollte ich auch ohne Umsetzungstabelle weiterkommen.
Ich habe auch "Arial Unicode MS" = "ArialUNI.TTF" auf meinem Rechner. Die Schriftart ist 23566 KB und vom 12.1.1999.
Wenn ich mir mit dieser Schriftart und mit Codepage 204 einen font create

Code: Alles auswählen

ofont:= xbpfont():new()
ofont:familyname:="Arial Unicode MS"
ofont:codepage:=204
ofont:create()
und mit diesem Font dann chr(76) = "L" doppelt belegt mit dem russischen "д" ausgebe, muss dann nach deiner Kenntnis der deutsche oder der russische Buchstabe erscheinen ?
russisch, wobei ich davon ausgehe das 204 auch "richtig" ist.

bei mir sieht das so aus

Code: Alles auswählen

METHOD ArtClass:create( oParent, oOwner, aPos, aSize, aPP, lVisible )
LOCAL aPres    := {{ XBP_PP_BGCLR, SP_ACOLOR() }}
LOCAL lisTheme := IsThemeActive()
LOCAL oFnt     := XbpFont():new()

   oFnt:familyName := "Arial Unicode MS"
   oFnt:nominalPointSize := 11
   oFnt:bold     := .F.
   oFnt:codePage := 134
*   oFnt:generic := .T.
   oFnt:create()
...
// zum testen
*   ::oChina:rbDown := {| aPos, uNIL, oSelf | ChangeFont(SELF) }
   ::oChina:rbDown := {| aPos, uNIL, oSelf | ::ChCopy2CLP(oSelf)  }

   //
   // XP Manifest will cause wrong chinese Output on German OS()
   //
   IF lisTheme
      SetThemesOn(.F.)
   ENDIF
   ::oChina:create()
   ::oChina:setData()
   ::oChina:setfont( oFnt )
   IF lisTheme
      SetThemesOn(.T.)
   ENDIF
so damit habe ich also die "Ausgabe" der chinesischen Zeichen auf einem deutschen OS()

zum "Eingeben" muss ich "jedesmal", wenn ich das XbpSLE zum "editieren" freigebe, erst das
Keyboard Layout "umschalten" auf chinesisches "Pejin" den sonst habe ich ja immer noch das
"deutsche" Tastatur "Layout" und lateinische Zeichen.

der Hinweis it XP Manifest hast du ja gesehen, keine Ahnung ob es bei kyrillisch (DBCS ?) auch so
ist und SLEPic kann man wegen DBCS auch nicht verwenden. Ob Roger in der Express++ mit DBCS
umgehen kann hab ich noch nicht ausprobiert, aber im Prinzip reicht ja 1x XbpSLE um es aus-zu-
probieren :)
gruss by OHR
Jimmy
Antworten