Autor Beitrag
Schaberick
Hält's aus hier
Beiträge: 5

Win 10, Win 11
Delphi 10.4 Comm., Delphi 10.0 Prof., Visual Studio 2019, Unity, Blender
BeitragVerfasst: Fr 17.03.23 19:52 
Hallo zusammen,

gerade bin ich dabei, ein Sprachenlernprogramm zu schreiben. Ich weiß davon gibt es viele, aber trotzdem mache ich das.
Nun möchte ich mit dem Programm auch in der Lage sein, Koreanische Texte einzugeben. Hierbei werden manche Buchstaben nach einem komplizierten System zu einem neuen Zeichen zusammengefasst.
z.B. wird aus "ㅂ" und "ㅏ" das Zeichen "바" und z.B. aus "ㅂ", "ㅏ" und "ㅁ" das Zeichen "밤". So, dies zur kurzen Erklärung. Das letzte, dargestellte Zeichen ist ein Schriftzeichen, das alle 3 koreanischen Buchstaben in sich vereint.
Die Logik dahinter ist ziemlich komplex. Wenn man jedoch eine Koreanische Tastatur ins Windows installiert und damit Text eingibt, dann sieht man, dass während des Schreibens direkt die Zeichen zusammengefasst werden, die zusammengefasst werden können/dürfen.
Ich könnte natürlich diese Koreanische Tastatur nutzen, um die Vokabeln in mein Lernprogramm einzutickern. Aber dann müsste ich ständig zwischen der Deutschen und der Koreanischen Tastatur hin und herschalten, weil man ja die Pärchen Deutsch/Koreanisch erfassen will. Das macht keinen wirklichen Spaß. Also kam ich anfangs auf die Idee, die Koreanischen Zeichen auf Buttons zu legen und mir meine eigene Tastatur damit zu basteln. Aber diese Tastatur schreibt natürlich ganau so wie unsere Deutsche, nur mit anderen Schriftzeichen. Es wird nichts zu neuen Zeichen zusammengefasst.

Nun die große Frage: Wie bekomme ich es hin, dass aus den einzelnen Zeichen die sogenannte Hangeul-Schrift wird? Gibt es für Delphi einen Konverter, der während des Schreibens automatisch z.B. den Inhalt des Edit-Feldes konvertiert? Es gibt diese Funktion ja im Windows, also wurde die dahinter stehende Logik schon mal entwickelt.

Ich versuche nun schon seit Stunden, diese komplizierte Logik zu verstehen bzw. das Verstandene umzusetzen, aber es ist wirklich unglaublich kompliziert. Und warum etwas neu erfinden, was ja eigentlich im Windows schon enthalten ist?

Vielleicht ist es wirklich nur ein einziger Befehl, der beispielsweise aus dem Text "ㅂㅏㅁ" das Zeichen "밤" generieren kann. Kann mir hier jemand einen Tipp geben?
Meine Idee war schon, sämtliche Kombinationsmöglichkeiten per IF abzufragen, aber wohin soll das führen? Das können tausende sein. Es muss was Leichteres geben.

Viele Grüße, André
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19272
Erhaltene Danke: 1740

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Sa 18.03.23 03:53 
user profile iconSchaberick hat folgendes geschrieben Zum zitierten Posting springen:
Ich könnte natürlich diese Koreanische Tastatur nutzen, um die Vokabeln in mein Lernprogramm einzutickern. Aber dann müsste ich ständig zwischen der Deutschen und der Koreanischen Tastatur hin und herschalten, weil man ja die Pärchen Deutsch/Koreanisch erfassen will. Das macht keinen wirklichen Spaß.
Per Shortcut (Windows + Leertaste) ist das schnell gemacht, aber warum schaltest du das nicht einfach per ActivateKeyboardLayout automatisch um, je nachdem an welcher Stelle man gerade etwas eingeben möchte?
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4764
Erhaltene Danke: 1052

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Sa 18.03.23 13:30 
Hallo,

online gefunden habe ich in Unicode.pas die Funktion WideComposeHangul (da ich aber kein koreanisch kann, weiß ich nicht genau, ob das die richtige Funktion für dich ist?).

Außerdem noch für C++:
libhangul (anscheinend von einem Koreaner selbst geschrieben) sowie NavilIME (Windows Hangul Input Method Editor based on TSF)
Hangul.cpp (Qt-Implementierung)

Direkt für die WinAPI habe ich keine öffentliche Funktion gefunden (ich denke, dies ist direkt bei dem Tastaturtreiber eingebaut).

Edit: Ich habe noch eine 2. Version der Unicode.pas gefunden (mußt mal selber schauen, ob diese gleich sind oder welche neuer ist).
Schaberick Threadstarter
Hält's aus hier
Beiträge: 5

Win 10, Win 11
Delphi 10.4 Comm., Delphi 10.0 Prof., Visual Studio 2019, Unity, Blender
BeitragVerfasst: Sa 18.03.23 14:00 
Hallo,

Die Idee mit dem Umschalten des Keyboardlayouts klingt schon mal sehr interessant. Mir kommt dabei gerade eine Idee: Da ich ja mit Buttons eine eigene Tastatur konstruiert habe, müsste ich doch nur auf die koreanische Tastatureingabe umschalten und dann über die Buttons so tun, als hätte ich auf der echten Tastatur eine Taste gedrückt.
Kann man über Quellcode das Event auslösen, dass eigentlich durch einen Tastendruck ausgelöst wird? Wenn ja, dann müsste mein Problem doch gelöst sein:

Beim Betreten des Edit-Feldes schalte ich auf Koreanische Eingabe um und simuliere über die TButtons Tastendrücke. Windows glaubt, ich hätte tatsächlich eine Taste gedrückt und müsste entsprechend reagieren.
Ich möchte nicht auf meine eigene Bildschirmtadtatur verzichten, weil ich sonst bei jedem koreanischen Schriftzeichen suchen muss, über welche Taste man es auslöst.

Ich muss jetzt nur erst mal herausfinden, wie man die einzelnen Tastaturlayouts einstellt.