Autor Beitrag
Airtrox
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 109


Delphi 7
BeitragVerfasst: So 13.09.09 10:45 
Hey,

da mir im delphi-treff Forum in dieser Hinsicht nicht so recht geholfen werden konnte und ich seither auch nach unzähligen Versuchen noch keine Lösung gefunden habe, wollte ich nochmal hier nachfragen:

Ich will in einem TntMemo arabische Zeichen darstellen (was auch mit dem richtigen Font klappt). Das Problem hier ist nur, dass die Zeichen sich nicht verbinden, so wie sie es eigentlich sollten. Aussehen sollte es z.B. so: سلام
Im Dateianhang seht ihr wie es angezeigt wird.
Wenn ich den Text markiere und bspw. in OpenOffice einfüge, wird er allerdings richtig angezeigt.

Ich weiß, dass sich wahrscheinlich, wenn überhaupt nur wenige User sich mit diesem Thema beschäftigt haben, aber wenn ihr eine Idee habt, lasst sie mich bitte wissen :)

lg
Einloggen, um Attachments anzusehen!
hathor
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mo 14.09.09 11:55 
Dann nimm doch einen anderen Zeichensatz. Times New Roman z.B. hat keine Probleme, die 4 Buchstaben in Notepad und MS Word korrekt darzustellen.

Ist im TntMemo RightToLeft aktiviert?

Vielleicht musst Du vorher die WINDOWS-Unterstützung für Righttoleft-Schriften/Sprachpakete (z.B. arabisch und hebräisch) nachinstallieren. Ich habe auf allen meinen PC/Notebooks das schon bei der WINDOWS-Installation ausgewählt, deshalb kann ich Dir nicht sagen, ob es ohne diese auch geht.
Airtrox Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 109


Delphi 7
BeitragVerfasst: Mo 14.09.09 13:02 
Erstmal danke, dass jemand antwortet :)

Ob nun RightToLeft oder LeftToRight macht keinen Unterschied. Habe beides getestet, jedoch ohne Erfolg

Ich habe gerade Times New Roman als Schriftart des Memos genommen, selbes Problem :(
Ich denke nicht, dass es an den Righttoleft-Schriften/Sprachpaketen liegt, denn das Problem ist ja nur, dass sich die Buchstaben nicht verbinden (kopiere ich sie und füge sie in irgendwelche Online Übersetzer Memo Felder ein, sind sie jedoch aneinander. Dennoch, woher bekomme ich diese Righttoleft-Schriften/Sprachpakete? Bei meinem PC war Windows vorinstalliert.
Xentar
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2077
Erhaltene Danke: 2

Win XP
Delphi 5 Ent., Delphi 2007 Prof
BeitragVerfasst: Mo 14.09.09 13:06 
a) Könntest du bitte den Thread von Delphi-Treff verlinken, dass wir lesen können, was da schon alles vorgeschlagen wurde?
b) Soweit ich weiß sind die TNT Komponenten nicht kostenlos, also wirst du dafür gezahlt haben, oder? Wäre es dann nicht einfacher, direkt den Hersteller zu fragen, warum das so ist?

_________________
PROGRAMMER: A device for converting coffee into software.
hathor
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mo 14.09.09 13:29 
user profile iconAirtrox hat folgendes geschrieben Zum zitierten Posting springen:
...Dennoch, woher bekomme ich diese Righttoleft-Schriften/Sprachpakete? Bei meinem PC war Windows vorinstalliert.


Entweder Du hast eine WINDOWS-CD oder eine Installations-Partition. Mit Systemsteuerung - Software sollte sich das nachinstallieren lassen.
Airtrox Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 109


Delphi 7
BeitragVerfasst: Mo 14.09.09 15:43 
hier der link: forum.delphi-treff.d...owthread.php?t=27429 (die letzten Seiten sind für dieses Thema wichtiger)
@Xentar: Nein ich habe es nicht gekauft, habe es von dem Link, der in DT gepostet wurde runtergeladen.
Lossy eX
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1048
Erhaltene Danke: 4



BeitragVerfasst: Di 15.09.09 09:55 
Um irgendwelchen missverständnissen vorzubeugen. Ich habe eine Fontbibliothek für OpenGL geschrieben. Dort kann ich auch noch keinen sinnvollen arabischen Text darstellen. Sondern nur einzelnen Zeichen. Also ich habe es auch noch nicht gemacht (mangels zeit) sondern nur ein bisschen was darüber gelesen.

