FreeBasic: Umlaute
Aus Wikibooks
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.
Inhaltsverzeichnis |
[Bearbeiten] ae statt ä
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.
[Bearbeiten] Ersetzen durch andere ASCII Zeichen
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.
[Bearbeiten] Chr
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.
[Bearbeiten] CharToOEM
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
[Bearbeiten] Subroutine
#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
[Bearbeiten] Pfeiltasten
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.