Registriert: Do Sep 02, 2004 19:42 Beiträge: 4158
Programmiersprache: FreePascal, C++
Zunächst einmal, was meinst du mit "falsch dargestellt"?
GLUT gilt als veraltet und sollte möglichst nicht mehr verwendet werden. Statt dessen könntest du dir mal die Fontbibliothek von Lossy Ex anschauen (mir ist gerade der Name entfallen) oder dich mit SDL_TTF befassen (was bei Lazarus sowieso eine gute idee ist, zumindest wenn man dann auch noch den Rest von SDL verwendet ).
Gruß Lord Horazont
_________________ If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung. current projects: ManiacLab; aioxmpp zombofant network • my photostream „Writing code is like writing poetry“ - source unknown
„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb
also das ü wird durch 2 zeichen ersetzt die ich nicht kenne, so ein A mit einem ~ obendrauf und das andere Zeichen ist eine art Kästchen....
(also wahrscheinlich benutzt glut einen anderen Zeichensatz....)
hmmm also mit sdl kenne ich mich überhaupt nicht aus....
ich verwende einfach nur opengl mit den Units glut, gl, glu
hmmm ich finde auf lossy ex Homepage eigentlich nur glBitmap, ist ja aber nicht für Textausgabe.....
_________________ "Weil", so schließt er messerscharf,
"nicht sein kann, was nicht sein darf."
Registriert: Do Sep 02, 2004 19:42 Beiträge: 4158
Programmiersprache: FreePascal, C++
Ahh. Woher beziehst du deine Textdaten? Denn das Phänomen, dass du beschreibst, ist unabhängig von glut. Du hast die Textdaten als UTF-8 vorliegen. Du musst sie vorher in Ansi umwandeln. Dafür gibt es unter FreePascal (also auch unter Lazarus) die Funktion UTF8ToAnsi.
Gruß Lord Horazont
_________________ If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung. current projects: ManiacLab; aioxmpp zombofant network • my photostream „Writing code is like writing poetry“ - source unknown
„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb
Registriert: Do Sep 02, 2004 19:42 Beiträge: 4158
Programmiersprache: FreePascal, C++
Hmm... Wenn der Text direkt im Sourcecode steht, sollte auch eigentlich kein UTF8-Problem auftreten... Ich bin auch nicht sicher, ob UTF8ToAnsi wirklich funktioniert (in der Manual fehlt eine Beschreibung), da ich mit SDL_TTF rendere zeichne ich den Text gleich als UTF8...
Vielleicht kann dir hier ja jemand anderes weiterhelfen.
Gruß Lord Horazont
_________________ If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung. current projects: ManiacLab; aioxmpp zombofant network • my photostream „Writing code is like writing poetry“ - source unknown
„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb
Registriert: Mo Nov 06, 2006 17:18 Beiträge: 20 Wohnort: Dresden/Löbau
Servus!
@Alexander
AFAIK verwendet Lazarus standardmäßig UTF8; zumindest unter Linux. Ob es unter Windows auch so ist, kann ich jetzt nicht sagen (kanns auch nicht testen, hab kein Windows mehr drauf) allerdings wollten die auch dort UTF8 per default nutzen. Obs allerdings schon so weit ist... kA
Ansonsten: Ich hab das mal so gehandhabt, dass ich Zeichen wie Umlaute etc. direkt als Code eingegeben habe, sprich:
Code:
myString :='Morgenr'+#246+'te';
Wobei 246 der Dezimalcode des kleinen "ö" ist. Das ist allerdings ziemlich umständlich, daher: Den zu erstellenden Text am besten in einem externen Editor schreiben, und dann mit einer passenden Codierung abspeichern (z.B. ISO-8859-1).
Registriert: Mo Nov 06, 2006 17:18 Beiträge: 20 Wohnort: Dresden/Löbau
Also wie schon gesagt: Am besten kommst Du, wenn Du einfach den Text in einem Editor erstellst, und dann abspeicherst und zur Laufzeit lädst. Unter was arbeitest Du eigentlich, Windows? Der Standard Texteditor von Windows speichert AFAIK in ANSI ab, daher sollte es damit klappen. Denn:
Mit Deiner Funktion musst du ja (wenns dumm kommt) noch ner ganzen Stange mehr Zeichen ihren Code zuordnen.
Ansonsten kannst Du auch folgendes überlegen:
Mach eine Unit StrConstants oder so, wo alle Strings als Konstanten abgespeichert sind. Die Unit erstellst Du aber nicht mit Lazarus, sondern mit einem externen Editor, und speicherst dann entsprechend in der passenden Kodierung ab.
Zitat:
ich bekomme es einfach nicht hin aus dem ö den richtigen Code herauszubekommen: Code: ord(String2Char(Utf8ToAnsi('ö'))
mit Code: function String2Char(s: ansistring): ansichar; begin if Length(s)=0 then exit; Result:=s[1]; end; es ist echt vertrackt.....
Damit kann es im übrigen nicht gehen, denn:
In UTF8 ist ein Zeichen nicht unbedingt genau ein Byte lang. Die Umlaute beispielsweise werden mit zwei Byte abgespeichert. Sprich: Du kannst auf einen UTF8 String nicht unbedingt per Index auf ein einzelnes Zeichen zugreifen.
hmmm ich glaube die funktion (äöü..) reicht fürs erste... ist auf jeden Fall nicht sooo viel mehr Arbeit, da es nicht so viele Strings sind.
aber wie ich vorhin gesagt habe, verstehe ich langsam garnichts mehr, da anscheinend manchmal die Umlaute klappen und manchmal nicht.... ich muss noch rausfinden wieso....
PS: Dass ich auf einen Umlaut nicht mit s[1] zugreifen kann ist schade....
_________________ "Weil", so schließt er messerscharf,
"nicht sein kann, was nicht sein darf."
Registriert: Di Okt 03, 2006 14:07 Beiträge: 1277 Wohnort: Wien
Also mir schauts verflixt danach aus, als ob es was mit dem CHARACTER SET zu tun hätte. UTF-8 ist ja nur ein Encoding (WIE wird der Unicode gespeichert) es geht aber um den Unicode selbst (WELCHER Unicode wird genommen), das sind zwei verschiedene Dinge. Vielleicht kann man das Default Charset umstellen?
Traude
Registriert: Mo Nov 06, 2006 17:18 Beiträge: 20 Wohnort: Dresden/Löbau
Also:
Hab gerade mal fix die GLUT Demo, die beim FPC mit dabei ist, modifiziert und geschaut, mit welchen Character Sets GLUT klar kommt. Die ganzen Westeuropäischen ISO8859 Kodes wurden dabei richtig dargestellt (also 8859-1, -14 und -15).
Gemäß dieser Seite...
http://www.opengl.org/documentation/specs/glut/spec3/node76.html ...würde ich auch schließen, dass intern ISO8859-1 verwendet wird. Ob man das zu verwendende Character Set umstellen kann... k.A, sieht aber schlecht aus. Zumindest findet sich in der Spezifikation in der Rubrik "Font Rendering" nichts zum Thema.
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Die GLUT wird intern nur "Bitmaps" von den verschiedenen Fonts haben die dann bei Bedarf gezeichnet weren. Von daher wird die vermutlich nur maximal 256 Zeichen besitzen. Auf der Dokumentations Seite von Glut (link von blackstar) sieht man als letzten Bestandteil immer "iso8859-1". Denke die machen nur das. Ist auch die einfachste CodePage.
Und ich würde auch in jedem Fall sagen, dass die Zeichen UTF-8 sind. Denn UFT-8 codiert alle erweiterten Zeichen CharCode über 127 in 2 oder bis zu 4 Bytes.
Und solchen Lösungen, dass man sich den String zusammenbasteln muss kann eigentlich nicht das Wahre sein. Denn das geschieht dann zu Laufzeit und da passiert wesentlich mehr als man auf en ersten Blick vermuten mag. Könnte es evtl daran liegen, dass Lazarus die SourceDatei als UTF-8 abspeichert und nicht als ANSI? Denn dann befinden sich in dem Text von Hause aus 2 Zeichen und der Kompilier kopiert sie bloß so direkt in die Anwendung.
Das Projekt wovon Lord Horazont gesprochen hat heißt TextSuite. Derzeit ist davon auf meiner Webseite nur die Dokumentation zu finden. Allerdings ist das alles noch in Arbeit und nicht vollständig. Ja das geht auch problemlos mit FreePascal und für UTF-8 muss man lediglich die "Codepage" UTF-8 einstellen.
Mitglieder in diesem Forum: 0 Mitglieder und 5 Gäste
Du darfst keine neuen Themen in diesem Forum erstellen. Du darfst keine Antworten zu Themen in diesem Forum erstellen. Du darfst deine Beiträge in diesem Forum nicht ändern. Du darfst deine Beiträge in diesem Forum nicht löschen. Du darfst keine Dateianhänge in diesem Forum erstellen.