Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Betriebssysteme (https://www.delphipraxis.net/27-betriebssysteme/)
-   -   Verschiedene Zeichensätze in einer Anwendung !!??!! (https://www.delphipraxis.net/26740-verschiedene-zeichensaetze-einer-anwendung.html)

LPaul 28. Jul 2004 13:52


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...

scp 28. Jul 2004 14:58

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. hier.

LPaul 28. Jul 2004 15:17

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!

NicoDE 28. Jul 2004 15:31

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:
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;
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 :)

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

Bernhard Geyer 28. Jul 2004 16:03

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 5.2003 habe ich einen Artikel über das Themas Delphi + Unicode geschrieben (We are a world).

Als weiter Komponenten sei dir empfohlen:
ElPack (Unicode ab Win95 + Enhanced-Controls)
TNT-Controls (Unicode ab NT, Standard-Controls)

LPaul 28. Jul 2004 17:32

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!

LPaul 28. Jul 2004 17:47

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:

NicoDE 28. Jul 2004 18:07

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...

LPaul 28. Jul 2004 21:09

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.

wnew 8. Aug 2004 19:32

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 22:51 Uhr.

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