Zur Homepage des Deutschsprachige Xbase-Entwickler e. V.
Xbase++-Wiki des Deutschsprachige Xbase-Entwickler e. V.

Eurozeichen ausdrucken

Moderator: Moderatoren

Antworten
Jojo
Cut&Paste-Entwickler
Cut&Paste-Entwickler
Beiträge: 48
Registriert: So, 22. Jul 2012 13:44

Eurozeichen ausdrucken

Beitrag von Jojo » Mo, 26. Dez 2016 21:05

Hallo zusammen,

habe ein Problem mit dem Wunsch eines Kunden nach einem Eurozeichen auf einem Ausdruck.

Das Feld in dem der Betrag steht, ist zu klein für die drei Zeichen "EUR", weshalb dort ein "€" hin soll.

Habe es erfolglos mit chr(128) und diversen anderen Zahlen versucht.

Dann habe ich folgendes kleines Programm geschrieben...

Code: Alles auswählen

private zahl    := 001
private zeile   := 10
private spalte := 01

*set printer to KY04
*set device to printer

  do while .t.

        @ zeile, spalte say chr(zahl)

        zeile ++
        zahl ++

          if zeile = 30
          spalte ++
          zeile = 10
          endif

          if zahl = 999
          RETURN
          endif

        loop
  enddo
...dessen Ausgabe auf dem Bildschirm in etwa so aussieht:

