Umlaute graphisch drucken ?

Von Ausgaben mit der Gra-Engine über Generatoren bis zum Export in diversen Formaten

Moderator: Moderatoren

Antworten
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12906
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 45 Mal

Umlaute graphisch drucken ?

Beitrag von AUGE_OHR »

hi,

wenn ich auf nicht deutschen OS() Umlaute habe bekomme
ist die nicht ausgedruckt weil es dafür kein passendes Zeichen
gibt.
Nun hab ich mir überlegt ob es möglich ist die graphisch zu
simulieren also bei einem "ä" nur ein "a" drucken und dann
die "tütelchen".

Es fragt sich wie ich das nun "berechnen" kann ?
GraStringAt( oPS , {100,100}, "München" )
wie bekomme ich die Position des "ü" raus ?

gruss by OHR
Jimmy
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12906
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 45 Mal

FONTS umbenennen und Codepage

Beitrag von AUGE_OHR »

hi,

in dem zusammenhang : wenn ich ein deutsches ARIAL.TFF nehme und
nach DEUTSCH.TTF kopiere erscheint er nicht in FONTDB.PRG ?!
muss man evtl die ARIAL.TTF "patchen" weil da ja immer ARIAL drin
steht ?

wie kann ich überprüfen ob er den FONT genommen hat wenn ich

Code: Alles auswählen

 oFont := XbpFont() :new() :create( "28.Deutsch.normal" )
benutze ?

was ich auch noch nicht probiert habe ist oFont:Codepage. Normal steht
die wohl auf 1, aber es gibt ja auch OEM = 255
wenn ich also NTX = OEM verwende muss ich dann auch Codepage OEM
angeben wenn ich auf einem andern OS() bin als deutsch ?

gruss by OHR
Jimmy
Benutzeravatar
Rolf Ramacher
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1930
Registriert: Do, 09. Nov 2006 10:33
Wohnort: Bergheim
Danksagung erhalten: 3 Mal
Kontaktdaten:

Beitrag von Rolf Ramacher »

Hi Jimmy,

ich kann dir im Moment nicht folgen.

Ich habe mal getestet. In meiner appsys.prg habe ich drin.

Set Collation to German
Set Charset to Ansi.


Beim GraStringAt wird selbstverständlich "München" richtig ausgedruckt.
Gruß Rolf

Mitglied der Gruppe XUG-Cologne
www.xug-cologne.de
Benutzeravatar
andreas
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1902
Registriert: Mi, 28. Sep 2005 10:53
Wohnort: Osnabrück
Hat sich bedankt: 4 Mal
Kontaktdaten:

Beitrag von andreas »

Hallo Rolf,

Jimmy meint PCs, wo die deutsche Sprache und damit auch evtl. die Schriftarten nicht installiert sind. Auf diesen PCs werden dann die deutschen Sonderzeichen wie Umlaute usw.) nicht richtig dargestellt.
Gruß,

Andreas
VIP der XUG Osnabrück
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14653
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 88 Mal
Kontaktdaten:

Beitrag von Jan »

Nur mal so ins Blaue geschossen: Wie ist das z. B. mit Arial Unicode MS? Bietet das nicht die Umlaute auf jedem Rechner, egal welche Sprache das Betriebssystem auf dem betreffenden Rechner hat? Jedenfalls suggeriert der Name mir das.

Jan
Benutzeravatar
urbi
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 142
Registriert: So, 26. Mär 2006 18:47
Wohnort: 76185 Karlsruhe
Kontaktdaten:

Beitrag von urbi »

Hallo Jimmy

vielleicht eine blöde Frage, aber warum nicht

STRTRAN("München","ü","ue") ?

Gruss
Rainer
urbi
Günter Beyes
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 315
Registriert: Mo, 16. Okt 2006 13:04
Wohnort: Region Stuttgart

Beitrag von Günter Beyes »

@Jan:

vermutlich müssten zusätzlich die textorientierten Graphikfunktionen wie GraStringAt() und GraQueryTextBox() um UNICODE-Unterstützung erweitert und natürlich auch UNICODE-Texteingabe ermöglicht werden.

Günter
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12906
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 45 Mal

Beitrag von AUGE_OHR »

