Az alsó és felső indexeket a Word-ben a betű tulajdonságainál adhatjuk meg. A betű tulajdonságait a Delphi-ben a TFont osztályon keresztül adhatjuk meg, ez viszont nem tartalmaz olyan speciális beállítási lehetőségeket, mint az alsó- és felső indexek. Nyilvánvaló, hogy más megoldást kell keresnünk.
A karakterek formátumát a RichEdit-ben üzenetek formájában tudjuk lekérdezni, illetve beállítani. Ehhez szükséges egy TCharFormat struktúra, amelynek deklarációját a RichEdit unit-ban találjuk meg.
TCharFormatA = record
cbSize: UINT;
dwMask: Longint;
dwEffects: Longint;
yHeight: Longint;
yOffset: Longint;
crTextColor: TColorRef;
bCharSet: Byte;
bPitchAndFamily: Byte;
szFaceName: array[0..LF_FACESIZE - 1] of AnsiChar;
end;
TCharFormat = TCharFormatA;
A cbSize mezőben kell megadnunk a struktúra méretét (SizeOf(TCharFormat)). a dwMask mezőben adhatjuk meg, hogy a struktúra mely mezőiben találhatók valós adatok. Ennek értékeit az alábbi konstansok kombinációjával adhatjuk meg:
| Konstans |
Jelentés |
| CFM_BOLD |
A dwEffects mezőben a CFE_BOLD érték (bit) valós adatot tartalmaz. |
| CFM_CHARSET |
A bCharSet mező valós adatot tartalmaz. |
| CFM_COLOR |
A crTextColor mező, és a CFE_AUTOCOLOR érték a dwEffects mezőben valós adatot tartalmaz. |
| CFM_FACE |
Az szFaceName mező valós adatot tartalmaz. |
| CFM_ITALIC |
A CFE_ITALIC érték a dwEffects mezőben valós adatot tartalmaz. |
| CFM_OFFSET |
Az yOffset mező valós adatot tartalmaz. |
| CFM_PROTECTED |
A CFE_PROTECTED érték a dwEffects mezőben valós adatot tartalmaz. |
| CFM_SIZE |
Az yHeight mező valós adatot tartalmaz. |
| CFM_STRIKEOUT |
A CFE_STRIKEOUT érték a dwEffects mezőben valós adatot tartalmaz. |
| CFM_UNDERLINE |
A CFE_UNDERLINE érték a dwEffects mezőben valós adatot tartalmaz. |
A dwEffects mező a betű formázásának különböző tulajdonságait tartalmazza. Ezeket a tulajdonságokat kapcsolóként adhatjuk meg, tehát vagy be van állítva a tulajdonság pl. áthúzás), vagy nem. Minden beállításhoz egy-egy bit tartozik, melyeket konstansok kombinációival állíthatunk be. A használható konstansok az alábbi táblázatban láthatók:
| Konstans |
Jelentés |
| CFE_AUTOCOLOR |
A szöveg színe a GetSysColor (COLOR_WINDOWTEXT) függvény visszatérési értékének felel meg. |
| CFE_BOLD |
Félkövér stílus. |
| CFE_DISABLED |
Csak a RichEdit 2.0 és ennél későbbi változatainál: A karakterek árnyékkal jelennek meg, amelyek 3/4 ponttal, vagy 1 pixellel vannak eltolva (amelyik nagyobb). |
| CFE_ITALIC |
Dőlt betű stílus. |
| CFE_STRIKEOUT |
A karakterek át vannak húzva. |
| CFE_UNDERLINE |
A karakterek alá vannak húzva. |
| CFE_PROTECTED |
A karakterek védettek, a módosítás egy EN_PROTECTED üzenet kiváltását okozza. |
Az yHeight mezőben a karakterek magasságát (méretét) adhatjuk meg twips mértékegységben (1/1440 inch vagy 1/20 nyomtató pont).
Az yOffset mezőben a karakterek függőleges eltolásának mértékét adhatjuk meg a bázisvonalhoz képest (szintén twips). Ha a szám pozitív, akkor felső-, ha negatív, akkor pedig alsó index lesz. A mellékelt példában is ezt fogjuk használni.
A crTextColor mezőben a szöveg színét adhatjuk meg.
A CharSet mezőben a karakterkészlet állítható be. Azt az értéket adhatjuk meg, amelyet a TFont osztály Charset property-jében is. A Rich Edit 3.0 felülbírálhatja ezt az értéket, ha a karakterek a megadott karakterkészlettel nem jeleníthetők meg.
A bPitchAndFamily mező a betűtípus és a font családját meghatározó biteket tárolja. 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 további bitek azt határozzák meg, hogy a betűtípus melyik családba tartozik. Ezeket az alábbi konstansokkal ellenőrizhetjük:
- FF_DECORATIVE
- FF_DONTCARE
- FF_MODERN
- FF_ROMAN
- FF_SCRIPT
- FF_SWISS
Az utolsó mező az szFaceName, ami a betűtípus nevét tartalmazza.
Ebben a struktúrában tehát megadhatjuk a karakterek tulajdonságait. Most nézzük, hogy hogyan tudjuk meg lekérdezni az aktuális beállításokat, illetve hogyan tudjuk azokat módosítani.
A lekérdezéshez az EM_GETCHARFORMAT üzenetet kell küldenünk a RichEdit-nek. Ez a következőképpen néz ki:
var
cf: TCharFormat;
...
cf.cbSize:=SizeOf(cf);
RichEdit1.Perform(EM_GETCHARFORMAT, SCF_SELECTION, longint(@cf));
Az üzenetet a Perform eljárással küldjük. Ennek első paramétere maga az üzenet. A második paraméterben meg kell adnunk, hogy az alapértelmezett (SCF_DEFAULT), vagy a kijelölt szövegrész formátumát akarjuk-e lekérdezni (SCF_SELECTION). A harmadik paraméterben meg kell adnunk egy TCharFormat típusú struktúrára mutató pointert.
A formátum megadása tulajdonképpen ugyanígy történik, csak ekkor az EM_SETCHARFORMAT üzenetet kell elküldenünk a RichEdit-nek.