Ich kenne mich mit den TNT Komponenten so gar nicht aus. Im übrigen kann Notepad bei passendem Font auch Unicode. Nur werden die arabischen Zeichen auch nur "normal" dargestellt. Es können recht viele Fonts arabische Zeichen. Das Problem liegt also nicht am Font sondern an etwas anderem. Arabisch ist eine Schreibschrift und die Zeichen sind nicht so wie die Zeichen aus dem Englischem. Es gibt bei arabischen Zeichen jeweils bis zu 4 Zustände. Die Zustände geben an wo sich ein Zeichen befindet. Entweder es steht alleine oder befindet sich am Anfang, in der Mitte oder am Ende eines Wortes. Normal wird meines Wissens nach immer der eigentliche Zeichencode eingegeben und das jeweilige Programm muss dann selbsttätig auf die entsprechenden Zustände schalten. Bei mangelnder Unterstützung sieht das dann so aus als ob es nur ein Ansammlung an Buchstaben wäre. Aber kein wirklich fließender Text.

Als Beispiel mal ein willkührlicher Buchstabe (Sheen). Nachzuschauen in dem Programm Zeichentabelle von Windows. Anfang - Ende haben eine Art Grundlinie. In Courier New würde man das allerdings deutlich besser sehen können als in der Schrift die das Forum verwendet.
ش - Eigentlicher Buchstabe ($0634)
ﺵ - Isolierte Form ($FEB5)
ﺷ - Anfangsform ($FEB7)
ﺸ - Mittelform ($FEB8)
ﺶ - Endform ($FEB6)

So viel zum Hintergrund. Ich denke TNT und Notepad werden nur die Charcodes so direkt übernehmen wie sie sind. Wobei ich meine bei früheren Bildern von den Controls auch richtige arabische Schrift gesehen zu haben. Aber da bin ich mir nicht sicher. Bzw findet man diese Bilder mittlerweile auch nicht mehr. Die Demo von den TNT kommt damit aber auch nicht klar. Was man da jetzt direkt machen muss weiß ich so aber leider auch nicht genau. Eigentlich müsste sich Windows beim Zeichnen selber darum kümmern. Ein Test mit DrawTextW zeigt auch auch wieder nur einzelne Buchstaben. Alternativ könnte man eventuell den Text bei der Eingabe parsen und in die entsprechenden Zeichen umwandeln. Aber dann müsste man bei jeder Eingabe den Text vollständig analysieren. Und das ist zeimlich unpraktisch. Auf der anderen Seite gehen die TNT Controls auch nur her und aktivieren die Unterstützung von Unicode innerhalb der Fenster. Das Einzige was die Controls also machen ist es Daten hin und her zu transportieren.


Wenn man das per Hand machen wollte, dann gibt es auf unicode.org Tabellen zu den Zeichen. Also riesige Textfiles (UnicodeData-5.2.0d12.txt) in denen alle möglichen Informationen zu jedem Zeichen enthalten sind. Unter anderem auch welche Zeichen welche Form für welches originale Zeichen darstellen. Das per Hand zu parsen ist ziemlich wüst. Nachfolgend ein Beispiel.
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
0634;ARABIC LETTER SHEEN;Lo;0;AL;;;;;N;;;;;
...
FEB5;ARABIC LETTER SHEEN ISOLATED FORM;Lo;0;AL;<isolated> 0634;;;;N;GLYPH FOR ISOLATE ARABIC SHEEN;;;;
FEB6;ARABIC LETTER SHEEN FINAL FORM;Lo;0;AL;<final> 0634;;;;N;GLYPH FOR FINAL ARABIC SHEEN;;;;
FEB7;ARABIC LETTER SHEEN INITIAL FORM;Lo;0;AL;<initial> 0634;;;;N;GLYPH FOR INITIAL ARABIC SHEEN;;;;
FEB8;ARABIC LETTER SHEEN MEDIAL FORM;Lo;0;AL;<medial> 0634;;;;N;GLYPH FOR MEDIAL ARABIC SHEEN;;;;


Ich persönlich weiß nicht ob man tatsächlich dazu gezwungen wird diese Umwandlung per Hand machen zu müssen. Auf der einen Seite könnte ich mir vorstellen, dass man das muss. Auf der anderen Seite fällt es mir schwer zu glauben, dass es tatsächlich so sein sollte.

_________________
Nur die Menschheit ist arrogant genug, um zu glauben sie sei die einzige intelligente Lebensform im All. Wo nicht mal das nachhaltig bewiesen wurde.
Airtrox Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 109


Delphi 7
BeitragVerfasst: Di 15.09.09 13:16 
Hey,