hi,
urbi hat geschrieben: aber warum nicht STRTRAN("München","ü","ue") ?
das ist das was ich jetzt mache auf chinesichen OS() aber das gefällt
mir nicht. Nun dachte ich irgendwie an GraQueryTextBox() oder so um
die Position des "ü" zu ermitteln aber irgendwie liege ich da immer noch
nicht an der richtigen Position ... (machmal klappt es und dann wieder
auf einer anderen Position nicht). Als Schrift hab ich Arial.
Jan hat geschrieben: Arial Unicode MS
hm ... ich finde das nicht auf meinen PC ?
... ok hab es raus das ich das Office Paket bemühen muss um die 23 MB
auf den Rechner zu bekommen.

danke, gruss by OHR
Jimmy
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14653
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 88 Mal
Kontaktdaten:

Beitrag von Jan »

Günter,

da könntest Du recht haben. War da nicht mal eine Meldung von Alaska, daß Xbase++ noch nicht Unicode-Fähig ist?

Problem ist, daß ich die Schrift bei mir in einem Projekt einsetze, und es funktioniert tadellos (in der Beziehung Unicode-Schrift unter Xbase++). Allerdings habe ich auf meinen Rechnern auch "nur" generell deutsche Betriebssysteme. Ich warte da also mal gespannt auf den Test von Jimmy, denn das hätte natürlich auch für meine Programme weitreichende Folgen. Ich setze teilweise Tahoma ein (gefällt mir halt einfach in dem ganzen Arial- und Times New Roman-Einheitsbrei). Die würde ich dann wohl auch alle auf Arial Unicode MS umschreiben.

Jan
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12906
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 45 Mal

Beitrag von AUGE_OHR »

hi,

so nun hab ich zwar Arialuni.ttf installiert und sehe es auch in FONTDB
aber nun stellt sich die Frage welche Codepage für deutsch einstellen
soll ... ich sehe :
Arial Unicode MS 24 43,01400000 J 128
Arial Unicode MS 24 43,01400000 J 129
Arial Unicode MS 24 43,01400000 J 130
Arial Unicode MS 24 43,01400000 J 134
Arial Unicode MS 24 43,01400000 J 136
Arial Unicode MS 24 43,01400000 J 177
Arial Unicode MS 24 43,01400000 J 178
Arial Unicode MS 24 43,01400000 J 161
Arial Unicode MS 24 43,01400000 J 162
Arial Unicode MS 24 43,01400000 J 186
Arial Unicode MS 24 43,01400000 J 238
Arial Unicode MS 24 43,01400000 J 204
Arial Unicode MS 24 43,01400000 J 222
aber davon "passt" doch keine zu deutsch, oder ? (noch nicht probiert)

gruss by OHR
Jimmy
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14653
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 88 Mal
Kontaktdaten:

Beitrag von Jan »

Jimmy,

"Ohne Fleiß kein Preis"
"Probieren geht über Studieren"
(Oh wie habe ich das immer gehasst, wenn irgendwelche Typen mit solch tollen guten alten deutschen Sprichworten ankamen :evil: )

Da Du ja sonst nix zu tun hast und ein langes und ansonsten langweiliges Wochenende vor Dir liegt, wünsche ich Dir viel Spaß damit. 8)

Aber ehrlich: Ich hab auch keine Ahnung. Ich hab selber bei mir nichts eingestellt, das passiert dann wohl automatisch über die unter Windows eingestellte Codepage. Schau Dir doch mal das hier an: http://support.microsoft.com/kb/287247/de. Da sind 2 interessante Punkte drin: 1. sind da auch Zeichen im vereinfachten Chinesisch drin (könnte für Dich wichtig sein). Und es gibt in der Mitte zwischen den beiden Tabellen einen "Hinweis" zum Einstellen der korrekten Gruppe unter Word. Vielleicht hilf das ja weiter.

Jan

PS: Hab gerade gesehen, daß unter 936 die vereinfachten chinesischen zeichen stehen, unter 950 aber auch die traditionellen. Also alles tutto completti für Dich.
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12906
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 45 Mal

Beitrag von AUGE_OHR »

