Delphi - Betűtípusok listájának lekérdezése

GDI 8. rész

forráskód letöltése
A telepített betűtípusok neveinek lekérdezése egyszerűen megtörténhet a Screen objektumon keresztül. Most viszont azt vizsgáljuk meg, hogy hogyan tudjuk ugyanezt megtenni a GDI függvények segítségével, de hogy ne legyen olyan egyszerű a helyzet, csak a megadott tulajdonsággal rendelkező betűtípusokat jelenítjük meg. Sőt, a lekérdezett betűtípusok több tulajdonságát is megtudhatjuk a lekérdezés során. A betűtípusok lekérdezése az EnumFontFamiliesEx függvénnyel történik. Ez viszont önmagában még nem használható, hanem szükség lesz egy függvényre is, aminek a deklarációja a következőképpen néz ki:
function EnumFontsProc(var LogFont: TLogFont; var TextMetric: TTextMetric; FontType: Integer; Data:
    Pointer): Integer; stdcall;
A függvény neve tetszőleges lehet, a paraméterezése viszont nem. Erről még később lesz szó, de most térjünk vissza az EnumFontFamiliesEx függvényhez. Ennek első paramétere egy Device Context azonosító, amit például a GetDC függvénnyel kérdezhetünk le.
A második paraméter egy TLogFont struktúra. Ebben mindössze három mezőt kell megadni, ezek a következők:
  • lfCharset: az ebben a mezőben megadott karakterkészlettel rendelkező font-ok kerülnek listázásra. Ha a DEFAULT_CHARSET konstanst adjuk meg, akkor az összes betűtípus listázásra kerül. Érdekes lehet még a SYMBOL_CHARSET (szimbólumokat tartalmazó karakterkészletek), EASTEUROPE_CHARSET (kelet-európai karakterkészlet);
  • lfFaceName: ha üres sztringet adunk meg, akkor az összes font, ellenkező esetben csak a megadott nevűek lesznek listázva;
  • lfPitchAndFamily: ennek a mezőnek az értéke mindig 0 legyen.
A harmadik paraméter egy olyan függvény címe, amelynek a deklarációja megegyezik a fent bemutatott függvényével (EnumFontsProc).
A negyedik paraméter egy pointer egy általunk megadott objektumra. Ez a mellékelt példában a Form-on található ListBox komponens objektuma, amiben a font-ok neveit megjelenítjük.
Az utolsó paraméter mindig 0.

A listázásnál minden font-nál lefut a paraméterként megadott függvény. Ennek LogFont paraméterében megkapjuk a betűkészlet tulajdonságait. A példaprogramban az lfPitchAndFamily mező értékét vizsgáljuk. Ennek típusa byte, aminek minden bitje egy-egy tulajdonságot határoz meg. Az alsó két bit a betűk közötti távolságra utal. Ha mindkét bit értéke 0, akkor a DEFAULT_PITCH (alapértelmezett), ha az 1-es bit értéke 1, akkor a FIXED_PITCH (rögzített betűtávolság, pl. Courier), ha pedig a 2-es bit értéke 1, akkor a VARIABLE_PITCH (változó betűtávolság) az érvényes. A betűkészlet kategóriáját (font family) a következő konstansokkal tudjuk azonosítani:
  • FF_DECORATIVE FF_DONTCARE FF_MODERN FF_ROMAN FF_SCRIPT FF_SWISS
A legegyszerűbb módja ennek, hogy töröljük az alsó két bitet, és a kapott értéket összehasonlítjuk a megfelelő konstanssal.
  family:=LogFont.lfPitchAndFamily and $FC;
Hasonlóképpen járhatunk el a betűköz távolságának meghatározásakor, de ekkor pont az alsó két bit értékét tartjuk csak meg.
  pitch:=LogFont.lfPitchAndFamily and $03;
Persze az összehasonlítás megoldható másképpen is, pl. egy a konstans értékekkel végzett ÉS művelettel:
  if (LogFont.lfPitchAndFamily and FF_SCRIPT)=FF_SCRIPT then ...





GDI cikksorozat