Les fontes de caractères avec eForth Windows
publication: 23 novembre 2024 / mis à jour 23 novembre 2024
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:
- cHeight hauteur de la police en pixels
- cWidth largeur moyenne des caractères
- cEscapement angle d'échappement
- cOrientation orientation
- cWeight poids de la police (gras, normal)
- bItalic boolée style italique
- bUnderline booléen Souligné
- bStrikeOut booléen barré
- iCharSet Jeu de caractères
- iOutPrecision précision de sortie
- iClipPrecision précision du découpage
- iQuality qualité de sorte
- iPitchAndFamily Pitch et famille de la police
- 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:
- FF_DECORATIVE Polices de nouveauté. Le gothique en est un exemple.
FF_DONTCARE
Utilisez la police par défaut.- FF_MODERN Polices avec une largeur de trait constante, avec ou sans empattements. Pica, Elite et Courier New en sont des exemples.
- FF_ROMAN Polices avec une largeur de trait variable et avec empattements. MS Serif en est un exemple.
- FF_SCRIPT Polices conçues pour ressembler à de l’écriture manuscrite. Script et Cursive en sont des exemples.
- FF_SWISS Polices avec une largeur de trait variable et sans empattements. MS Sans Serif en est un exemple.
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:
selectFontArial
sélectionne la fonte et stocke le handlehdc hFontArial16 SelectObject drop
rattache le handlehFontArial16
à l'environnement graphiquehdc
hdc 10 10 lpString TextOutA drop
affiche la chaine de caractères qui est définie danslpString
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