XbpFont() -> API Font ?

Grafische Primitive, XbaseParts und Darstellungsfragen allgemein.

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

XbpFont() -> API Font ?

Beitrag von AUGE_OHR »

wenn man nun eine passenden Font "berechnen" will stellt sich die Frage : hat ein Xbase++ Font die "richtige" Grösse ?
"Bei der Ausgabe am Bildschirm entspricht der Wert in :height normalerweise der vertikalen Anzahl an Pixeln, die ein Zeichen des Fonts einnimmt."

aufmerksam bin ich geworden bei der Demo ( GraTest.ZIP ***) von Günter Beyes wo er ein Handle von einem Font für die API benötigt.
*** http://www.xbaseforum.de/viewtopic.php? ... 48&p=66946
// For the following six font parameters,
// there is no, or no complete, match in XbpFont IVars, unfortunately;
// so they should be guessed, if at all possible.
Pablo verwendet nun die Function @ot4xb:_create_font_(), jedoch nicht mit allen Parametern, die noch andere Ergebnisse liefert.

nun hat Pablos Weg einen Vorteil : Xbase++ kann nur einen INT() Wert benutzen während Pablo einen Font so erstellt

Code: Alles auswählen

 :: hFont := @ot4xb:_create_font_(hDC,"Verdana",115,0,0,0)
was ca. 10 Points*** entspricht. Er ist also möglich jede Grösse bei einem Truetype Font mit Xbase++ zu verwenden.
*** einen festen "Faktor" scheint es nicht zu geben ...

p.s. natürlich verwenden alle die gleiche "CreateFontA" API Function ... was sonst
Dateianhänge
GraSetFont.zip
Source need ot4xb
(3.02 KiB) 220-mal heruntergeladen
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

Re: XbpFont() -> API Font ?

Beitrag von AUGE_OHR »

ich "denke" ich habe einen "Dreher" mit den 72 ...

Code: Alles auswählen

nhigh := nSize * (10.0 +0.05) / ( 72 / nYLogPixel )
damit läuft das Demo mit Pablos @ot4xb:_create_font_() viel "passender" :blob8:
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

Re: XbpFont() -> API Font ?

Beitrag von AUGE_OHR »

noch mal eine Korrektur

Code: Alles auswählen

   IF OnOSVersion() < 6
      nhigh := ROUND(nSize * (10.0 +0.05) / ( 72/nYLogPixel ),0)
   ELSE
      nhigh := ROUND(nSize * ( 8.0 +0.05) / ( 72/nYLogPixel ),0)
   ENDIF
es scheint als wenn unter Windows 7/8/10 ein Font "weniger Pixel" benötigt als unter XP ?
gruss by OHR
Jimmy
Benutzeravatar
Hans Zethofer
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 278
Registriert: Fr, 27. Jan 2006 8:29
Wohnort: 2700 Wiener Neustadt
Hat sich bedankt: 1 Mal
Kontaktdaten:

Re: XbpFont() -> API Font ?

Beitrag von Hans Zethofer »

OnOSVersion() fehlt! :?:

"os.ch" einbinden #-o

Code: Alles auswählen

    STATIC FUNCTION OnOSVersion()
    LOCAL cVersion := OS(OS_VERSION)
    LOCAL nVersion := 0
    LOCAL nPosi

       nPosi := AT(".",cVersion)
       IF nPosi > 0
          nVersion := VAL(SUBSTR(cVersion,1,nPosi-1))
       ELSE
       ENDIF

    RETURN nVersion
_____________
lg
Hans
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

Re: XbpFont() -> API Font ?

Beitrag von AUGE_OHR »

Hans Zethofer hat geschrieben:OnOSVersion() fehlt! :?:
sorry ... aber du hast die erfasst was die Function machen soll. =D>
Danke für den Code.
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

Re: XbpFont() -> API Font ?

Beitrag von AUGE_OHR »

hi,

nun funktioniert es mit der "Formel" unter XP und Windows 8 / 10 aber mit Windows 7 scheint es wieder "zu klein" ... :banghead:
wenn ich es mit dem Source ausprobieren scheint die XP Einstellung auch für Windows 7 zu gelten,
also muss man noch weiter erweitern

Code: Alles auswählen

   IF OnOSVersion() < 6.02
      nhigh := ROUND(nSize * (10.0 -0.05) / ( 72/nYLogPixel ),0)
   ELSE
      nhigh := ROUND(nSize * ( 8.0 -0.05) / ( 72/nYLogPixel ),0)
   ENDIF

STATIC FUNCTION OnOSVersion()
LOCAL cVersion := OS(OS_VERSION)
RETURN VAL(cVersion)
p.s. Fett, Unterstrichen und Kursive gehen in diesem Beispiel mit ot4xb:_create_font_() nicht da ich die iAttributes nicht berücksichtige.
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

Re: XbpFont() -> API Font ?

Beitrag von AUGE_OHR »

hi,

mit der jetzigen "Formel" bekomme ich nun unter den verschiedenen OS() meisten ähnliche Ergebnisse
nun habe ich einen weiter Tip bekommen wegen der Formel : "Internal Leading" https://support.microsoft.com/en-us/kb/74299
gruss by OHR
Jimmy
Antworten