deine Antwort hat mir wirklich sehr sehr geholfen, Lossy eX. Danke!
Nun verstehe ich auch, warum sich die Buchstaben nicht verbinden, aber beim Kopieren in ein Programm, das das unterstützt, es richtig angezeigt wird.

Nun aber dennoch eine Frage:
Ich würde dieses Programm auch gerne umschreiben, sodass jedes mal geprüft wird, welcher Buchstabe nun eingesetzt werden soll. Leider fehlt mir das Know-How, um den Text im TntMemo überprüfen zu lassen.
Und ein Bedenken habe ich noch: Ich habe rechts nach links eingestellt und kann auch Buchstaben einfügen, jedoch werden diese rechts dargestellt, wie im Lateinischen. Kopiere ich den Text jedoch in OpenOffice etc. dann wird es richtig angezeigt (siehe Bild oben). Außerdem werden Leerzeichen nicht zwischen den Buchstaben dargestellt (auch beim kopieren in ein anderes Programm), sondern immer ganz links, was das auseinander halten der Buchstaben schwerer macht. Weiterhin bleibt der Cursor immer ganz links, jedoch fügt er die arabischen Zeichen rechts ein und nur die Leerzeichen links.

Sollte also das aneinanderreihen der Buchstaben klappen, gibt es immer noch das Problem der Leerzeichen.

lg
Lossy eX
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1048
Erhaltene Danke: 4



BeitragVerfasst: Di 15.09.09 17:57 
Genau das mit RightToLeft ist auch noch so eine Sache. Es hat ja niemand behauptet, dass der ganze Text dann urplötzlich RightToLeft sein muss. Es ist auch problemlos möglich, dass innerhalb eines lateinischen Textes dann ein arabisches wort (oder zwei oder drei) enthalten sein können. Allerdings wird das alles deutlich erschweren. Denn dadurch muss innerhalb eines Textes dann urplötzlich die Richtung verändert werden. Ich meine Zahlen im arabischen sind auch wieder LTR. Aber da hörts bei mir dann auch auf. So haar genau weiß ich das nicht mehr.

Ich persönlich würde vielleicht auch schauen ob es da nicht eventuell doch so etwas gibt wie ein arabisches Sprachpaket. Wenn man dadurch den Effekt erzeugen kann dann kann man eher damit leben, dass man sagt das und das muss installiert sein. Denn der Aufwand den man ansonsten betreiben muss den solltest du in keinem Fall unterschätzen. Wie ich bereits gesagt habe ist es das Beste, wenn Windows sich darum kümmert, dass die Texte sinnvoll dargestellt werden. Denn bei der Komponente liegt das Zeichnen bei Windows. Da hat man bei einem Memo keinen wirklichen Einfluss darauf.

Bei so etwas wie einer Combobox oder einem Button müsste es relativ einfach. Dort genügt es vermutlich vor dem Setzen den Text entsprechend umzuformen und dann den umgeformten Text als Text zu setzen. Bei einem Memo/Edit ist es aber so, dass der Benutzer Einfluss auf den Text nimmt. Und das müsste die Komponente alles abfangen. Beim Verändern durch den Benutzer. Beim Einfügen, Löschen. Wenn du den geparsten Text als Text für das Memo setzt, dann musst du beim weitern parsen immer darauf achten, dass du mit bereits geparsten Teilen nicht durcheinander kommst. Es kann ja auch sein, dass ein Zeichen gelöscht wird und dadurch ein Zeichen was in der Mitte ist sich plötzlich am Rand befindet. Das beduetet entweder Datendoppelhaltung oder zurückparsen. Das ist beides nicht so dolle. Wenn der Benutzer text kopiert, dann sollte er auch den unveränderten Text bekommen und nicht den umgeformten. Beim Markieren (im firefox zum beispiel) springt die Markierung auf die andere Seite und markiert Gegensätzliches. Das ist mit einem klassischen Memo schon mal gar nicht realisierbar.

Also da mal Ebene durch den Text gehen und einen neuen Text setzt wird wohl nicht funktionieren. Da muss ich leider auch gestehen. Da weiß ich auch gar nicht was der beste Weg wäre um an so etwas ranzugehen. Aber einfach ist es definitiv nicht. Bei meiner Bibliothek werde ich es dahingehen recht einfach haben. Sobald es an mich übergeben wurde gehört es mir. Da wird niemand mehr Einfluss darauf nehmen können.

_________________
Nur die Menschheit ist arrogant genug, um zu glauben sie sei die einzige intelligente Lebensform im All. Wo nicht mal das nachhaltig bewiesen wurde.