All pastes #375462 Raw Edit

Miscellany

public text v1 · immutable
#375462 ·published 2007-02-28 10:18 UTC
rendered paste body
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.