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');