home *** CD-ROM | disk | FTP | other *** search
/ Chip 1999 March / Chip_1999-03_cd.bin / zkuste / delphi / D12 / ALREP.ZIP / alprev.pas < prev    next >
Pascal/Delphi Source File  |  1998-08-13  |  5KB  |  202 lines

  1. unit alprev;
  2.  
  3. interface
  4.  
  5. uses
  6.   Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  7.   ExtCtrls, AlRep;
  8.  
  9. type
  10.   tAlPreview = class(TScrollBox)     // tScrollingWinControl ???
  11.   private
  12.     { Private-Deklarationen }
  13.     fPage   : integer;
  14.     fZoom   : integer;
  15.     pbxPage : tPaintbox;
  16.     FTitle  : string;
  17.     fBusy   : boolean;
  18.     procedure SetPageNumber(value:integer);
  19.     function  GetPageCount:integer;
  20.     procedure SetZoom (value:integer);
  21.     procedure UpdatePage(Sender:tObject);
  22.   protected
  23.     { Protected-Deklarationen }
  24.   public
  25.     FPages  : tPages;
  26.     { Public-Deklarationen }
  27.     constructor Create (aOwner:tComponent); override;
  28.     destructor Destroy; override;
  29.     procedure  FirstPage;
  30.     procedure  LastPage;
  31.     procedure  NextPage;
  32.     procedure  PrevPage;
  33.     procedure  Print (pfrom,pto:integer);
  34.     property PageNumber:integer read fPage write SetPageNumber;
  35.     property Zoom:integer read fZoom write SetZoom default 100;
  36.     property PageCount:integer read GetPageCount;
  37.     property Busy:boolean read FBusy;
  38. //    property Pages:tPages read FPages write FPages;
  39.   published
  40.     { Published-Deklarationen }
  41.     property Title:string read FTitle write FTitle;
  42.   end;
  43.  
  44. procedure Register;
  45.  
  46. implementation
  47. uses
  48.   Printers;
  49.  
  50. constructor tAlPreview.Create(aOwner:tComponent);
  51. begin
  52.   inherited Create (aOwner);
  53.  
  54.   fPage  := 1;
  55.   fZoom := 100;
  56.   fBusy := false;
  57.   if NOT (csDesigning in ComponentState) then
  58.    begin
  59.      pbxPage := tPaintBox.Create(Self);
  60.      pbxPage.Parent := Self;
  61.  
  62.      pbxPage.Left        := 15;
  63.      pbxPage.Top         := 15;
  64.      pbxPage.Width       := 823;   // Din A4 screen width
  65.      pbxPage.Height      := 1164; // Din A4 screen height
  66.      pbxPage.ParentColor := false;
  67.      pbxPage.Color       := clWindow;
  68.  
  69.      FPages := tPages.Create;
  70.      pbxPage.OnPaint := UpdatePage;
  71.    end;
  72. end;
  73.  
  74. destructor tAlPreview.Destroy;
  75. begin
  76.   if not (csDesigning in ComponentState) then
  77.    begin
  78.      fPages.Clear;
  79.      fPages.Free;
  80.      pbxPage.Free;
  81.    end;
  82.   inherited destroy;
  83. end;
  84.  
  85. procedure tAlPreview.UpdatePage(Sender:tObject);
  86. begin
  87.   pbxPage.Width := Round(AlPrinter.PageWidth*fZoom/100.0);
  88.   pbxPage.Height := Round(AlPrinter.PageHeight*fZoom/100.0);
  89.   VertScrollBar.Range := pbxPage.Height+30;
  90.   HorzScrollBar.Range := pbxPage.Width+30;
  91.   pbxPage.Canvas.Brush.Color := clWindow;
  92.   pbxPage.Canvas.FillRect (pbxPage.ClientRect);
  93.   if (fPage>0) and (fPage<=PageCount) then
  94.      pbxPage.Canvas.StretchDraw(pbxPage.ClientRect,FPages[fPage-1]);
  95. end;
  96.  
  97. procedure tAlPreview.SetPageNumber(value:integer);
  98. begin
  99.   if (value>0) and (value<=AlPrinter.PageCount) then
  100.    begin
  101.      fPage := value;
  102.      UpdatePage (Self);
  103.    end;
  104. end;
  105.  
  106. function tAlPreview.GetPageCount:integer;
  107. begin
  108.   result := FPages.Count;
  109. end;
  110.  
  111. procedure tAlPreview.SetZoom(value:integer);
  112. begin
  113.   if value<>fZoom then
  114.    if (value>=25) and (value<=200) then
  115.     begin
  116.       fZoom := value;
  117.       UpdatePage (Self);
  118.     end;
  119. end;
  120.  
  121. procedure tAlPreview.FirstPage;
  122. begin
  123.   SetPageNumber (1);
  124. end;
  125.  
  126. procedure tAlPreview.LastPage;
  127. begin
  128.   if {AlPrinter.}PageCount>0 then
  129.      SetPageNumber ({AlPrinter.}PageCount);
  130. end;
  131.  
  132. procedure tAlPreview.NextPage;
  133. begin
  134.   if fPage<{AlPrinter.}PageCount then
  135.    begin
  136.      inc (fPage);
  137.      UpdatePage (Self);
  138.    end;
  139. end;
  140.  
  141. procedure tAlPreview.PrevPage;
  142. begin
  143.   if fPage>1 then
  144.    begin
  145.      dec(fPage);
  146.      UpdatePage (Self);
  147.    end;
  148. end;
  149.  
  150. procedure tAlPreview.Print (pFrom,pTo:integer);
  151. var
  152.    i : Integer;
  153.    s : String;
  154. begin
  155.   FBusy := true;
  156.   if PageCount > 0 then
  157.    begin
  158.      Printer.Title := Title;
  159.      if not Printer.Printing then
  160.         Printer.BeginDoc;
  161.      i := pFrom;
  162. //     if Assigned(Print_Preview) then
  163. //        s := Print_Preview.Panel2.Caption;
  164.      try
  165. //       if Assigned(Print_Preview) then
  166. //        begin
  167. //          Print_Preview.Panel2.Caption :=
  168. //             Format('Printing page %d of %d',[1, PageCount]);
  169. //          Print_Preview.Panel2.repaint;
  170. //        end;
  171.        Printer.Canvas.StretchDraw( Rect(0,0,Printer.PageWidth,
  172.                                             Printer.PageHeight),
  173.                                    FPages[i-1]);
  174.        for i := pFrom+1 to pTo do
  175.         begin
  176. //          if Assigned(Print_Preview) then
  177. //           begin
  178. //             Print_Preview.Panel2.Caption :=
  179. //                Format('Printing page %d of %d',[i, PageCount]);
  180. //             Print_Preview.Panel2.repaint;
  181. //           end;
  182.           Printer.NewPage;
  183.           Printer.Canvas.StretchDraw( Rect(0,0,Printer.PageWidth,
  184.                                                Printer.PageHeight),
  185.                                       FPages[i-1]);
  186.         end;
  187.      finally
  188.         Printer.EndDoc;
  189. //     if Assigned(Print_Preview) then
  190. //        Print_Preview.Panel2.Caption := s;
  191.      end; // try ... finally
  192.    end; // if PageCount>0
  193.   FBusy := false;
  194. end; // procedure tAlPreview.Print
  195.  
  196. procedure Register;
  197. begin
  198.   RegisterComponents('AlRep', [tAlPreview]);
  199. end;
  200.  
  201. end.
  202.