ich habe versucht die GUI http://obex.parallax.com/object/595 auf deutsch umzustellen.
VGA-Treiber wurde auf 256 Zeichen erweitert
Keyb-Treiber ist der bel-keyb.spin.
Beide Treiber arbeiten richtig und wurden auch schon in andere Projekte erfolgreich eingesetzt.
Die GUI nimmt aber nur Kleinbuchstaben entgegen.
Bei Grossbuchstaben verhält sie sich als wenn nichts eingegeben wurde.
In menuitem.spin habe ich bei der Ausgabe DrawText(pMode) den Inversmodus entfernt.
Aber irgendwo wird das 8 Bit im Zeichencode noch Bearbeitet, ich kann aber die Stelle nicht finden.
Code: Alles auswählen
'---------------------------------------------------------------------------
'Handle Keyboard input
'---------------------------------------------------------------------------
if KEYB.gotkey
idx := INPF[liveINPF].get_gzidx
if gz_elem[idx] & G_INIT == G_INIT 'is it set
tmp := INPF[liveINPF].Handler(KEYB.key) '<<----------
if tmp & $80000000
retVal := INPF[liveINPF].get_gzidx 'if enter was pressed
return retVal
Code: Alles auswählen
PUB Handler( pKeyCode ) | retVal, vgaIdx
'Handles key codes for a basic one line input field intended for simple data
'or commands (it is not a text editor :-)). The control uses the screen as a
'buffer so no extra memory is required to pass back the data to the caller.
'When the user presses enter a return value is bitfield encoded containing
'the address and size of the text entered. The caller then must get or use the
'data entered and then call the CLEAR method to reset the input field.
'
' returns 0 = ok, no action required
' 1 = not selected
' MSB set = enter pressed, caller to read string and clear field
' Returned word is bitfield encoded to return the address
' and size of the string entered. Encoded as follows:
' %100a_aaaa_aaaa_aaaa_0000_0000_ssss_ssss
' a = 13bit address s = 8 bit size
'
retVal := 0
vgaIdx := varVgaPos + varColIdx
if varStatus == 0
retVal := 1
else
case pKeyCode
$0D: 'carriage return
retval := $80000000 ' set MSB
$C8: 'backspace
if ( varColIdx )
vgaIdx--
varColIdx--
varCursorCol--
byte[varScreenPtr][vgaIdx] := " "
byte[varCxPtr][0] := varCursorCol 'move text cursor
$20 .. $FF: 'standard ASCII characters
if varColIdx < varWidth - 3 - varTitleWidth
byte[varScreenPtr][vgaIdx] := pKeyCode
varColIdx++
varCursorCol++
byte[varCxPtr][0] := varCursorCol 'move text cursor
return retVal
<<---------- Diese stelle bringt bei Grossbuchstaben scheinbar keinen Wert Zurück
EDIT
Die Zeile abändern in
Code: Alles auswählen
tmp := INPF[liveINPF].Handler(KEYB.key & $FF)
Die Tasten F7 und Ö haben beide die Codierung $D6