![]() |
Verschiedene Zeichensätze in einer Anwendung !!??!!
In meinem Programm (welches bis zu Windows-NT sehr gut funktioniert(e):thuimb: ), nutze ich zwei RichEdit's, denen ich per Objektmanager zwei verschiedene Charsets zuordnete. Dann versorgte ich die Lines mit entsprechenden chars (eines in Lateinisch, eines, z.B. kyrillisch (CyrillicWindows oder auch KOI-8). Die Anzeige der Schriftzeichen klappte wunderbar.
Seit Windows 2000 kriege ich das nicht mehr hin :cry: . Anstelle der fremden Schriftzeichen werden die berühmten Hyroglyphen dargestellt, obwohl in den verwendeten Schriftarten (z.B. Arial) auch die kyrillischen Zeichen enthalten sind und auch richtig zugeordnet werden. Der Parameter Charset, den ich programmiere, wird von Windows völlig ignoriert. Mit der Gebietsschema -Umschaltung habe ich schon experimentiert, ohne Erfolg :wall: . Hat jemand eine Idee? Hat jemand mit Delphi (4-7) eine Desktop-Anwendung programmiert, in der verschiedene Schriftsätze (charsets) verwendet werden? (die unter Windows2000, XP auch noch dargestellt werden)? Frustrierend ist, daß die Programme auf dem alten NT-Rechner problemlos laufen... |
Re: Verschiedene Zeichensätze in einer Anwendung !!??!!
Am besten verwendst du entsprechende Unicode-Komponenten, die Delphi-Standardkomponenten können das von Haus aus nicht.
Der Grund liegt bei den verwendetetn API-Aufrufen, z.B. muss SendMessageW() statt SendMessage() verwendet werden. Siehe z.B. ![]() |
Re: Verschiedene Zeichensätze in einer Anwendung !!??!!
Danke erstmal dafür.
Ich werd' den alten Code wohl nochmal ziemlich weit von unten anpacken müssen :gruebel: . Dennoch: Selbst die Windows-Zeichentabelle (Zubehör) zeigt für den Zeichensatz Arial im Bereich über 128 die kyrillischen Zeichen an (8-Bit-Chars). Genau diese gebe ich an die RichEdit.Lines.... Eigentlich kein Problem und bis zu W2K wars ja auch keines. Einfach nur 8bit-chars in 8bit Strings. Also, falls jemand mal eine wirklich übersichtliche Info (Artikel, Buch o.ä.) darüber findet,wie die verschiedenen Windows eigentlich die Zeichentabellen handlen und wie diese mit Codepages und Charsets verbandelt sind - ich wäre dankbar für diese INFO. Beste Grüße! |
Re: Verschiedene Zeichensätze in einer Anwendung !!??!!
Benutze mal einen Stream um den (offensichtlich) fehlerhaften RTF-Quelltext in ein Memo zu schreiben. Und schau mal nach, ob der verwendete Zeichsatz stimmt.
BTW, Welche Delphi-Version?
Delphi-Quellcode:
Bei mir ist der RTF-Quelltext mit Delphi 6 (Update Pack 2, RTL Update 3) insofern fehlerhaft, als dass der zweite Font (\f1) erst nach dem Text selektiert wird. Nach Einfügen von \f1 nach \fs16 inklusive Zurückschreiben mit Button3 führt zum gewünschten Ergebnis :)
procedure TForm1.Button1Click(Sender: TObject);
begin RichEdit1.Clear; RichEdit1.Font.Charset := RUSSIAN_CHARSET; RichEdit1.Lines.Add('Çäðàâñòâóëòå!'); // Здравствулте! end; procedure TForm1.Button2Click(Sender: TObject); var Stream: TStringStream; begin Stream := TStringStream.Create(EmptyStr); try RichEdit1.Lines.SaveToStream(Stream); Memo1.Text := Stream.DataString; finally Stream.Free; end; end; procedure TForm1.Button3Click(Sender: TObject); var Stream: TStringStream; begin Stream := TStringStream.Create(Memo1.Text); try RichEdit1.Lines.LoadFromStream(Stream); finally Stream.Free; end; end; Ist zwar keine Lösung, aber erklärt das Problem. Vielleicht kann man das Problem fixen, indem man die erste Zeile des RTF-Quelltextes fixt... Gruss Nico |
Re: Verschiedene Zeichensätze in einer Anwendung !!??!!
Falls Du wirklich ernsthaft mit mehreren verschiedenen Sprachen in einer Anwendung arbeiten willst, so kann ich dir nur empfehlen dein Programm auf Unicode umzustellen. Mit Codepage/Charsets zu arbeiten wird nicht für alle Controls/Fälle gehen.
In der Ausgabe ![]() Als weiter Komponenten sei dir empfohlen: ![]() ![]() |
Re: Verschiedene Zeichensätze in einer Anwendung !!??!!
Also - Fetten Dank an NicoDE !!! :!:
Ich hab das nachvollzogen - es stimmt. der RTF-Code wird falsch erzeugt! (Wenigstens eine saubere Erklärung!) Ich werd' drüber grübeln, ob mir ein Work-Around dazu einfällt. Der Trick mit dem Editieren von RTF im Memo war jedenfalls SUPER :!: Ansonsten -auch an die anderen besten Dank - habt ja recht, Unicode ist für sowas sicher die Zukunft, aber das bedeutet eben für alten Code ziemlich viel Arbeit. Vielen Dank auch für die Links! |
Re: Verschiedene Zeichensätze in einer Anwendung !!??!!
Noch ein Nachtrag zur Delphi-Version:
Ich habe den Trick von NicoDE jetzt mit Delphi6 und Delphi7 ausprobiert - das gleiche Ergebnis: Die Umschaltung des Fonts (\f1) erfolgt in beiden Versionen gleich - falsch. :cry: |
Re: Verschiedene Zeichensätze in einer Anwendung !!??!!
Wäre interessant, das gleiche Binary unter Windows NT 4.0 zu testen und die RTF-Quelltexte zu vergleichen.
Vielleicht hat sich 'nur' das Verhalten des RichEdit-Controls auf dem Weg von NT4 zu NT5 geändert... |
Re: Verschiedene Zeichensätze in einer Anwendung !!??!!
Liste der Anhänge anzeigen (Anzahl: 1)
Ich hab das natürlich inzwischen ausprobiert, es ist so.
Der generierte RTF-Code unterscheidet sich wesentlich (Siehe anliegendes Bild). Das kann ja dann doch wieder mal nur an der Windows-Mutation liegen :kotz: Ich muß noch dazu sagen, ich habe jeweils mit der Delphi professional Version gearbeitet. Bei "Enterprise" soll ja bezüglich RichEdit-Methoden und RTF generell noch etwas mehr drin sein. Aber wie man sieht, hat es daran ja nicht gelegen. Danke nochmals an alle Helfer. Wenn ich die Sache elegant gelöst kriege, melde ich mich noch mal. |
Re: Verschiedene Zeichensätze in einer Anwendung !!??!!
Ich habe auch dieses Problem getroffen. Es ist interessant, dass TMemo korrekt mit der Umstellung auf verschiedene Zeichensätze umgeht. TRichEdit kann leider das nicht. Und das bewundert mich, sowie diese beide Komponenten sind von TCustomMemo abgeleitet.
Aber ich habe festgestellt, dass dieses Problem im Umweg kann gelöst werden – mit der Verwendung speziale Schriftarten z.b: PROMT Helv Cyr Spec. P.S. Die Untersuchung der Quellcode vom Module RichEdit hat mir auch nichts gebracht, es ist zu kompliziert für mich :? Und ich werde sehr dankbar, wenn ein offizielle Weg für Lösung hier gezeigt wird. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:04 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