Tastatur-Layout und Dezimal-Trenner

24/02/2009 - 13:52 von Winfried Wolf | Report spam
Hallo,
ich mache grad ein Programm, das zwar von den Eingabemasken immer in
englisch ist, aber u.U. auf einem PC mit deutschen, amerikanischem oder
französischem Windows làuft. Die Bediener wiederum können aus aller
Herren Lànder kommen und u.U. auch mal eine andere Tastatur anstecken.
Die reine Änderung des Tastaturlayouts in Windows, z.B. über
Hotkey-Tasten, beeinflusst ja nicht das Gebietsschema und so bleiben
auch die Einstellungen bei SET SYSFORMATS ON gleich.
Was ich aber berücksichtigen muss, ist die Benutzung des
Dezimal-Trenners, da das entsprechende Zeichen auf dem Zehner-Block ja
ein anderes ist.
Mit dem API-Aufruf GetKeyboardLayout làsst sich das Tastatur-Layout
ermitteln und ist z.B. für ne US-Tastatur 0x0409 und ner deutschen
0x0407. Bei welchen Tatatur-Layouts ist aber noch ein Komma der
Dezimaltrenner?
Oder gibt es eine einfachere Art, mein Problem zu lösen?

Gruß,
Pari
 

Lesen sie die antworten

#1 Jürgen Wondzinski
24/02/2009 - 14:36 | Warnen spam
Hallo Pari (oder WiWo?)

Wie wàrs mit dem simplen SET SYSFORMTAS ON , womit VFP automatisch diese
Einstellungen vom aktuellen Windows übernimmt
Der Dezimaltrenner als auch das Tausenderzeichen, die Wàhrungsdarstellung
und auch die Datumsdarstellungen werden alle vom SET SYSFORMATS übernommen.
(Siehe dazu auch Extras/Optionen/Làndereinstellungen: So ziemlich alles auf
dieser Seite wird vom SYSFORMATS gesteuert.

Im Normalfall sollte sich ein Anwender mit seinem Account anmelden, und in
seinem Account ist dann auch die Tastatur bzw Sprache definiert, und somit
für VFP alles paletti. Wenn ich dich aber richtig versteh, dann melden die
sich über nen Sammelaccount an, und stöpseln ne mitgebrachte Tastatur ein?
Wozu?

Aber egal: Du könntest einfach den Keypress deiner Textbox so programmieren,
dass er sowohl Punkt als auch Komma frisst, egal welche Einstellung gerade
aktiv ist. Das Ganze noch getrennt nach Numerisch und Datum, sodass du auch
Datumswerte rein am 10er-Block erfassen kannst:


&& Textbox.Keypress:
IF BETWEEN(nKeyKode,44,47) AND nShiftAltCtrl = 0 && Punkt, Komma, Strich
etc
DO CASE
CASE INLIST(Type("This.Value","N", "B", "Y")
IF CHR(nKeyCode) # SET("POINT")
NODEFAULT
KEYBOARD SET("POINT") PLAIN CLEAR
ENDIF
CASE INLIST(TYPE("This.Value"), "D", "T")
IF CHR(nKeyCode) # SET("MARK")
NODEFAULT
KEYBOARD SET("MARK") PLAIN CLEAR
ENDIF
ENDCASE

ENDIF



Jürgen Wondzinski

Microsoft Visual FoxPro Technologieberater
Microsoft Most Valuable Professional seit 1996
"*´¨)
¸..´¸..*´¨) ¸..*¨)
(¸..´. (¸..` *
..`.Visual FoxPro: It's magic !
(¸..``..*

Ähnliche fragen