www.pudn.com > yrsCapture.zip > preview.pas


{******************************************************************************} 
{*                                                                            *} 
{*            Adirondack Software & Graphics Print Preview Unit               *} 
{*         (C) Copyright Adirondack Software & Graphics 1996-1998             *} 
{*                                                                            *} 
{******************************************************************************} 
 
unit Preview; 
 
interface 
 
uses SysUtils, Windows, Messages, Classes, Graphics, Controls, Forms, Dialogs, 
  ExtCtrls, Buttons, Printers, StdCtrls, Menus; 
 
type 
  TPreviewForm = class( TForm ) 
    Panel1: TPanel; 
    ScaleMinusButton: TSpeedButton; 
    PrintButton: TSpeedButton; 
    CancelButton: TSpeedButton; 
    Label1: TLabel; 
    Label2: TLabel; 
    ScrollBox1: TScrollBox; 
    Image1: TImage; 
    SetupSpeedButton: TSpeedButton; 
    PrinterSetupDialog1: TPrinterSetupDialog; 
    ScalePlusButton: TSpeedButton; 
    procedure ScalePlusButtonClick( Sender: TObject ); 
    procedure ScaleMinusButtonClick( Sender: TObject ); 
    procedure CancelButtonClick( Sender: TObject ); 
    procedure PrintButtonClick( Sender: TObject ); 
    procedure FormActivate( Sender: TObject ); 
    procedure FormCreate(Sender: TObject); 
    procedure FormDestroy(Sender: TObject); 
    procedure SetupSpeedButtonClick(Sender: TObject); 
    procedure Image1Click(Sender: TObject); 
    procedure Image1MouseDown(Sender: TObject; Button: TMouseButton; 
      Shift: TShiftState; X, Y: Integer); 
  public 
    Scale: Integer; 
    Abort: Boolean; 
    Picture: TPicture; 
    procedure DrawPreview; 
    procedure SetPage; 
  end; 
 
var 
  PreviewForm: TPreviewForm; 
 
implementation 
 
Uses Main, Abort; 
 
{$R *.DFM} 
{$R Preview.Res} 
 
{==============================================================================} 
procedure TPreviewForm.SetPage; 
{==============================================================================} 
begin 
  // Set the image size to be proportional with the page size 
  Image1.Width := Printer.PageWidth div 5; 
  Image1.Height := Printer.PageHeight div 5; 
  // Output the scale to the toolbar 
  Label1.Caption := IntToStr ( Scale ); 
end; 
 
{==============================================================================} 
procedure TPreviewForm.ScalePlusButtonClick( Sender: TObject ); 
{==============================================================================} 
begin 
  // Increse the size of the bitmap 
  Scale := Scale * 2; 
  Label1.Caption := IntToStr ( Scale ); 
  DrawPreview; 
end; 
 
{==============================================================================} 
procedure TPreviewForm.DrawPreview; 
{==============================================================================} 
var 
  Rect: TRect; 
begin 
  // Compute the rectangle for the bitmap preview 
  Rect.Top := 10; 
  Rect.Left := 10; 
  Rect.Right := 10 + ( Picture.Graphic.Width * Scale ) div 5; 
  Rect.Bottom := 10 + ( Picture.Graphic.Height * Scale ) div 5; 
 
  // Remove the current image 
  Image1.Canvas.Pen.Mode := pmWhite; 
  Image1.Canvas.Rectangle ( 0, 0, Image1.Width, Image1.Height ); 
 
  // Stretch the bitmap into the rectangle 
  Image1.Canvas.StretchDraw ( Rect, Picture.Graphic ); 
end; 
 
{==============================================================================} 
procedure TPreviewForm.ScaleMinusButtonClick( Sender: TObject ); 
{==============================================================================} 
begin 
  // Decrease the size of the image 
  if Scale > 1 then 
  begin 
    Scale := Scale div 2; 
    Label1.Caption := IntToStr ( Scale ); 
    DrawPreview; 
  end; 
end; 
 
{==============================================================================} 
procedure TPreviewForm.CancelButtonClick( Sender: TObject ); 
{==============================================================================} 
begin 
  // Close ( hide ) the preview dialog 
  Close; 
end; 
 
{==============================================================================} 
procedure TPreviewForm.PrintButtonClick( Sender: TObject ); 
{==============================================================================} 
var 
  Rect: TRect; 
begin 
  // Compute the rectangle for the printer 
  Rect.Top := 10; 
  Rect.Left := 10; 
  Rect.Right := 10 + ( Picture.Graphic.Width * Scale ); 
  Rect.Bottom := 10 + ( Picture.Graphic.Height * Scale ); 
  AbortDlg.Show; 
  // Print the bitmap 
  Printer.BeginDoc; 
  Printer.Canvas.StretchDraw ( Rect, Picture.Graphic ); 
  Printer.EndDoc; 
  AbortDlg.Hide; 
end; 
 
{==============================================================================} 
procedure TPreviewForm.FormActivate( Sender: TObject ); 
{==============================================================================} 
const 
  crPreview = -20; 
begin 
  Screen.Cursors[crPreview] := LoadCursor( hInstance, pChar( 'PREVIEWCURSOR' ) ); 
  Cursor := crPreview; 
  Image1.Cursor := crPreview; 
  Abort := False; 
end; 
 
{==============================================================================} 
procedure TPreviewForm.FormCreate(Sender: TObject); 
{==============================================================================} 
var 
  aDC: HDC; 
const 
  crPreview = -20; 
begin 
  Screen.Cursors[crPreview] := LoadCursor( hInstance, pChar( 'PREVIEWCURSOR' ) ); 
  Cursor := crPreview; 
  Image1.Cursor := crPreview; 
  Picture := TPicture.Create; 
end; 
 
{==============================================================================} 
procedure TPreviewForm.FormDestroy(Sender: TObject); 
{==============================================================================} 
begin 
  Picture.Free; 
  Screen.Cursor := crDefault; 
end; 
 
{==============================================================================} 
procedure TPreviewForm.SetupSpeedButtonClick(Sender: TObject); 
{==============================================================================} 
begin 
   Screen.Cursor := crHourglass; 
   PrinterSetupDialog1.Execute; 
   Screen.Cursor := crDefault; 
end; 
 
procedure TPreviewForm.Image1Click(Sender: TObject); 
begin 
end; 
 
{==============================================================================} 
procedure TPreviewForm.Image1MouseDown(Sender: TObject; 
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer); 
{==============================================================================} 
begin 
  case Button of 
    mbLeft: ScalePlusButtonClick(Sender); 
    mbRight: ScaleMinusButtonClick(Sender); 
  end; 
end; 
 
end.