FreeBasic: Umlaute
Freebasic verwendet einen anderen Zeichensatz als die IDE, was zu Darstellungsfehlern führt.
Beispiel:
print "Drücken sie eine Taste"
sleep
Für die Lösung dieses Problems gibt es verschiedene Ansätze.
ae statt ä
[Bearbeiten]Da die Umlaute in der deutschen Sprache nicht in Blockbuchstaben vorkommen, musste eine ähnliche Lösung gefunden werden. Es wurden die Umlaute einfach durch ihre Vokale mit einem e hinten dran ersetzt. So kann man es auch in FreeBASIC machen.
Also wird
ä zu ae, ö zu oe, ü zu ue.
Ersetzen durch andere ASCII Zeichen
[Bearbeiten]ASCII heißt, dass der gewünschte Buchstabe durch ein meist auf den lateinischen Lettern basierendes Zeichen ersetzt wird. siehe Wikipedia Eintrag
? "š" 'Ü
? "„" 'ä
? "Ž" 'Ä
? "”" 'ö
? "™" 'Ö
sleep
Doch nicht jeder Umlaut kann durch ein ASCII-Zeichen ersetzt werden. Deshalb sind andere Möglichkeiten wie 'CHR' und 'CharToOEM' nötig.
Chr
[Bearbeiten]Hier sind die 7 wichtigsten Chr-Codes.
? chr(129) 'ü
? chr(154) 'Ü
? chr(132) 'ä
? chr(142) 'Ä
? chr(148) 'ö
? chr(153) 'Ö
? chr(225) 'ß
sleep
Auf die Funktion von Chr werden wir später zurückkommen.
Zum Beispiel:
print "Dr" + Chr(129) + "cken sie eine Taste"
Der Nachteil von Chr besteht darin, dass bei "Input" ein Fehler auftritt; FreeBASIC erwartet ein ',' an Stelle eines '+', hält dann aber CHR für die Variable.
Zum Beispiel:
' Mit Chr
dim taste as string
input "Dr", chr(154) ,"cken sie 'f'. ", taste
if taste = "f" then
print "Richtig!!"
else
print "Falsch!!"
endif
' Mit ASCII
dim taste as string
input "Dršcken sie 'f'. ", taste
if TASTE = "f" then
print "Richtig!!"
else
print "Falsch!!"
end if
Also Chr möglichst bei 'Input' vermeiden.
CharToOEM
[Bearbeiten]Bei dieser Lösung gibt es einige Untervarianten.
#include "windows.bi"
#define xPrint(ab) CharToOEM strptr(ab), strptr(ab): print ab
xPrint("Das ist ein Text mit Ä")
xPrint("Das ist ein Text mit ä")
xPrint("Das ist ein Text mit Ö")
xPrint("Das ist ein Text mit ö")
xPrint("Das ist ein Text mit Ü")
xPrint("Das ist ein Text mit ü")
xPrint("Das ist ein Text mit ß")
sleep
Subroutine
[Bearbeiten]#include "windows.bi"
declare sub xPrint(OutputString as string)
xPrint("Das ist ein Text mit Ä")
xPrint("Das ist ein Text mit ä")
xPrint("Das ist ein Text mit Ö")
xPrint("Das ist ein Text mit ö")
xPrint("Das ist ein Text mit Ü")
xPrint("Das ist ein Text mit ü")
xPrint("Das ist ein Text mit ß")
sleep
sub xPrint(OutputString as string)
CharToOEM strptr(OutputString), strptr(OutputString)
print OutputString
end sub
Pfeiltasten
[Bearbeiten]Gerade im Zusammenhang mit Inkey kann es nützlich sein zu wissen, ob Pfeiltasten gedrückt wurden. Das sieht in FreeBasic dann so aus:
dim temp as string
do
temp = inkey
if temp = Chr(255, 72) then
print "Nach oben"
end if
loop until temp="e"
sleep
Jedesmal wenn man Pfeilnachoben drückt wird "Nach oben" ausgegeben. Es gibt sieben solcher Tasten die für uns interessant sind:
Taste | Code |
---|---|
Enter | Chr(13) |
Escape | Chr(27) |
Schließen | Chr(255, 107) |
Nach Links | Chr(255, 75) |
Nach Rechts | Chr(255, 77) |
Nach Oben | Chr(255, 72) |
Nach Unten | Chr(255, 80) |
Sie können benutzt werden wie im Beispiel auch.