hi,
Jan hat geschrieben: War da nicht mal eine Meldung von Alaska, daß Xbase++ noch nicht Unicode-Fähig ist?
ich bin der Meinung das es sich dabei nur um die Darstellung handelt.

was ich nun als String in der DBF abspeichere, ob 7-bit oder 8-bit oder
Unicode sollte IMHO keine Rolle spielen.

Probleme hab ich schon beim "bearbeiten" von solchen Unicode Strings
gehabt wenn ich z.b. SUBSTR(cUniCode,1,x) verwendet hat und nicht
eine "Leerstellen" an der Position x gehabt habe dann kamen "komische"
Ergebnisse raus.
die URL ist gut. Ich hatte mir das nun mal in Word angesehen und da gab
es irgendwo die Möglichkeit sich so eine Art Zeichentabelle anzusehen.
Ganz oben steht gleich LATIN-1 und wie ich in der Tabelle sehe ist das die
Codepage 1252.
Jan hat geschrieben: PS: Hab gerade gesehen, daß unter 936 die vereinfachten chinesischen zeichen stehen, unter 950 aber auch die traditionellen. Also alles tutto completti für Dich.
z.Z. brauche ich das "nur" andersrum. Ich muss nun die ARIALUNI.TTF
auf den chinesichen PC´s installieren damit ich nach "München" komme.

wenn ich aber nun einen FONT habe der deutsch <-> chinesich kann,
dann könnte ich ja auch mal versuchen ob ich auch in eine Hybrid-
Anwendung benutzten kann und dann die Bitmaps durch den FONT
ersezten kann ...

gruss by OHR
Jimmy
p.s. kann man eine DOS-Font der Hybridanwendung eigendlich auch zum
drucken mit GRA verwenden ?
Günter Beyes
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 315
Registriert: Mo, 16. Okt 2006 13:04
Wohnort: Region Stuttgart

Beitrag von Günter Beyes »

Hallo Jimmy,

ich habe mal etwas experimentiert...

Code: Alles auswählen

oXbp := XbpStatic():new( oDlg:drawingArea, , {5,70}, {250,24} )
oXbp:setFontCompoundName("15.Arial Unicode MS")
oXbp:Caption :=  MakeUnicode({23433, 35013, " München ",;
          30340, 36890, 29992, 23383, 20307} )
oXbp:create()
Das Ergebnis ist wie kaum anders zu erwarten unbrauchbar.
Immerhin erstaunlich, dass zufälligerweise ein paar chinesische Schriftzeichen zu sehen sind.
Hoffe, es ist nichts Peinliches dabei !

Dann habe ich XbpHtmlViewer als als Static-Ersatz ausprobiert.

Code: Alles auswählen

oXbp := XbpHtmlViewer():new( oDlg:drawingArea, , {5,60}, {220,40} )
oXbp:create()
oXbp:Navigate( "about:blank" )
do while oXbp:isBusy()
   sleep(10)
enddo
sleep(10)
cHtml := ;
"<html>" + ;
'<body>' + ;
'<style type="text/css"> <!-- body {overflow-y: Hidden} --> </style>' + ;
'<p style="font-face:Arial Unicode MS;font-size:80%;color:green">' + ;
'安装 München 的通用字体" + ;
"</p>" + ;
"</body>" + ;
"</html>"

oXbp:Document:body:innerHTML := cHtml
Das funktioniert (selbstverständlich). Aber die Effizienz?

Schließlich versuchsweise eine XbpStatic-Erweiterung mit Unicode-Unterstützung.
Unicode-Zeichen werden über ihren Dezimalcode angegeben. Nur -- woher weiß man diesen, wenn man nicht Microsofts Unicode-Seite in chinesischer Sprache zum Abkupfern nehmen kann?

Damit steht auch dem Drucken nicht mehr viel im Wege, meine ich. :)

Code: Alles auswählen

Nutzung:
oXbp := XbpUnicodeStatic():new( oDlg:drawingArea, , {5,70}, {250,24} )
oXbp:setFontCompoundName("10.Arial Unicode MS")
oXbp:Caption :=  {23433, 35013, " München ", 30340, 36890, 29992, 23383, 20307} 
oXbp:create()

