Truetype Font

Konzeptionelles, Technisches, Termine, Fragen zum Hersteller usw.

Moderator: Moderatoren

Antworten
Benutzeravatar
Rudolf
Programmier-Gott
Programmier-Gott
Beiträge: 1418
Registriert: Mo, 02. Jan 2006 23:03
Wohnort: Salzburg/Österreich
Kontaktdaten:

Truetype Font

Beitrag von Rudolf »

Hallo,
habe einen Font mit allen meinen Symbolen erstellt. Es gibt aber anscheinend verscchiedene Bereiche in einem Font, auch eine "private Use Area". Hier befinden sich Zeichen ab dez. 57344 oder Hex E000.
Wie kann ich diese Zeichen in xBase++ darstellen ? mit chr(57344) geht jedenfalls nichts. Mit Tools wie Nexusfonts wird aber alles korrekt angezeigt.
Der Font : http://www.formcommander.net/download/formcommander.ttf
Grüße
Rudolf
Dateianhänge
Zwischenablage01.jpg
Zwischenablage01.jpg (176.89 KiB) 2087 mal betrachtet
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15697
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 66 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Truetype Font

Beitrag von brandelh »

Hallo Rudolf,

chr() verarbeitet nur 0 bis 255 alle größeren Zahlen werden passend gemacht ;-)

Hier der Beweis:

Code: Alles auswählen

#include "Gra.ch"
#include "Xbp.ch"
#include "Common.ch"

procedure main()
   local x
   set charset to ansi

   for x := 255 to 300
       msgbox("Test: '"+chr(x)+"' = '"+chr(x % 256)+"'")
   next

   msgbox("Kompletttest")

   for x := 0 to 50000
       if chr(x) # chr(x % 256)
          msgbox("Test: '"+chr(x)+"' = '"+chr(x % 256)+"'","Ist anders")
       endif
   next

   msgbox("Ende")

return
Gruß
Hubert
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15697
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 66 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Truetype Font

Beitrag von brandelh »

und das macht Sinn, denn ANSI hat genauso wie OEM nur 256 Zeichen, man braucht UNICODE um andere darzustellen.
Beweis hier der PowerBasic Code ... chr$() verhält sich genauso wie chr() bei uns, erst chr$$() zeigt das richtige Unicode Zeichen an.
Xbase++ kann diese Bereiche nicht darstellen, du musst deinen Font also in 0 bis 255 unterbringen ;-)

Code: Alles auswählen

#COMPILE EXE
#DIM ALL
#OPTION VERSION5

FUNCTION PBMAIN () AS LONG

    MSGBOX ("Test A: '"+CHR$(10003)+"' = '"+CHR$(10003 MOD 256)+"'"+$CR+_
            "Test U: '"+CHR$$(10003)+"' # '"+CHR$(10003 MOD 256)+"'")

END FUNCTION 
Dateianhänge
Ansi_Unicode.png
Ansi_Unicode.png (9.23 KiB) 2074 mal betrachtet
Gruß
Hubert
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15697
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 66 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Truetype Font

Beitrag von brandelh »

PS: die Zeichen sind schön ;-)
Gruß
Hubert
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12909
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 46 Mal

Re: Truetype Font

Beitrag von AUGE_OHR »

Rudolf hat geschrieben:habe einen Font mit allen meinen Symbolen erstellt. Es gibt aber anscheinend verscchiedene Bereiche in einem Font, auch eine "private Use Area". Hier befinden sich Zeichen ab dez. 57344 oder Hex E000.
Wie kann ich diese Zeichen in xBase++ darstellen ? mit chr(57344) geht jedenfalls nichts. Mit Tools wie Nexusfonts wird aber alles korrekt angezeigt.
wie Huber schon sagte bist du bei > 256 bei einer "anderen Codierung".
bei DBCS geht es bis 64Kb also würde ich es damit mal versuchen.
->
Authentifizierung erforderlich
p.s. von Günter Beyes gibt es hier im Forum einen Thread mit CreateFont API. auch in der Xoanon.LIB wird folgender Code verwendet

Code: Alles auswählen

  nRetVal:=DllCall("Gdi32.dll",DLL_STDCALL,"CreateFontA",;
 ::FontHeight,;
 ::FontWidth,;
 ::FontEscapement,;
 ::FontOrientation,;
 ::FontWeight,;
 IF(::FontItalic==.T.,1,0),;
 IF(::FontUnderline==.T.,1,0),;
 IF(::FontStrikeOut==.T.,1,0),;
 ::FontCharSet,;  // Codepage - DBCS
 ::FontOutputPrecision,;
 ::FontClipPrecision,;
 ::FontQuality,;
 cPitchAndFamily,;
 ::FontTypeFace)
gruss by OHR
Jimmy
Antworten