procedure TBasicStats.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); var Bitmap : TBitmap; FromLeft : INTEGER; FromTop : INTEGER; PrintedWidth : INTEGER; PrintedHeight: INTEGER; begin if Key = VK_F5 then begin Printer.BeginDoc; TRY Bitmap := TBitmap.Create; TRY Bitmap.Width := Panel1.Width; Bitmap.Height := Panel1.Height; Bitmap.PixelFormat := pf24bit; // avoid palettes // Copy the Panel area from the Form into a separate Bitmap Bitmap.Canvas.CopyRect(Rect(0,0, Bitmap.Width,Bitmap.Height), BasicStats.Canvas, Rect(Panel1.Left, Panel1.Top, Panel1.Left + Panel1.Width-1, Panel1.Top + Panel1.Height-1) ); // Assumes 10% left, right and top margin // Assumes bitmap aspect ratio > ~0.75 for portrait mode PrintedWidth := MulDiv(Printer.PageWidth, 80,100); // 80% PrintedHeight := MulDiv(PrintedWidth, Bitmap.Height, Bitmap.Width); FromLeft := MulDiv(Printer.PageWidth, 10,100); // 10% FromTop := MulDiv(Printer.PageHeight,10,100); // 10% PrintBitmap(Printer.Canvas, Rect(FromLeft, FromTop, FromLeft + PrintedWidth, FromTop + PrintedHeight), Bitmap); FINALLY Bitmap.Free END; FINALLY Printer.EndDoc END end; end; end.