Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi griechische Zeichen (Unicode) im Delphi Editor (https://www.delphipraxis.net/52185-griechische-zeichen-unicode-im-delphi-editor.html)

skyware 25. Aug 2005 05:27


griechische Zeichen (Unicode) im Delphi Editor
 
Hallo zusammen,

wiedermal bin ich auf ein Problem gestossen. Ich bin daran
meine Applikation Unicode fähig zu machen. Das ich andere
Komponenten die Unicode fähig sind brauche hab ich verstanden :thumb:
Die Frage ist nun wie kann ich direkt im Delphi Editor z.B. griechische
Zeichen eingeben ?

Delphi-Quellcode:
xLabel.Caption := 'κομμθνιψατιον';
Ich kriege einfach diese Zeichen nicht in den Editor.
Im Word z.B. klappt es einwandfrei.
Was muss ich hier noch beachten?

Gruss und Danke im voraus :drunken:

MarcoWarm 25. Aug 2005 06:56

Re: griechische Zeichen (Unicode) im Delphi Editor
 
also mit Delphi 6 stehen die Chancen ganz schlecht, daß du das im Editor hinbekommst. Die direkte Eingabe von Multibyte-Strings wird nicht mal in D7 unterstützt.

Idee 1: lade die Strings zur Laufzeit aus der Resource
Idee 2: Update auf D2005 (da geht's)

ok, ich weiß, daß hilft nich wirklich weiter.

Ciao
Marco

Bernhard Geyer 25. Aug 2005 07:25

Re: griechische Zeichen (Unicode) im Delphi Editor
 
Um halbwegs einfach damit in der IDE in den Pas-Files arbeiten zu können benötigst Du D2005.
Als Krücke kannst Du die einzelnen Zeichen per Order-Value ansprechen:

Delphi-Quellcode:
xLabel.Caption := WideChar(#$03BA);
In der Ausgabe 5.2003 der Zeitschrift "Der Entwickler" gibt es von mir einen Artikel zum Thema "Delphi und Unicode" (Titel: "We are a world")

skyware 25. Aug 2005 07:37

Re: griechische Zeichen (Unicode) im Delphi Editor
 
Danke für Eure Antworten!

Da mir leider einzelne Zeichen nicht genügen und ich nicht auf D2005
wechseln will, bleibt mir wohl nur die Lösung mit dem Laden der Texte
aus einer Ressource Datei.

Danke! :thumb:

Bernhard Geyer 25. Aug 2005 07:54

Re: griechische Zeichen (Unicode) im Delphi Editor
 
Mußt du den das grichische in den Sourcdateien haben?
Kannst Du nicht mit den deutschen Arbeiten un die Übersetzung mit GNU GetText durchführen lassen?

Olli 25. Aug 2005 09:00

Re: griechische Zeichen (Unicode) im Delphi Editor
 
Zitat:

Zitat von Bernhard Geyer
Um halbwegs einfach damit in der IDE in den Pas-Files arbeiten zu können benötigst Du D2005.

"Unicode" umfaßt ja mehr als einen fest zweibytigen Zeichensatz. Das was Windows benutzt (auch intern) ist ja nichts anderes als UCS-2, welches eben bis auf die fehlenden Surrogates UTF-16 entspricht. Man kann ja aber auch noch UTF-8 verwenden. Das geht auch in älteren Versionen der IDE. Zwar muß der String dann konvertiert werden um mit den "Unicode-APIs" angezeigt zu werden, aber allemale ginge es.
Zitat:

Zitat von Bernhard Geyer
Als Krücke kannst Du die einzelnen Zeichen per Order-Value ansprechen:
Delphi-Quellcode:
xLabel.Caption := WideChar(#$03BA);

Und du bist dir da wirklich ganz sicher? Ich weiß nicht, denke aber, daß du in unserem Thema mitgemischt haben solltest und meinen Beitrag gelesen haben müßtest ...
Zitat:

Zitat von Olli
Zitat:

Zitat von Kyro
Delphi 7 speichert das so: Text = #1057#1085#1110#1078#1086#1082'.txt'

Cool, dann können neuere Delphiversionen also doch mit Unicode-Zeichenliteralen umgehen. Jetzt wäre noch interessant herauszufinden ab welcher Version das möglich ist. Als übliche Verdächtige bleiben nur noch Version 5-7 (wir können ja nicht ausschließen, daß 7 die erste mit dieser Unterstützung war). Bei Delphi 4 wird aus #1057 in der kompilierten Datei ein #33, weil #1057 = #$0421 ... und der (rote) obere Teil "abgeschnitten" wird, dadurch erhalten wir #33 = #$21.

Bitte:
Wären die Mitdiskutanten mit Delphi 5, 6, 7, 8 mal bitte so freundlich und würden dieses kurze Program kompilieren und anhängen. Danke. Statt Anhängen wäre es vielleicht schneller, wenn ihr die Ergebnisse selber überprüft. Wenn als Ausgabe eine MessageBox mit dem Inhalt "!=V6>:.txt" kommt, speichert Delphi es so wie ich es bei D4 beobachtet habe, was ansonsten kommen müßte, weiß ich jetzt nicht, aber ich denke mal "Сніжок.txt".

Delphi-Quellcode:
program Test;
uses
  Windows;

const MsgBoxText:WideString = #1057#1085#1110#1078#1086#1082'.txt';
begin
  MessageBoxW(0, @MsgBoxText[1], nil, 0);
end.

jfheins 25. Aug 2005 09:12

Re: griechische Zeichen (Unicode) im Delphi Editor
 
Bei Delphi 7 kommt
Zitat:

---------------------------
Fehler
---------------------------
!=V6>:.txt
---------------------------
OK
---------------------------
;)

Btw.: Was ist UTF-8 und UTF-16 ?

Olli 25. Aug 2005 09:18

Re: griechische Zeichen (Unicode) im Delphi Editor
 
Zitat:

Zitat von jfheins
Btw.: Was ist UTF-8 und UTF-16 ?

http://www.unicode.org/faq/utf_bom.html und http://www.unicode.org/faq/ (wenn noch Fragen offen sind).

Bernhard Geyer 25. Aug 2005 09:26

Re: griechische Zeichen (Unicode) im Delphi Editor
 
Für Άrabĩ habe ich WideChar($0386)+WideString('rab')+WideChar($0129) im Quellcode stehen - und es funktioniert.

Also geht es mit D6 + SP's

Olli 25. Aug 2005 09:36

Re: griechische Zeichen (Unicode) im Delphi Editor
 
Zitat:

Zitat von Bernhard Geyer
Für Άrabĩ habe ich WideChar($0386)+WideString('rab')+WideChar($0129) im Quellcode stehen - und es funktioniert.

Also geht es mit D6 + SP's

Delphi-Quellcode:
const MsgBoxText:WideString = WideChar(1057)+WideChar(1085)+WideChar(1110)+WideChar(1078)+WideChar(1086)+WideChar(1082)+'.txt';
Der hier kompiliert erst garnicht wegen "inkompatiblen Typen".
Delphi-Quellcode:
const MsgBoxText:WideString = WideChar($0386)+WideString('rab')+WideChar($0129);
Gibt mir eine wunderbare und nachvollziehbare Exception in einem Delphi-Package während des Kompilierens ...

Beides: D4

Bernhard Geyer 25. Aug 2005 09:47

Re: griechische Zeichen (Unicode) im Delphi Editor
 
Zitat:

Zitat von Olli
Zitat:

Zitat von Bernhard Geyer
Für Άrabĩ habe ich WideChar($0386)+WideString('rab')+WideChar($0129) im Quellcode stehen - und es funktioniert.

Also geht es mit D6 + SP's

Delphi-Quellcode:
const MsgBoxText:WideString = WideChar(1057)+WideChar(1085)+WideChar(1110)+WideChar(1078)+WideChar(1086)+WideChar(1082)+'.txt';
Der hier kompiliert erst garnicht wegen "inkompatiblen Typen".
Delphi-Quellcode:
const MsgBoxText:WideString = WideChar($0386)+WideString('rab')+WideChar($0129);
Gibt mir eine wunderbare und nachvollziehbare Exception in einem Delphi-Package während des Kompilierens ...

Beides: D4

Dann ist D4 definitiv zu alt um halbwegs vernünftig mit Unicode zu arbeiten.

Olli 25. Aug 2005 09:55

Re: griechische Zeichen (Unicode) im Delphi Editor
 
Zitat:

Zitat von Bernhard Geyer
Dann ist D4 definitiv zu alt um halbwegs vernünftig mit Unicode zu arbeiten.

Aber wo ist die Grenze? D5, D6?

jfheins 25. Aug 2005 09:56

Re: griechische Zeichen (Unicode) im Delphi Editor
 
Also so bekomme ich eine MessageBox mit (für mich unverständlichen :mrgreen: ) Unicode-Zeichen - ich vermute, das gewünschte Ergebnis ;)
Delphi-Quellcode:
program Test;
uses
   Windows;

const MsgBoxText: Array[1..6] of WideChar = (#1057,#1085,#1110,#1078,#1086,#1082);

begin
   MessageBoxW(0, @MsgBoxText[1], nil, 0);
end.
Also muss man mit einem Array of WideChar arbeiten, statt einem WideString ... Delphi & Unicode :roll:

P.S. const MsgBoxText:WideString = WideChar($0386)+WideString('rab')+WideChar($0129); geht bei mir ;)

Olli 25. Aug 2005 10:04

Re: griechische Zeichen (Unicode) im Delphi Editor
 
Zitat:

Zitat von jfheins
Also muss man mit einem Array of WideChar arbeiten, statt einem WideString ... Delphi & Unicode :roll:

Sehr schöne Lösung. Dann werde ich gleich mal mein Uniconv aufrüsten ;) ... dann unterstützt es diese Syntax auch.

Union 25. Aug 2005 10:10

Re: griechische Zeichen (Unicode) im Delphi Editor
 
Zitat:

Zitat von jfheins
Also so bekomme ich eine MessageBox mit (für mich unverständlichen :mrgreen: ) Unicode-Zeichen - ich vermute, das gewünschte Ergebnis ;)
Delphi-Quellcode:
program Test;
uses
   Windows;