#define DT_SINGLELINE 0x00000020

CLASS XbpUnicodeStatic FROM XbpStatic

EXPORTED:

VAR _caption

INLINE METHOD Create( oParent, oOwner, aPos, aSize, aPresParam, lVisible )

::_caption := ::caption
::caption  := ""
::drawMode := XBP_DRAW_OWNER

::XbpStatic:Create( oParent, oOwner, aPos, aSize, aPresParam, lVisible )

RETURN self

INLINE METHOD Draw()

LOCAL nHandle
LOCAL oPS
LOCAL nFlags := ::Options
LOCAL hDC    := 0
LOCAL aSize  := ::currentSize()
LOCAL sRect  := L2Bin(0)+ L2Bin(0)+ L2Bin(aSize[1]-1)+ L2Bin(aSize[2]-1)

if bAnd( nFlags, XBPSTATIC_TEXT_WORDBREAK ) = 0
   nFlags += DT_SINGLELINE
endif

oPS := ::lockPS()

oPS:setColor( ::setColorFG(), ::setColorBG() )

nHandle := oPS:lockHDC( 4, @hDC )

SetTextAlign( hDC, 0 )
DrawTextW( hDC, MakeUnicode(::_Caption)+chr(0)+chr(0), -1, @sRect, nFlags )

oPS:UnlockHDC( nHandle, hDC )

::unlockPS( oPS )

RETURN self

ENDCLASS    

FUNCTION MakeUnicode( aIn )

LOCAL cOut := "", i, j, l
LOCAL cAnsi

FOR i := 1 TO len( aIn )
   IF valtype( aIn[i] ) == "N"
      cOut += W2Bin( aIn[i] )
   ELSE
      cAnsi := aIn[i]
      l := len( cAnsi )
      FOR j := 1 TO l
         cOut += cAnsi[j]+chr(0)
      NEXT
   ENDIF
NEXT

RETURN cOut


STATIC FUNCTION DrawTextW( hDC, cText, nCount, sRect, nFlags )
STATIC tpl
IF tpl = NIL
   tpl := DllPrepareCall( "user32.dll", DLL_STDCALL, "DrawTextW" )
ENDIF
RETURN DllExecuteCall( tpl, hDC, cText, nCount, @sRect, nFlags )

STATIC FUNCTION SetTextAlign( nHDC, nAlign )
STATIC tpl
IF tpl = NIL
   tpl := DllPrepareCall( "gdi32.dll", DLL_STDCALL, "SetTextAlign" )
ENDIF
RETURN DllExecuteCall( tpl, nHDC, nAlign )
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15696
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 66 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Beitrag von brandelh »

AUGE_OHR hat geschrieben:was ich nun als String in der DBF abspeichere, ob 7-bit oder 8-bit oder Unicode sollte IMHO keine Rolle spielen.
Hi,

wenn eines sicher ist, dann dass in einer DBF je Zeichen genau ein Byte zum Speichern zur Verfügung steht. 7 Bit Zeichensätze (gibts die überhaupt noch ?) werden genauso wie 8 Bit gespeichert (Werte von 0 bis 127 - der Rest fehlt). Für UNICODE bräuchte man 2 Byte je Zeichen, das hat man aber im DBF Treiber nicht. Somit kann man in einer aktuellen DBFNTX oder FOXCDX auch kein UNICODE speichern.

Wie das in Zukunft geregelt wird ? Keine Ahnung.

Beide DBF-Formate müssen rückwärtskompatibel bleiben, wahrscheinlich wird dafür ein neues eigenständiges Dateiformat nötig (entwickelt) werden.

Aber wie soll eigentlich ein chinesischer PC ein deutsches Ü eingeben können ? Da fehlen doch die Tasten. Ansonsten kann man doch bei Windows mehrere Tastaturlayouts (hier DE / US) gleichzeitig installieren.
Deutsch ist der Font ja auch nicht, ich meine er heißt West-/Europäisch.
Kann man diesen beim Chinesischen nicht einfach mit installieren ?
Gruß
Hubert
Benutzeravatar
Koverhage
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2470
Registriert: Fr, 23. Dez 2005 8:00
Wohnort: Aalen
Hat sich bedankt: 102 Mal
Danksagung erhalten: 3 Mal
Kontaktdaten:

