Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
SL
Anmeldungsdatum: 06.12.2009 Beiträge: 43
|
Verfasst am: 29.12.2009, 12:13 Titel: WCHR und Unicode ? |
|
|
Hi,
in der Befehlsreferenz steht zur Anweisung „WCHR“ folgendes: „WCHR verwandelt einen Unicode-Wert in seinen Character...... WCHR wird z.B verwendet, um Zeichen darzustellen, die nicht auf der Tastatur sind."
Bei mir tut sich da (fast) gar nichts. Bei Werten bis 127 wird das Zeichen richtig dargestellt. Doch das bringt eigentlich nicht viel, da in jedem anderem Code (ASCII oder ANSI) die Zeichen identisch sind. Interessant wird es erst ab der Code-Nr 128 (Das müsste in Windows-ANSI oder Unicode das "€“-Zeichen sein)
Der Befehl: PRINT WCHR (128) bringt nicht das erwünschte Ergebnis "€"sondern ein "?“. Bei jedem anderen Wert größer als 127 erscheint ebenfalls nur ein "?“.
Wo liegt mein Fehler? |
|
Nach oben |
|
 |
nemored

Anmeldungsdatum: 22.02.2007 Beiträge: 4704 Wohnort: ~/
|
Verfasst am: 29.12.2009, 12:44 Titel: |
|
|
In dieser Unicode-Tabelle taucht als Zeichen 128 nichts auf. Z. B. Zeichen 163 (Pfund) funktioniert bei mir in der Konsole einwandfrei.
edit: wchr(8364) zeigt das Euro-Zeichen an. _________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
 |
SL
Anmeldungsdatum: 06.12.2009 Beiträge: 43
|
Verfasst am: 29.12.2009, 13:28 Titel: |
|
|
Danke, das hilft mir schon mal weiter.
Das £-Zeichen (163) funktioniert bei mir auch. Doch das €-Zeichen (8364) leider nicht. Da erscheint nur ein "?“.
Ich habe mittlerweile ebenfalls etwas recherchiert. Die Windows-ANSI Codes von 160 bis 255 sind in Übereinstimmung mit dem Unicode "C1 Controls and Latin-1 Supplement". (z.B. "£" = ANSI Code 163) Die Windows-ANSI Codes von 128 bis 159 sind im Unicode unbestimmt. (Quelle: http://www.code-knacker.de/ansi.htm )
Wichtig wäre mir das „€“-Zeichen. (ANSI Code 128) |
|
Nach oben |
|
 |
volta
Anmeldungsdatum: 04.05.2005 Beiträge: 1876 Wohnort: D59192
|
|
Nach oben |
|
 |
SL
Anmeldungsdatum: 06.12.2009 Beiträge: 43
|
Verfasst am: 30.12.2009, 21:27 Titel: |
|
|
Hi Volta,
wenn ich dein Tutorial "Schriftarten unter Freebasic" richtig verstehe, können "externe" Schriftarten nur im Grafik-Modus benutzt werden, nicht im Text-Modus.
(So nebenbei: Obiges Tutorium besteht aus 7, sehr kurzen Seiten. Das „Umblättern“ empfinde ich als ziemlich nervig. Eine zusammenhängende Darstellung auf nur einer einzigen großen Seite wäre meiner Ansicht nach wesentlich leichter zu verstehen – zumindest für so einen Anfänger wie ich es bin)
Mein Problem ist jedoch das "€"-Zeichem im Text-Modus in einer Konsolenanwendung.
Das müsste doch dadurch zu lösen sein, indem irgendwer aus den in FB integrierten ASCII Zeichensätzen 437 und 850 ein nicht benötigtes Zeichen rausschmeißt und mit dem "€"-Zeichen ersetzt. Beispielsweise ASCII-Code 128 (schaut so aus: Ç). Und weil der Code 128 in ANSI das "€" bereits ist, hätte man zwei Fliegen mit einer Klappe erledigt. Doch da die FB-Entwickler das Schiff anscheinend verlassen haben, dürfte dies etwas illusionär sein. Oder gäbe es einen Weg, das selber zu „fixen“?
Edit: Das Ändern der Codes für Zeichen hat einen gewaltigen Pferdefuß: Sobald ein Drucker ins Spiel kommt, wird`s brenzlig. Doch Drucken (auf Papier) und FB ……… |
|
Nach oben |
|
 |
nemored

Anmeldungsdatum: 22.02.2007 Beiträge: 4704 Wohnort: ~/
|
Verfasst am: 31.12.2009, 00:06 Titel: |
|
|
Ich kenne mich in diesem Bereich nicht aus, aber ich denke, dass die in der Konsole darstellbaren Seite nicht von FB, sondern von der Konsole bestimmt werden. Wie gesagt funktioniert bei mir wchr(8364) (Linux), und ich glaube nicht, dass die Entwickler in der Linux-Version mehr eingebaut haben als in der Windows-Version.
Insofern könnte das Eurozeichen beim Drucken theoretisch sogar einfacher sein als in der Konsolendarstellung. _________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
 |
SL
Anmeldungsdatum: 06.12.2009 Beiträge: 43
|
Verfasst am: 31.12.2009, 01:10 Titel: |
|
|
Du hast höchst wahrscheinlich recht. Im Text-Modus einer Konsolenanwendung wird FB vermutlich den Zeichensatz der Konsole verwenden.
Möglicherweise liegt der Hund darin begraben, dass die Windows-Konsole – im Gegensatz zu Linux - nur den Unicode bis Code 255 kennt. |
|
Nach oben |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 31.12.2009, 01:25 Titel: |
|
|
Zitat: | Du hast höchst wahrscheinlich recht. Im Text-Modus einer Konsolenanwendung wird FB vermutlich den Zeichensatz der Konsole verwenden. |
Naja, was soll FB denn auch sonst machen? Die Konsole wird ja nur mit Text gefüttert. _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
 |
|
Nach oben |
|
 |
MOD Fleißiger Referenzredakteur

Anmeldungsdatum: 10.09.2007 Beiträge: 1003
|
Verfasst am: 31.12.2009, 01:37 Titel: |
|
|
Im Grafik-Modus ist hingegen der Font in der fbgfx fest eingecodet, orientiert sich aber trotzdem am Text-Modus. Wenn du das €-Zeichen willst, leg deinen eigenen Font bei und lade ihn. Anders wird's wohl nicht gehen. |
|
Nach oben |
|
 |
SL
Anmeldungsdatum: 06.12.2009 Beiträge: 43
|
Verfasst am: 31.12.2009, 13:44 Titel: |
|
|
Den Graphik-Modus will ich nicht benützen – aus reiner Sturheit!
Langsam dämmert mir, wie im Text-Modus eine Konsolenanwendung Zeichen darstellt. Als erstes stellt FB in der Konsole den ASCII-Codepage ein. Entweder CP 850 oder CP 437 (wobei ich nicht verstehe, wieso FB hier – je nach Anwendung – mit 2 verschiedenen Codepages arbeitet. Das Original QBasic arbeitet nur mit CP 437).
Der PRINT-Befehl sendet an die Konsole den Code (z.B. 176) und die Konsole zeigt dann das entsprechende Zeichen (bei 176: ░ ), welches der voreingestellten Codepage und dem Code entspricht.
Um das €-Zeichen zu zeigen, müsste also der Zeichensatz der entsprechenden ASCII-Codepage geändert werden oder eine ASCII-Codepage benutzt werden, welche das €-Zeichen darstellen kann (ASCII-Codepage 858. Die ist bis auf das €-Zeichen mit der CP 850 identisch)
Da es in FB keinen Befehl gibt, die Codepage auszuwählen (was schade ist!), fällt diese Möglichkeit aus. Anscheinend lässt sich jedoch der Zeichensatz einer Codepage in der Konsole ändern. Ich habe folgende Anleitung gefunden: http://www.uwe-sieber.de/dosfon.html (Allerdings verstehe ich das alles noch nicht so richtig.) |
|
Nach oben |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 31.12.2009, 14:33 Titel: |
|
|
Zitat: | Als erstes stellt FB in der Konsole den ASCII-Codepage ein. |
Tut es nicht. Windows setzt den Zeichensatz. Und der ist auf deutschen Systemen standardmäßig cp 850 (welche auch keine unicode-zeichen kann, daher die limitierung auf 256 zeichen). Je nach Betriebssystem ist es aber noch möglich, den Vollbildmodus in der Konsole zu benutzen, wodurch dann unter Umständen ein Hardware-Zeichensatz verwendet wird, welcher sich von dem im Fenster dargestellten unterscheiden kann - Denn im Fenster wird immer ein und dieselbe TrueType-Schriftart benutzt!
Zitat: | Da es in FB keinen Befehl gibt, die Codepage auszuwählen (was schade ist!) |
Macht Sinn. Ohne root-rechte kannst du die unter Linux nicht ändern. FreeBASIC hat eh schon viel zu viele Befehle, und das ist noch einer, der garantiert nicht in den Compiler gehört! _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
 |
|
Nach oben |
|
 |
St_W

Anmeldungsdatum: 22.07.2007 Beiträge: 956 Wohnort: Austria
|
Verfasst am: 31.12.2009, 16:11 Titel: |
|
|
In das Windows Konsolenfenster kann man ja auch kein "€" Zeichen eingeben, da dieses nicht im Standard-ASCII Zeichensatz vorkommt.
Die Ausgabe funktioniert folgend genausowenig (aus meiner Ansicht). _________________ Aktuelle FreeBasic Builds, Projekte, Code-Snippets unter http://users.freebasic-portal.de/stw/
http://www.mv-lacken.at Musikverein Lacken (MV Lacken) |
|
Nach oben |
|
 |
SL
Anmeldungsdatum: 06.12.2009 Beiträge: 43
|
Verfasst am: 31.12.2009, 17:38 Titel: |
|
|
St_W hat Folgendes geschrieben: | In das Windows Konsolenfenster kann man ja auch kein "€" Zeichen eingeben .... |
Im Windows Konsolenfenster kannst du seltsamerweise über die Tastatur das "€" Zeichen eingeben. Du musst lediglich die Schriftart auf "Lucida Console" umstellen. |
|
Nach oben |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 31.12.2009, 17:58 Titel: |
|
|
Nicht seltsam, ich habe es doch bereits erklärt: Das Fenster wird mit einer TrueType-Schriftart gerendert, Vollbild wird's dagegen mit einem Hardware-Zeichensatz dargestellt (der normalerweise eben kein Eurozeichen enthält). _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
 |
|
Nach oben |
|
 |
SL
Anmeldungsdatum: 06.12.2009 Beiträge: 43
|
Verfasst am: 31.12.2009, 19:02 Titel: |
|
|
Mir ist zwar nicht ganz klar, was du damit sagen willst, doch mittlerweile habe ich eine Lösung für das €-Zeichen im Text-Modus gefunden.
Die "normale" Windows Konsole akzeptiert beim Befehl „WCHR“ nur Codes bis 255. Doch stellt man die Konsole dauerhaft auf die Schriftart „Lucida Console“ um, so bringt der Code:
Code: | PRINT WCHR (8364): SLEEP |
tatsächlich das € Zeichen in der Windows Konsole auf den Bildschirm.
Mein nächstes Problem ist, wie stelle ich aus FB heraus die Schriftart der Windows Konsole auf die Schriftart „Lucida Console“ um? |
|
Nach oben |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 31.12.2009, 20:28 Titel: |
|
|
Also nochmal von vorne *seufz*.
Die Konsole im Fenster ist keine echte Textkonsole, also du siehst da nicht den Hardware-Zeichensatz (wie er auch im BIOS z.B. verwendet wird). Diese Konsole benutzt TrueType-Schriftarten (also genau wie jedes andere Windows-Programm auch). Im Vollbild wird dieser Textmodus nicht emuliert, sondern ein echter Textmodus von der Grafikkarte verwendet. Dazu braucht man eine Codepage, üblich ist in Deutschland cp 850 oder cp 437. Diese Codepage kann man auch ändern, aber das geht nicht so einfach (vor allem nicht unter Windows / Linux). In Teilfenster werden die 256 möglichen ASCII-Zeichen einer TrueType-Schriftart zugeordnet, und standardmäßig ist das eben eine ohne Eurozeichen. Du kannst diese Schriftart aber nicht ändern. In der Registry wird irgendwo stehen, welche Schriftart verwendet wird, aber da würde ich ganz schnell von absehen, denn jeder Benutzer deines Programms wird dich dafür hassen, dass du ihr System modifizierst. Und im Vollbild wird immer noch der Hardware-Zeichensatz ohne €-Zeichen erscheinen. _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
 |
|
Nach oben |
|
 |
SL
Anmeldungsdatum: 06.12.2009 Beiträge: 43
|
Verfasst am: 01.01.2010, 20:15 Titel: |
|
|
Jojo hat Folgendes geschrieben: | ... Du kannst diese Schriftart aber nicht ändern. In der Registry wird irgendwo stehen, welche Schriftart verwendet wird, aber da würde ich ganz schnell von absehen, denn jeder Benutzer deines Programms wird dich dafür hassen, dass du ihr System modifizierst. Und im Vollbild wird immer noch der Hardware-Zeichensatz ohne €-Zeichen erscheinen. |
Damit der Faden nicht verloren geht: Es geht um die Darstellung des "€"-Zeichens in der Windows-Konsole im Textmodus.
Die Schwierigkeit besteht darin, dass der voreingestellte Zeichensatz der Konsole standardmäßig kein "€"-Zeichen darstellen kann und eine deshalb erforderliche Änderung des Zeichensatzes unerwünschte Auswirkungen haben könnte. Nach allem, was ich bis jetzt über die Windows-Konsole rausgefunden habe, müsste dies jedoch möglich sein.
Wenn ein Anwenderprogramm die Windows-Konsole startet, wird für diese Konsole in der Registry ein eigener Ordner angelegt, sobald die Eigenschaften der Konsole von den Standart-Eigenschaften der Konsole abweichen. Somit müßten geänderte Eigenschaften der Konsole nur für das jeweilige Programm gelten, welches die Konsole startet.
Dies lässt sich auch relativ leicht mit der Farbeinstellung der Konsole überprüfen. Hierzu ist die Konsole in FB mit dem Befehl "PRINT: SLEEP" zu starten. Daraufhin erscheint die leere Konsole mit schwarzer Hintergrundfarbe. In der Konsole ändert man die Hintergrundfarbe im Konsolen-Fenster beispielsweise auf Grün und speichert die nun geänderte Eigenschaft mit "Eigenschaften gelten für alle Fenster mit gleichem Namen" ab. Öffnet man nun die Konsole in einer anderen Anwendung (z.B. über die Windows Verknüpfung "Eingabeaufforderung"), so ist die Hintergrundfarbe wieder schwarz. Öffnet man die Konsole erneut wieder mit FB (PRINT: SLEEP) so ist der Hintergrund der Konsole erwartungsgemäß grün.
Bei Schriftarten funktioniert das Gleiche analog (Nur mit Farben ist das Prinzip besser erklärbar) Auf diese Weise lässt sich das ansonsten nicht darstellbare "€"-Zeichen im Text-Modus mittels Unicode problemlos darstellen – falls in der Konsole die passende Schriftart eingestellt wurde. (Auf die ASCII-Codepage hat dies übrigens keine Auswirkung)
Das ganze funktioniert nur nicht im Vollbildmodus – wie du bereits in deinem Beitrag sehr ausführlich erklärt hast. (Also Anzeige des Bildschirms ohne Titelleistenschaltfläche samt Titelleiste und ohne Taskleiste) Nur im Textmodus - um den geht es hier ausschließlich - hat der Vollbildmodus praktisch keine Bedeutung.
Doch wie verändere ich die Eigenschaften der Konsole mittels eines FB-Programms? (Da ja die Windows-Konsole standardmäßig einen Nicht-Unicode Zeichensatz hat) |
|
Nach oben |
|
 |
28398
Anmeldungsdatum: 25.04.2008 Beiträge: 1917
|
|
Nach oben |
|
 |
SL
Anmeldungsdatum: 06.12.2009 Beiträge: 43
|
Verfasst am: 02.01.2010, 15:45 Titel: |
|
|
Leider sind meine Kenntnisse viel zu lausig, um diesen Code auch nur in Ansätzen zu verstehen!
Bei meinen Recherchen zur Schriftart in der Windows-Konsole bin ich übrigens auf was Interessantes gestoßen. Damit in der Konsole eine Schriftart ausgewählt werden kann, muß diese Schriftart zunächst in die Konsole geladen werden. Standardmäßig sind bekanntlich nur zwei Schriftarten geladen. Weitere (Nicht-Proportionale) Schriftarten können so geladen werden:
Öffnen Sie den Registrierungseditor. Legen Sie im Schlüssel HKEY_LOCAL_MACHINE \SOFTWARE\ Microsoft\ Windows NT\ CurrentVersion\ Console\ TrueTypeFont einen neuen Eintrag vom Typ »Zeichenfolge« an und geben diesem Eintrag den Namen »00« (gemeint ist die Zahl null). Existiert bereits ein Eintrag mit diesem Namen, dann nennen Sie den neuen Eintrag »000«, beziehungsweise hängen so viele Nullen an, bis der Name nicht mehr mit einem schon vorhandenen Eintrag kollidiert. Doppelklicken Sie dann auf Ihren neuen Eintrag, um ihn zu öffnen, und tragen Sie darin den Namen der Schriftart ein. Der Name muss genau dem Schriftnamen entsprechen, so wie er unter dem Schlüssel HKEY_LOCAL_MACHINE\ SOFTWARE\ Microsoft\Windows NT\ CurrentVersion\ Fonts vermerkt ist. Zwar erscheint die neu hinzugefügte Schriftart nun bereits im Auswahlfeld der Konsole, aber sie funktioniert erst dann, wenn Sie sich mindestens einmal abmelden oder, was noch besser ist, den Computer neu starten. Ohne diesen Neustart ignoriert die Konsole Ihre neue Schrift, wenn Sie sie im Dialogfeld auswählen. [Quelle: Tobias Weltner: Scripting mit Windows PowerShell - Der Einsteiger-Workshop. Microsoft Press 2008 (ISBN 978-3-86645-620-4)]
Damit könnte man im Text-Modus von FB praktisch jede x-beliebige Schriftart (für den Fenstermodus) einstellen. Der Hacken ist leider, dass dies vom Anwender selbst durchgeführt werden muß! Doch vielleicht gibt es hier jemand, dar dafür die entsprechende Routine entwickelt.
Edit: So einfach wie gedacht ist das mit den Schriftarten doch nicht. Ich habe z.B. die Nicht-proportionale TT-Schriftart „Consolas“ (aus MS-Office 2007) in der Konsole installiert und dann FB gestartet. Bei dieser Schriftart funktioniert die ASCII–Codepage 850 ab Code 128 nicht.
Bei der TT-Schriftart „Lucida Console“ hingegen funktioniert die ASCII–Codepage 850 problemlos. Man muß also jede Schriftart vorher testen, ob der erweiterte ASCII-Code (ab Code-Nr 128) in der jeweiligen Codepage vorhanden ist. Ganz schön kompliziert! |
|
Nach oben |
|
 |
Dusky_Joe

Anmeldungsdatum: 07.01.2005 Beiträge: 1007 Wohnort: Regensburg/Oberpfalz
|
Verfasst am: 03.01.2010, 14:55 Titel: |
|
|
Die UNICODE-Funktionen von FB sind vor allem für die Kommunikation mit anderen Programmen bzw. der WinAPI gedacht. Die Funktion von WCHR kann ganz leicht getestet werden, wenn du die Ausgabe nicht auf den Bildschirm leitest, sondern in eine Datei. Erstelle eine ganz einfache TXT AS #f, und dann schreibe PRINT #f, WCHR(char).
Wenn du die TXT dann mit Notepad öffnest, wirst du das gewünschte Char sehen. (Achtung: Im Öffnen-Dialog die Dropdown "Codierung" entsprechend auf Unicode einstellen! Sonst wirst du wieder nur Kauderwelsch zu lesen bekommen.
Viele Grüße aus Burghausen!
Have a nice day
Ciao
Dusky Joe _________________ fully biological degradable
Once, the big wave arrives, you've got two ways, you can go:
Either, you ride it, or you don't do.
But, if you don't ride, you'll never know wether you'd have gone wet. |
|
Nach oben |
|
 |
|