Code: Alles auswählen

  
        ìí╡╔▌±                                                 )=Qey
        Äó╢╩▐≥                                                 *>Rfz
        Åú╖╦▀≤                                                 +?Sg{
        Éñ╕╠α⌠                                                 ,@Th|
        æÑ╣═ß⌡                                                 -AUi}
        ƪ║╬Γ÷                                                 .BVj~
        ôº╗╧π≈                                                 /CWk^?
        ö¿╝╨Σ°                                                 0DXlÇ
        ò⌐╜╤σ∙                                                 1EYmü
        û¬╛╥µ·                                                 2FZné
        ù½┐╙τ√                                                 3G[oâ
        ÿ¼└╘Φⁿ                                                 4H\pä
        Ö¡┴╒Θ²                                                !5I]qà
        Ü«┬╓Ω■                                                "6J^rå
        ¢»├╫δ                                                 #7K_sç
        £░─╪∞                                                 $8L`tê
        ¥▒┼┘φ                                                 %9Mauë
        ₧▓╞┌ε                                                 &:Nbvè
        ƒ│╟█∩                                                 ';Ocwï
        á┤╚▄≡                                                 (<Pdxî

(Bei Gelegenheit könnte mir vielleicht auch jemand erklären, weshalb das Programm zwei Spalten auswirft :?: )

Wenn ich das ganze auf den Drucker schicke, kommt irgendwo...
¡
¢
£
:blob8:
¥
Š
§
š
©
ª
«
¬
­
®
¯
°
±
²
³
Ž^L

Nach Eingrenzen des Zahlenkreises habe ich so herausgefunden, dass ich mit chr(164) das Eurozeichen hinbekomme.

Dann flux eine private Variable "d_eur := chr(164)" angelegt und im Programmablauf eingefügt:

Code: Alles auswählen

    @ prow(), 0 say d_p5 + eval( q_mvg, xi ) + d_eur + d_c11 + d_cr 
    setprc( 0, 0 )
Was nun aber zu einem Run-time error "strings can only be contatenated to strings" führt.

Hat jemand eine Idee, was ich da nun wieder falsch mache?

Bin wie immer für jedweden Tipp dankbar.

Grüße
Jojo

Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 11072
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg

Re: Eurozeichen ausdrucken

Beitrag von AUGE_OHR » Di, 27. Dez 2016 8:29

Jojo hat geschrieben:Was nun aber zu einem Run-time error "strings can only be contatenated to strings" führt.
Hat jemand eine Idee, was ich da nun wieder falsch mache?
hm ... bist du sicher das es das chr(164) ist ?
Jojo hat geschrieben:Bin wie immer für jedweden Tipp dankbar.
probiere doch mal so (ungetestet)

Code: Alles auswählen

@ prow(),        0 say d_p5 + eval( q_mvg, xi )
@ prow(), PCol()+1 SAY d_eur
@ prow(), PCol()+1 SAY d_c11 + d_cr
gruss by OHR
Jimmy

paulberger
Rookie
Rookie
Beiträge: 10
Registriert: Mo, 02. Nov 2015 13:43

Re: Eurozeichen ausdrucken

Beitrag von paulberger » Di, 27. Dez 2016 15:09

Das Euro-Zeichen muss in dem Zeichensatz (Font und Character Set) enthalten sein, was nicht immer der Fall ist. Es wird u.U. auch mit unterschiedlichen Bytes dargestellt, z.B. in dem Zeichensatz "Windows 1252 = CP1004 = ISO 8859-2" ist das Euro-Zeichen unter 0x80 = chr(128) erreichbar, mit dem Zeichensatz "OEM Codepage 858" und mit "UTF-8 = ISO 10646" unter 0xD5 = chr(213), sowie mit dem Zeichensatz "Latin-1 = ISO 8859-1" unter 0xA4 = chr(164) (siehe auch Abbildung in <FlagShip-dir>/manual/charset.pdf). Wenn der Zeichensatz für die Bilschirm- und Drucker-Ausgabe unterschiedlich ist, muss dies programmtechnisch berücksichtigt werden.

Paul

paulberger
Rookie
Rookie
Beiträge: 10
Registriert: Mo, 02. Nov 2015 13:43

Re: Eurozeichen ausdrucken

Beitrag von paulberger » Di, 27. Dez 2016 16:05

Dann flux eine private Variable "d_eur := chr(164)" angelegt und im Programmablauf eingefügt:

@ prow(), 0 say d_p5 + eval( q_mvg, xi ) + d_eur + d_c11 + d_cr
setprc( 0, 0 )

Was nun aber zu einem Run-time error "strings can only be contatenated to strings" führt.
Die Variable d_eur ist in Ihrem Beispiel character (siehe Handbuch Kapitel FUN.CHR) , eine von den anderen Variablen (die verkettet werden sollen) wahrscheinlich nicht. Einfache Kontrolle: mit dem -d Schalter (debugger) kompilieren, auf der o.g. Zeile Breakpoint setzen, und die Variablen anschauen.

Gruss, Paul

Jojo
Cut&Paste-Entwickler
Cut&Paste-Entwickler
Beiträge: 48
Registriert: So, 22. Jul 2012 13:44

Re: Eurozeichen ausdrucken

Beitrag von Jojo » Di, 27. Dez 2016 20:28

Hallo Jimmi,

wenn ich Deinen Code benutze kommt keine Fehlermeldung mehr.
Vielen Dank!

Hallo Paul,

da sich dank Jimmi das Problem mit den aufeinanderfolgenden Variablen erledigt hat, kann ich mich wieder dem eigentlichen Problem zuwenden.

Ich habe alle drei Vorschläge chr(164, 213 und 128) versucht.

In der Druckdatei steht, an der Stelle wo das Eurozeichen stehen sollte, immer ein "NIL", was seltsam ist, weil bei meinen vorherigen Versuchen mit chr(213) blieb die Stelle einfach leer.

Auf jeden Fall bekomme ich kein Eurozeichen mehr hin, wie ich das mit meinem Standalone Progrämmchen geschaft habe.
Es scheint also einen Unterschied zu machen, von welchem Programm aus ich drucke.
Macht es auch einen Unterschied, auf welchen Drucker ich die Datei schicke?
Also könnte es sein, das ich es irgendwann mal schaffe auf meinem HP Officejet ein Eurozeichen zu drucken, damit zum Kunden gehe, der Kyocera Laserdrucker nutzt, und dort blöd dastehe, weil bei ihm das Eurozeichen wieder nicht erscheint?

Grüße Jürgen

Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 14211
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Kontaktdaten:

Re: Eurozeichen ausdrucken

Beitrag von brandelh » Mi, 28. Dez 2016 8:17

Ich kenne mich nur mit Xbase++ aus, hier wird immer der Windows Zeichensatz (OEM oder Ansi, beides wird von Windows geliefert) verwendet und damit auch gedruckt.
Die Standard Windows Fonts kennen das Euro Zeichen heut zu Tage, was auf eingebaute Druckerfonts nicht unbedingt zutrifft.
Bei Xbase++ muss man im Programm einen Schalter setzen, damit das Euro Zeichen verwendet wird.

Wenn du also Druckerfonts nutzt, so ist das Ergebnis nie sicher, insbesondere bei älteren Druckern.
Mit Windows GDI (Grafik-)Druck sollte das Ergebnis zwischen Anzeige (Ansi) am Monitor und auf dem Drucker gleich sein.
Gruß
Hubert

paulberger
Rookie
Rookie
Beiträge: 10
Registriert: Mo, 02. Nov 2015 13:43

Re: Eurozeichen ausdrucken

Beitrag von paulberger » Mi, 28. Dez 2016 11:01

1. Du hast geschrieben
In der Druckdatei steht, an der Stelle wo das Eurozeichen stehen sollte, immer ein "NIL", was seltsam ist, weil bei meinen vorherigen Versuchen mit chr(213) blieb die Stelle einfach leer. Auf jeden Fall bekomme ich kein Eurozeichen mehr hin, wie ich das mit meinem Standalone Progrämmchen geschaft habe.
was eindeutig bedeutet, dass du dich entweder bei dem Variablen-Namen vertippt hast, oder die d_eur Variable (noch) gar nicht definiert/zugewiesen wurde, sonst würde dort nicht NIL ausgegeben.

2. Wie bereits Hubert geschrieben hat
Wenn du also Druckerfonts nutzt, so ist das Ergebnis nie sicher, insbesondere bei älteren Druckern.
Mit Windows GDI (Grafik-)Druck sollte das Ergebnis zwischen Anzeige (Ansi) am Monitor und auf dem Drucker gleich sein.
hängt die Darstellung von dem Euro-Zeichen von dem verwendeten/eingebauten Font (und dem Zeichensatz) des Druckers ab - es macht definitiv keinen Unterschied, aus welchem Programm die Ausgabe erfolgt. Um ganz sicher zu sein auf allen Drucken das gleiche zu drucken, verwende in GUI Modus die PrintGui() Funktion, womit jeder GDI (und Netzwerk, USB usw) Drucker unterstützt wird. Es wird nicht nur Windows, sondern auch Linux unterstützt. Siehe FlagShip Handbuch und die Beispiele <FlagShip_dir>/examples/printergui.prg und western.prg

Paul

Antworten