Entwickler-Ecke

Grafische Benutzeroberflächen (VCL & FireMonkey) - russisch drucken mit canvas.


ibh_compucat - Di 14.02.12 17:35
Titel: russisch drucken mit canvas.
Hallo Leidensgenossen,

ich habe ein Programm, daß nun auf russisch erweitert werden soll (russische Maske, russischer Druck). Das interne Problem mit Labels, Edits usw habe ich mit den Tnt Komponenten gelöst. Läuft prima.
Nun soll auch das Protokoll in russisch ausgedruckt werden. Dazu habe ich die internen Variablen auf widestring verbreitert,
und es werden auch russische Zeichen an den Canvas übergeben. Aber der druckt nur ??????.
Gibt es auch sowas wie TntLabel für Labels, also TntCanvas.... ?

Ich habe auch versucht, in einen PDF Creator zu drucken, da kommen ebenfalls nur ?????.

Kann mir jemand helfen? Ich arbeite mit D6 Ent.

Gruß ibh_compucat


baka0815 - Di 14.02.12 17:56

Ich vermute mal, dass die Schriftart die zum Druck verwendet wird, mit den kyrillischen Schriftzeichen nicht zurecht kommt.


ibh_compucat - Di 14.02.12 17:59

habe ich auf Tahoma umgestellt.

ibh_compucat


Delphi-Laie - Di 14.02.12 18:45

Es gibt keine russischen, sondern nur kyrillische Buchstaben.


ibh_compucat - Di 14.02.12 18:59

ja, es gibt ja mehrere kyrillische Alphabete. Mit dem Begriff "russisch" wollte ich deutlich machen, daß ich das in Russland gebräuchlichste (kyrillische) Alphabet meine.
Aber ich wollte das Problem nicht unnötig "verästeln".

Danke für den Hinweis.
ibh_compucat


jaenicke - Di 14.02.12 19:02

Verwende keine Canvas-Funktionen, sondern gib die Daten direkt mit der API auf den HDC des Druckers aus. Wenn überhaupt, geht es so. Natürlich nur, wenn du explizit die DrawTextW usw. nimmst, also immer die Unicodevarianten.

Und eine aktuelle Delphiversion, bei der das alles ohnehin schon geht, wäre natürlich auch eine Möglichkeit. Immerhin kannst du jetzt bis nächsten Monat von Delphi 6 zum Upgradepreis auf XE2 upgraden. ;-)


Gausi - Di 14.02.12 22:39

Ich hab grade mal in den alten Delphi7-Code meines Players geguckt. Da nutze ich eine Funktion WideCanvastextOut(aCanvas, ...), die wohl in der Unit TNTGraphics.pas definiert ist. Wenn du die TNTs eh benutzt, sollte das weiterhelfen. :)


rushifell - Mi 15.02.12 00:10

Gausi hat folgendes geschrieben:
Da nutze ich eine Funktion WideCanvastextOut(aCanvas, ...), die wohl in der Unit TNTGraphics.pas definiert ist.

Diese Procedure nutzt ExtTextOutW, das leider nicht viel taugt. Arabischer Text z.B. wird nicht immer von rechts nach links dargestellt. Ich nutze stattdessen DrawTextW mit dem ich bisher keine Probleme hatte (wie auch von jaenicke empfohlen). TntLabel nutzt ürigens auch letzteres.


ibh_compucat - Mi 15.02.12 11:32

Ein ganz großes Dankeschön an alle.

Das war die Lösung, es funktioniert prima mit WideCanvastextOut.
Nocheinmal vielen, vielen Dank.

Schöne Grüße
ibh_compucat