BmpPreview.pas
上传用户:fh681027
上传日期:2022-07-23
资源大小:1959k
文件大小:3k
源码类别:

Delphi控件源码

开发平台:

Delphi

  1. unit BmpPreview;
  2. interface
  3. uses
  4.   SysUtils, Windows, Messages, Classes,
  5.   Graphics, Controls, Forms, Dialogs, ExtCtrls,
  6.   Buttons, Printers, StdCtrls;
  7. type
  8.   TPreviewForm = class(TForm)
  9.     Panel1: TPanel;
  10.     ScalePlusButton: TSpeedButton;
  11.     ScaleMinusButton: TSpeedButton;
  12.     PrintButton: TSpeedButton;
  13.     ScrollBox1: TScrollBox;
  14.     Image1: TImage;
  15.     CancelButton: TSpeedButton;
  16.     Label1: TLabel;
  17.     procedure ScalePlusButtonClick(Sender: TObject);
  18.     procedure ScaleMinusButtonClick(Sender: TObject);
  19.     procedure CancelButtonClick(Sender: TObject);
  20.     procedure PrintButtonClick(Sender: TObject);
  21.   public
  22.     Scale: Integer;
  23.     procedure DrawPreview;
  24.     procedure SetPage;
  25.   end;
  26. var
  27.   PreviewForm: TPreviewForm;
  28. implementation
  29. {$R *.DFM}
  30. uses
  31.   BmpViewForm;
  32. procedure TPreviewForm.SetPage;
  33. begin
  34.   {set the image size to be proportional with the page size}
  35.   Image1.Width := Printer.PageWidth div 5;
  36.   Image1.Height := Printer.PageHeight div 5;
  37.   {output the scale to the toolbar}
  38.   Label1.Caption := IntToStr (Scale);
  39. end;
  40. procedure TPreviewForm.ScalePlusButtonClick(Sender: TObject);
  41. begin
  42.   {increse the size of the bitmap}
  43.   Scale := Scale * 2;
  44.   Label1.Caption := IntToStr (Scale);
  45.   DrawPreview;
  46. end;
  47. procedure TPreviewForm.DrawPreview;
  48. var
  49.   Rect: TRect;
  50. begin
  51.   {compute the rectangle for the bitmap preview}
  52.   Rect.Top := 10;
  53.   Rect.Left := 10;
  54.   Rect.Right := 10 +
  55.     (FormBmpViewer.Image1.Picture.Graphic.Width * Scale) div 5;
  56.   Rect.Bottom := 10 +
  57.     (FormBmpViewer.Image1.Picture.Graphic.Height * Scale) div 5;
  58.   {remove the current image}
  59.   Image1.Canvas.Pen.Mode := pmWhite;
  60.   Image1.Canvas.Rectangle (0, 0, Image1.Width, Image1.Height);
  61.   {stretch the bitmap into the rectangle}
  62.   Image1.Canvas.StretchDraw (Rect,
  63.     FormBmpViewer.Image1.Picture.Graphic);
  64. end;
  65. procedure TPreviewForm.ScaleMinusButtonClick(Sender: TObject);
  66. begin
  67.   {decrease the size of the image}
  68.   if Scale > 1 then
  69.   begin
  70.     Scale := Scale div 2;
  71.     Label1.Caption := IntToStr (Scale);
  72.     DrawPreview;
  73.   end;
  74. end;
  75. procedure TPreviewForm.CancelButtonClick(Sender: TObject);
  76. begin
  77.   {close (hide) the preview dialog}
  78.   Close;
  79. end;
  80. procedure TPreviewForm.PrintButtonClick(Sender: TObject);
  81. var
  82.   Rect: TRect;
  83. begin
  84.   {compute the rectangle for the printer}
  85.   Rect.Top := 10;
  86.   Rect.Left := 10;
  87.   Rect.Right := 10 +
  88.     (FormBmpViewer.Image1.Picture.Graphic.Width * Scale);
  89.   Rect.Bottom := 10 +
  90.     (FormBmpViewer.Image1.Picture.Graphic.Height * Scale);
  91.   {print the bitmap}
  92.   Printer.BeginDoc;
  93.   Printer.Canvas.StretchDraw (Rect,
  94.     FormBmpViewer.Image1.Picture.Graphic);
  95.   Printer.EndDoc;
  96. end;
  97. end.