How to render a TRichEdit text onto a canvas?

Previous  Top  Next

    
 

 

 

Code:

procedure RichEditToCanvas(RichEdit: TRichEdit; Canvas: TCanvas; PixelsPerInch: Integer);

var

ImageCanvas: TCanvas;

fmt: TFormatRange;

begin

ImageCanvas := Canvas;

with fmt do

begin

   hdc:= ImageCanvas.Handle;

   hdcTarget:= hdc;

   // rect needs to be specified in twips (1/1440 inch) as unit

   rc:=  Rect(0, 0,

               ImageCanvas.ClipRect.Right * 1440 div PixelsPerInch,

               ImageCanvas.ClipRect.Bottom * 1440 div PixelsPerInch

             );

   rcPage:= rc;

   chrg.cpMin := 0;

   chrg.cpMax := RichEdit.GetTextLen;

end;

SetBkMode(ImageCanvas.Handle, TRANSPARENT);

RichEdit.Perform(EM_FORMATRANGE, 1, Integer(@fmt));

// next call frees some cached data

RichEdit.Perform(EM_FORMATRANGE, 0, 0);

end;

 

procedure TForm1.Button1Click(Sender: TObject);

begin

  RichEditToCanvas(RichEdit1, Image1.Canvas, Self.PixelsPerInch);

  Image1.Refresh;

end;

 

 

©Drkb::00574

Взято с сайта http://www.swissdelphicenter.ch/en/tipsindex.php