const MsgBoxText: Array[1..6] of WideChar = (#1057,#1085,#1110,#1078,#1086,#1082);

begin
   MessageBoxW(0, @MsgBoxText[1], nil, 0);
end.
Also muss man mit einem Array of WideChar arbeiten, statt einem WideString ... Delphi & Unicode :roll:

P.S. const MsgBoxText:WideString = WideChar($0386)+WideString('rab')+WideChar($0129); geht bei mir ;)

Damit es fehlerfrei funktioniert muss es heissen (Nullbyte am Ende!):
Delphi-Quellcode:
const MsgBoxText: Array[1..7] of WideChar = (#1057,#1085,#1110,#1078,#1086,#1082,#0);

Olli 25. Aug 2005 10:28

Re: griechische Zeichen (Unicode) im Delphi Editor
 
Zitat:

Zitat von Union
Damit es fehlerfrei funktioniert muss es heissen (Nullbyte am Ende!):
Delphi-Quellcode:
const MsgBoxText: Array[1..7] of WideChar = (#1057,#1085,#1110,#1078,#1086,#1082,#0);

Stimmt prinzipiell. Ist aber glaube ich nur an Paragraphen oder DWORD-Grenzen relevant, weil ansonsten immer noch ne 0 dranhängt. Außerdem ist es irrelevant, weil noch ein Cast stattfindet (bei MessageBox) - Delphi sorgt also dafür, daß es nullterminiert ist. (Zumindest in unserem Fall).

Aber recht hast du, sicher ist sicher ;)

Union 25. Aug 2005 12:41

Re: griechische Zeichen (Unicode) im Delphi Editor
 
Zitat:

Zitat von Olli
Zitat:

Zitat von Union
Damit es fehlerfrei funktioniert muss es heissen (Nullbyte am Ende!):
Delphi-Quellcode:
const MsgBoxText: Array[1..7] of WideChar = (#1057,#1085,#1110,#1078,#1086,#1082,#0);

Stimmt prinzipiell. Ist aber glaube ich nur an Paragraphen oder DWORD-Grenzen relevant, weil ansonsten immer noch ne 0 dranhängt. Außerdem ist es irrelevant, weil noch ein Cast stattfindet (bei MessageBox) - Delphi sorgt also dafür, daß es nullterminiert ist. (Zumindest in unserem Fall).

Aber recht hast du, sicher ist sicher ;)

Bei mir gab es OHNE #0 nämlich Сніжок.txt säep98füuj afölkj aösfdkl ösldfkj etc. Es hängt vom momentanen Zustand und der Fragmentierung usw. ab, was passiert. Es klappt auch häufiger dass man einfach StrPas wegläßt... und mal wieder nicht.

Olli 25. Aug 2005 13:34

Re: griechische Zeichen (Unicode) im Delphi Editor
 
Zitat:

Zitat von Union
Bei mir gab es OHNE #0 nämlich Сніжок.txt säep98füuj afölkj aösfdkl ösldfkj etc. Es hängt vom momentanen Zustand und der Fragmentierung usw. ab, was passiert. Es klappt auch häufiger dass man einfach StrPas wegläßt... und mal wieder nicht.

Funktioniert es bei dir ohne das @ und die Referenzierung des Elements? Dann müßte definitiv ein impliziter Cast passieren.
Irgendwie gefällt mir C++ immer besser :mrgreen: ...


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:33 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz