Hozzunk létre egy olyan típust, melyben meghatározhatjuk hogy felsőindex, alsóindex, vagy normál nézetet kívánjuk-e majd használni.
type
TCharacterFormat = (CF_SUPERSCRIPT, CF_SUBSCRIPT, CF_NORMAL);
Ezt követően jelöljünk ki egy szövegrészt a TRichEdit-ben, majd hívjuk meg a SetCharFormat eljárásunkat, paraméterként átadva a TRichEdit komponenst, melyben a beállítást szeretnénk elvégezni, illetve a beállítandó formát.
procedure TForm1.Button1Click(Sender: TObject);
begin
SetCharFormat(RichEdit1, CF_SUPERSCRIPT);
end;
Most már csak azt kell megvizsgálnunk, hogy mi is történik a SetCharFormat eljárásban. A TRichEdit komponensnek egy EM_SETCHARFORMAT üzenetet kell küldenünk, melyben megadunk egy TCharFormat struktúrát. Ebben írjuk le, hogy mit kell tennie a komponensnek. A dwMask mezőben a CFM_OFFSET értéket adjuk meg. Ez tudatja a komponenssel, hogy az yOffset mezőben lévő érték alapján függőleges irányban el kell tolnia az aktuálisan kijelölt szöveget. Most a választott műveletnek megfelelően meghatározzuk ezt az értéket és tároljuk az yOffset-ben.
procedure SetCharFormat(RichEdit: TRichEdit; CharacterFormat: TCharacterFormat);
var
f: TCharFormat;
begin
FillChar(f, SizeOf(TCharFormat), 0);
with f do begin
cbSize:=SizeOf(TCharFormat);
dwMask:=CFM_OFFSET;
case CharacterFormat of
CF_SUPERSCRIPT: yOffset:=80;
CF_SUBSCRIPT: yOffset:=-80;
CF_NORMAL: yOffset:=0;
end;
end;
Végül már csak egy üzenet küldése van hátra, mely elvégzi a szükséges beállítást.
RichEdit.Perform(EM_SETCHARFORMAT, SCF_SELECTION, Longint(@f));
end;