Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    text
    copied!<p>Here's what I use:</p> <pre><code>function PrintWrapper(ADrawProc : TDrawProc; APreview: Boolean; AWidth, AHeight : longint) : boolean; var bmp : Graphics.TBitmap; PixPerInchX, PixPerInchY : longint; begin bmp := Graphics.TBitmap.Create; try if APreview then begin PixPerInchX := GetDeviceCaps(bmp.Canvas.Handle, LOGPIXELSX); PixPerInchY := GetDeviceCaps(bmp.Canvas.Handle, LOGPIXELSY); bmp.Width := PixPerInchX * AWidth; bmp.Height := PixPerInchY * AHeight; bmp.Canvas.Brush.Color := clWhite; bmp.Canvas.FillRect(Rect(0,0,bmp.Width,bmp.Height)); ADrawProc(bmp.Canvas,AWidth,AHeight); result := (not APreview) or TFormImagePrintPreview.PrintNow(bmp); if not result then exit; end; Printer.Orientation := poLandscape; Printer.BeginDoc; try ADrawProc(Printer.Canvas,AValues,AWidth,AHeight); finally Printer.EndDoc; end; result := true; finally FreeAndNil(bmp); end; end; </code></pre> <p>Where DrawProc is:</p> <pre><code>type TDrawProc = procedure(ACanvas : TCanvas; Width, Height : longint); </code></pre> <p>And the image preview is:</p> <pre><code>unit formImagePreviewDef; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls; type TformImagePrintPreview = class(TForm) pnBottom: TPanel; btPrint: TButton; btCancel: TButton; imgMain: TImage; lbNotes: TLabel; procedure btPrintClick(Sender: TObject); procedure btCancelClick(Sender: TObject); public procedure Init(AGraphic : TGraphic; ANotes : string = ''); class function PrintNow(AGraphic : TGraphic; ANotes : string = '') : boolean; end; implementation {$R *.dfm} { TformImagePrintPreview } procedure TformImagePrintPreview.btCancelClick(Sender: TObject); begin Close; ModalResult := mrCancel; end; procedure TformImagePrintPreview.btPrintClick(Sender: TObject); begin Close; ModalResult := mrOk; end; procedure TformImagePrintPreview.Init(AGraphic: TGraphic; ANotes : string = ''); const MAXSIZE = 600; begin lbNotes.caption := ANotes; imgMain.Picture.Assign(AGraphic); if AGraphic.Height &gt; AGraphic.Width then begin ClientWidth := trunc(MAXSIZE * AGraphic.Width / AGraphic.Height); ClientHeight := MAXSIZE + pnBottom.Height; end else begin Width := MAXSIZE; Height := trunc(MAXSIZE * AGraphic.Height/ AGraphic.Width)+pnBottom.Height; end; end; class function TformImagePrintPreview.PrintNow(AGraphic: TGraphic; ANotes : string = ''): boolean; var form : TformImagePrintPreview; begin form := TformImagePrintPreview.Create(nil); try form.Init(AGraphic,ANotes); result := form.ShowModal = mrOk; finally FreeAndNil(form); end; end; end. </code></pre>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload