Delphi - Szövegek rajzolása

Canvas objektum 5. rész

forráskód letöltése
A cikksorozat eddigi részeiben végignéztük, hogy milyen alakzatokat tudunk rajzolni a TCanvas osztály eljárásaival. Ebben a részben most a szöveg megjelenítésének módját, és az ezzel kapcsolatos funkciókat tekintjük át. A TCanvas osztálynak van egy Font objektuma, amin keresztül megadhatjuk annak a betűtípusnak a tulajdonságait, amellyel szöveget szeretnénk kiírni. A TFont osztály Name property-jében kell megadnunk a betűtípus nevét, a Size property-ben a méretét, a Color property-ben a színét, és a Style property-ben a stílusát. A Style property TFontStyles típusú, ami egy tömb, és a következő elemeket tartalmazhatja:
  • fsBold: vastag betű (félkövér).
  • fsItalic: dőlt betű.
  • fsUnderline: aláhúzott szöveg.
  • fsStrikeOut: áthúzott szöveg.
Ezeknek természetesen tetszőleges kombinációját használhatjuk. A betűtípus beállítása például az alábbi módon történhet:
  with Canvas.Font do begin
    Name := ’Arial’;
    Size := 14;
    Color := clBlue;
    Style := [fsItalic, fsUnderline];
  end;
vagy az Assign metódussal átadhatjuk egy másik TFont típusú objektum adatait:
  Canvas.Font.Assign(Form1.Font);

Amikor szöveget írunk a Canvas-ra, akkor annak színét a Font.Color property-ben adhatjuk meg. A felirat hátterére hatással van a Brush property Style mezőjének értéke is. Ha ennek értéke bsSolid, akkor a szöveg háttérszíne a Brush property Color mezőjében megadott szín lesz, ha pedig bsClear, akkor a szöveg háttere átlátszó lesz, vagyis a felirat mögötti rajz lesz látható.
Amikor egy feliratot pozícionálnunk kell, akkor tudnunk kell annak méretét is. Ez az éppen használt Font méretétől (Size), és egyéb tulajdonságaitól is függ, ezért szükség van olyan függvényekre, amikkel egy tetszőleges szöveg méretét meghatározhatjuk. Szerencsére vannak ilyenek. A felirat szélességét a TextWidth függvénnyel kérdezhetjük le. Paraméterként azt a sztringet kell megadni, aminek a szélességére kíváncsiak vagyunk.
  w := TextWidth(’Animare Software’);
Ha függőlegesen is pozícionálnunk kell, akkor a szöveg magasságára is szükségünk lehet. Erre a TextHeight függvényt használjuk.
  h := TextHeight(’Animare Software’);
Ha mindkét adatra egyszerre van szükségünk, akkor a TextExtent eljárással egyszerre kérdezhetjük le azokat. Az eredményt egy TSize típusban kapjuk vissza, aminek két mezője van: cx (szélesség) és cy (magasság).
var
  wh: TSize;
...
  wh := Canvas.TextExtent(’Animare Software’);

A szöveg kiírása a TextOut eljárással történhet. Az első két paraméter a felirat koordinátái, vagyis a felirat bal felső sarkának pozíciója. A harmadik paraméter a kiírandó szöveg.
  TextOut(100, 50, ’Animare Software’);

Ha egy olyan téglalap alakú helyen szeretnénk egy feliratot megjeleníteni, amiből a szöveg nem lóghat ki (például egy táblázat egyik mezője), akkor használjuk a TextRect eljárást. Ez annyiban különbözik a TextOut eljárástól, hogy az első paramétere egy TRect típusú változó, amely azt a területet határozza meg, ahol a felirat látszódhat.
var
  cell: TRect;
...
  TextRect(cell, cell.Left+2, cell.Top+2, ’Animare Software’);

A TextFlags property-ben a szöveg megjelenítésével kapcsolatos flag-eket állíthatunk be. Ezek sorban a következők:
  • ETO_CLIPPED: a TextRect eljárás automatikusan használja, a textOut-nál pedig nincs hatása.
  • ETO_OPAQUE: ha beállítjuk, akkor a szöveg háttere nem lesz átlátszó. Ez nagyban gyorsítja a szöveg kiírását, viszont a felirat mögötti rajz nem fog látszani.
  • ETO_RTLREADING: a felirat kiírása jobbról-balra történik.
  • ETO_GLYPH_INDEX: a sztring a karakterek képének indexét tartalmazza.


Canvas objektum cikksorozat