Beitrag von Koverhage »

Hubert,

der müßte kein Ü eingeben. Ein komfortables Programm zeigt den Ort nach Eingabe der PLZ automatisch ;-)
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12906
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 45 Mal

Beitrag von AUGE_OHR »

hi,
brandelh hat geschrieben:
AUGE_OHR hat geschrieben: was ich nun als String in der DBF abspeichere, ob 7-bit oder 8-bit oder Unicode sollte IMHO keine Rolle spielen.
wenn eines sicher ist, dann dass in einer DBF je Zeichen genau ein Byte zum Speichern zur Verfügung steht. 7 Bit Zeichensätze (gibts die überhaupt noch ?) werden genauso wie 8 Bit gespeichert (Werte von 0 bis 127 - der Rest fehlt). Für UNICODE bräuchte man 2 Byte je Zeichen, das hat man aber im DBF Treiber nicht. Somit kann man in einer aktuellen DBFNTX oder FOXCDX auch kein UNICODE speichern.
hm ... ja ... aber ich habe doch die Zeichen in der DBF ?!
ich benutzte auch ein normales XBPSLE weil das SLEpic wegen er "2
Zeichen" nicht funktioniert.

Code: Alles auswählen

   oXbpC := XBPSLE() :new( drawingArea,, { 268, 64 }, { 146, 27 } )
   oXbpC:bufferLength := 40
   oXbpC:tabStop := .T.
   IF lChina    // read/write
      oXbpC:dataLink := { | x | IIF( x == NIL, CHINABMP->BILDTEXT, mBILDTEXT := x ) }
   ELSE         // read only
      oXbpC:dataLink := { | x | IIF( x == NIL, CHINABMP->BILDTEXT, NIL ) }
   ENDIF
   oXbpC:create()
   oXbpC:setData()
die Ein/Ausgabe macht keine Probleme, aber sobald ich Functionen wie
SUBSTR() oder STRTRAN() benutzen will klappt das mit den "2 Zeichen"
nicht mehr. Ein SEEK() und XbpBrowse funktioniert aber sodas man damit
schon was anfangen kann. Ich weiss auch das SHUM (Alaska Forum) eine
komplett Application damit laufen hat ...

Das ist einer der Fragen für die DevCon.
brandelh hat geschrieben: Aber wie soll eigentlich ein chinesischer PC ein deutsches Ü eingeben können ? Da fehlen doch die Tasten. Ansonsten kann man doch bei Windows mehrere Tastaturlayouts (hier DE / US) gleichzeitig installieren.
habe ich installiert. nützt aber nur bei der Eingabe und wirkt sich nicht
auf das drucken aus (wie auch)
brandelh hat geschrieben: Deutsch ist der Font ja auch nicht, ich meine er heißt West-/Europäisch.
Kann man diesen beim Chinesischen nicht einfach mit installieren ?
Ich habe eine Hybrid und eine GUI Anwendung. Die Hybrid Anwendung
hat einen eigenen "DOS" Font wärend GUI auf den M$ Font zugreift. Zum
Drucken mit GRA muss ich aber auf die GUI Font (oder kann ich meinen
DOS Font auch zu drucken benutzen ? ) und benutzte dafür Arial.

nun werde ich den Arial UNICODE Font auf den chinesichen PC installieren
und dann ausprobieren ob ich beim ausdrucken an die deutschen Umlaute
komme. Der Weg chinesiche Zeichen auf einem deutschen OS() mittels
Arial UNICODE dazustellen wird vielleicht unter GUI gehen aber sicherlich
nicht in Hybrid (?), oder ? Da ich aber auch noch ein Bitmap von den
chinesichen Zeichen mache zeige ich in der Hybrid Anwendung eben das
Bitmap an und drucke auch das Bitmap.

wird ein Zeitlang dauern bis ich ein Ergebniss habe, den ich muss mir hier
erst wieder ein PC zusammenbauen da ich meiner Schwester den von mir
gegeben habe und ich in der Firma nichts "live" ausprobiere.

danke erstmal für die Hilfe
gruss by OHR
Jimmy
Antworten