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 ZeichenBearbeiten

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.

ChrBearbeiten

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.

CharToOEMBearbeiten

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


SubroutineBearbeiten

#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

PfeiltastenBearbeiten

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.