Witam, znalazlem kodzik na torry.net ktory robi jakby zrzut zawartosci Richedita i tworzy z niego Canve.
Pytanie zasadnicze jak okreslic rozmiar plotna dla Richedita, kiedy dam za duze to mam biale tlo procz tego co jest w richedicie, natomiast kiedy za male to obcina mi obrazek.

Ponizej kodzik:

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;

I uzycie :

Ja zrobilem tak:

 var bmp:Tbitmap; i,s:integer;
 begin
 bmp := TBitmap.Create;
 bmp.Height := // jak pobrac wielkosc dokumentu (wysokosc) // probowalem z lines.count ale to jest glupi pomysl.
 bmp.Width := // to samo tylko z szerokoscia...
 RichEditToCanvas(RichEdit1, bmp.Canvas, Self.PixelsPerInch);
 bmp.SaveToFile('BMP.bmp');