Autres articles / Other articles

Les fontes de caractères avec eForth Windows

publication: 23 novembre 2024 / mis à jour 23 novembre 2024

Read this page in english

 


Une fonte de caractères est un ensemble de glyphes, c'est-à-dire de représentations visuelles de caractères, d'une même police d’écriture, de même style, corps et graisse.

Fonte et police

La fonte se distingue du caractère (typeface ou font family en anglais) qui regroupe tous les corps et graisses d’une même famille. Ainsi, Helvetica est un caractère. L'Helvetica romain gras 10 points est une fonte, et l'Helvetica romain gras 12 points est une autre fonte.

Quelques familles de caractères et les fontes associées:

Arial
Arial, Arial Italic, Arial Bold, Arial Bold Italic
Courier New
Courier New, Courier New Italic, Courier New Bold, Courier New Bold Italic
Verdana
Verdana, Verdana Italic, Verdana Bold, Verdana Bold Italic

Ici, nous n'avons cité que trois familles de fontes. Il en existe beaucoup d'autres. Certaines ne sont pas utilisables via Gdi32.dll.

CreateFontA

L'accès à une fonte s'effectue via le mot CreateFontA dont voici la définition:

\ Creates a logical font with the specified characteristics 
z" CreateFontA" 14 Gdi32 CreateFontA  ( [14_params] -- hFont ) 

Le mot CreateFontA utilise 14 paramètres. Dans l'ordre:

  1. cHeight hauteur de la police en pixels
  2. cWidth largeur moyenne des caractères
  3. cEscapement angle d'échappement
  4. cOrientation orientation
  5. cWeight poids de la police (gras, normal)
  6. bItalic boolée style italique
  7. bUnderline booléen Souligné
  8. bStrikeOut booléen barré
  9. iCharSet Jeu de caractères
  10. iOutPrecision précision de sortie
  11. iClipPrecision précision du découpage
  12. iQuality qualité de sorte
  13. iPitchAndFamily Pitch et famille de la police
  14. pszFaceName nom de la police

cHeight

Ce paramètre détermine en hauteur, en unités logiques, de la cellule de caractère ou du caractère de la police.

cWidth

Largeur moyenne, en unités logiques, des caractères dans la police demandée. Si cette valeur est égale à zéro, le mappeur de polices choisit une valeur de correspondance la plus proche.

cEscapement

Angle, en dixièmes de degrés, entre le vecteur d’échappement et l’axe X de l’appareil. Le vecteur d’échappement est parallèle à la ligne de base d’une ligne de texte.

cOrientation

Angle, en dixièmes de degrés, entre la ligne de base de chaque caractère et l’axe X de l’appareil.

cWeight

Poids de la police comprise entre 0 et 1000. Par exemple, 400 est normal et 700 en gras. Si cette valeur est égale à zéro, une pondération par défaut est utilisée.

Les valeurs suivantes sont définies pour des raisons pratiques: FW_DONTCARE FW_THIN FW_EXTRALIGHT FW_ULTRALIGHT FW_LIGHT FW_NORMAL FW_REGULAR FW_MEDIUM FW_SEMIBOLD FW_DEMIBOLD FW_BOLD FW_EXTRABOLD FW_ULTRABOLD FW_HEAVY FW_BLACK

bItalic

Spécifie une police italique si elle est définie sur TRUE.

bUnderline

Spécifie une police soulignée si elle est définie sur TRUE.

bStrikeOut

Police barré si elle est définie sur TRUE.

iCharSet

Jeu de caractères. Les valeurs suivantes sont prédéfinies: ANSI_CHARSET BALTIC_CHARSET CHINESEBIG5_CHARSET DEFAULT_CHARSET EASTEUROPE_CHARSET GB2312_CHARSET GREEK_CHARSET HANGUL_CHARSET MAC_CHARSET OEM_CHARSET RUSSIAN_CHARSET SHIFTJIS_CHARSET SYMBOL_CHARSET TURKISH_CHARSET VIETNAMESE_CHARSET

iOutPrecision

Précision de sortie. La précision de sortie définit à quel point la sortie doit correspondre à la hauteur, à la largeur, à l’orientation des caractères, à l’échappement, au pitch et au type de police de la police demandée.

iClipPrecision

Précision du découpage. La précision du découpage définit comment découper des caractères qui se trouvent partiellement en dehors de la zone de découpage.

iQuality

Qualité de sortie. La qualité de sortie définit la manière avec laquelle GDI doit tenter de faire correspondre les attributs de police logique à ceux d’une police physique réelle.

iPitchAndFamily

Pitch et famille de la police. Les deux bits d’ordre inférieur spécifient le pitch de la police et peuvent être l’une des valeurs suivantes:
  DEFAULT_PITCH
  FIXED_PITCH
  VARIABLE_PITCH

Les quatre bits d’ordre élevé spécifient la famille de polices et peuvent être l’une des valeurs suivantes:

pszFaceName

Pointeur vers une chaîne terminée par null qui spécifie le nom de police de la police. La longueur de cette chaîne ne doit pas dépasser 32 caractères, y compris le caractère null de fin.

Exemple de sélection d'une fonte:

0 value hFontArial16   \ handle for selected font 
 
: selectFontArial ( -- ) 
    16          \ Hauteur de la police en pixels 
     0          \ Largeur moyenne des caractères 
     0          \ Angle d'échappement 
     0          \ Orientation 
    FW_NORMAL   \ Poids de la police (gras, normal) 
    FALSE       \ Style italique 
    FALSE       \ Souligné 
    FALSE       \ Barré 
    DEFAULT_CHARSET         \ Jeu de caractères 
    OUT_DEFAULT_PRECIS 
    CLIP_DEFAULT_PRECIS 
    DEFAULT_QUALITY 
    DEFAULT_PITCH FF_SWISS or 
    z" Arial"   \ Nom de la police 
    CreateFontA to hFontArial16 
  ; 

La création d'une fonte par CreateFontA est intégrée dans le mot selectFontArial.

Le mot selectFontArial utilise tous les paramètres pour une fonte Arial, de 16 pixels de haut.

La taille de la fonte est fixée à 16. A l'issue de l'exécution de CreateFontA, le handle résultant est stocké dans la valeur hFontArial16.

Voici comment utiliser ce handle hFontArial16:

: lpString s" This is a test string..."  ; 
 
: TXTout  ( -- )     
    selectFontArial 
    hdc hFontArial16 SelectObject drop 
    hdc 10 10 lpString TextOutA  drop 
; 

Dans la définition de TXTout, on effectue ces opérations:

Résultat:

Ici, le code final qui exploite TXTout:

\ define window dimension 
400 constant WINDOW_WIDTH 
300 constant WINDOW_HEIGHT 
 
: run14 
   WINDOW_WIDTH WINDOW_HEIGHT window 
    TXTout 
    begin 
        poll 
        IDLE event = if 
 
        then 
        event FINISHED = 
    until 
  ; 

En résumé, il faudra définir autant de handle pour chaque fonte que vous souhaitez utiliser. Ensuite, la sélection d'une fonte s'effectue au travers du handle de chaque fonte définie.


Legal: site web personnel sans commerce / personal site without seling