Mivel a TPrinter objektumnál is egy TCanvas objektumban kell a nyomtatandó képet előállítanunk, így ez a megoldás nem csak a képernyőn történő megjelenítésre, hanem akár a szöveg nyomtatására is alkalmas.
A megoldáshoz egy új eljárást hozunk létre, amit egy külön unit-ban tárolunk el a könnyebb felhasználhatóság érdekében. Az eljárás a következőképpen néz ki:

RichEditToCanvas
Osztály:
procedure RichEditToCanvas(
ARichEdit: TRichEdit;
ACanvas: TCanvas;
ARect: TRect;
PixelsPerInch: integer
);
Ez az eljárás a paraméterként megadott RichEdit komponensben tárolt formázott szöveget átmásolja a szintén paraméterként megadott Canvas-ra.
Paraméterek
ARichEdit: TRichEdit
Ebben a paraméterben adhatjuk meg a szöveget tartalmazó RichEdit komponens objektumát.
ACanvas: TCanvas
Ebben a paraméterben kell megadni azt a Canvas objektumot, amire a szöveget rá kell rajzolni.
ARect: TRect
Ebben a TRect típusú paraméterben adhatjuk meg a Canvas azon területét, amelyen belül a szöveget meg szeretnénk jeleníteni. A szöveg a terület méretének megfelelően lesz tördelve attól függetlenül, hogy a RichEdit komponensben hogyan jelenik meg.
PixelsPerInch: integer
Ez a paraméter az egy inch-en belüli pontok számát adja meg (felbontás) az adott megjelenítési eszköznek megfelelően.
Most nézzük meg, hogy hogyan is működik a RichEditToCanvas eljárás. Először is létrehozunk egy olyan bitképet, amelynek mérete megegyezik az ARect paraméterben megadott terület méretével.
Szükség lesz egy TFormatRange típusú struktúrára is, amely a RichEdit unit-ban van deklarálva.
_formatrange = record
hdc: HDC;
hdcTarget: HDC;
rc: TRect;
rcPage: TRect;
chrg: TCharRange;
end;
TFormatRange = _formatrange;
A hdc mezőben a rendereléshez, a hdcTarget mezőben pedig a formázáshoz használt eszköz azonosítóját kell megadni. Ez a kettő általában megegyezik, annak a Canvas-nak a Handle azonosítóját adjuk meg, amelyen a szöveget meg szeretnénk jeleníteni.
Az rc mező TRect típusú, ebben adhatjuk meg twips mértékegységben (1/1440 inch vagy 1/20 nyomtató pont) a renderelt terület koordinátáit.
Az rcPage a rendereléshez használt terület. A koordinátákat szintén twips-ben kell megadni.
A chrg mezőben kell megadnunk a szövegnek azt a részét, amelyet meg szeretnénk jeleníteni. A chrg mező cpMin mezőjében az első, a cpMax mezőben pedig az utolsó karakter sorszámát kell megadni.
Ha feltöltöttük a struktúrát, akkor egy EM_FORMATRANGE üzenetet kell küldenünk a RichEdit-nek. Ezt a Perform függvénnyel tehetjük meg a legegyszerűbben:
ARichEdit.Perform(EM_FORMATRANGE, 1, integer(@fr));
Az első paraméter maga az üzenet. A második paraméter határozza meg, hogy a szöveg renderelésre kerül-e (<>0), vagy csak a méretek megállapítására használjuk (=0). Az utolsó paraméterben a struktúrára mutató pointert kell megadnunk.
Miután elküldtük az üzenetet, el kell küldenünk még egyszer, hogy a lefoglalt területeket (cache) felszabadítsuk. Ekkor a második és harmadik paraméterben adjunk meg 0-t.
ARichEdit.Perform(EM_FORMATRANGE, 0, 0);
Az üzenetek elküldése után a bitképünk Canvas-án megjelent a formázott szöveg, így most már csak át kell azt másolni a paraméterként megadott Canvas-ra az ARect paraméter által meghatározott pozícióba.