home *** CD-ROM | disk | FTP | other *** search
/ CD Shareware Magazine 1996 December / CD_shareware_12-96.iso / WIN / Programa / RP_SHELL.ZIP / DEMOFORM.PAS < prev    next >
Encoding:
Pascal/Delphi Source File  |  1996-06-10  |  13.6 KB  |  435 lines

  1. unit Demoform;
  2.  
  3. interface
  4.  
  5. uses WinTypes, WinProcs, Classes, Graphics, Forms, Controls, Buttons,
  6.   StdCtrls, ExtCtrls, SysUtils, Messages, 
  7.   RPFiler, RPBase, RPForm, Preview, Rp_Shel1;
  8. type
  9.   TBtnBottomDlg1 = class(TForm)
  10.     OKBtn: TBitBtn;
  11.     Bevel1: TBevel;
  12.     btDetail: TButton;
  13.     btMDetail: TButton;
  14.     btMMDetail: TButton;
  15.     RPMaster11: TRPMaster1;
  16.     RPMaster12: TRPMaster1;
  17.     RPDetail11: TRPDetail1;
  18.     RPDetail12: TRPDetail1;
  19.     RPDetail13: TRPDetail1;
  20.     cbDetRGH: TCheckBox;
  21.     cbDetNPOG: TCheckBox;
  22.     cbDetNPOI: TCheckBox;
  23.     cbMas01RH: TCheckBox;
  24.     cbMas01NPOI: TCheckBox;
  25.     cbMas02RH: TCheckBox;
  26.     cbMas02NPOI: TCheckBox;
  27.     cbMas01RGH: TCheckBox;
  28.     cbMas01NPOG: TCheckBox;
  29.     cbMas02RGH: TCheckBox;
  30.     cbMas02NPOG: TCheckBox;
  31.     BaseReport: TReportFiler;
  32.     procedure RPMaster11ValidateItem(Sender: TRPShellBase1; First: Boolean;
  33.       var Valid: Boolean);
  34.     procedure RPMaster11FooterPrint(Sender: TRPShellBase1; BaseReport: TBaseReport);
  35.     procedure RPMaster12FooterPrint(Sender: TRPShellBase1; BaseReport: TBaseReport);
  36.     procedure RPMaster12ValidateItem(Sender: TRPShellBase1; First: Boolean;
  37.       var Valid: Boolean);
  38.     procedure RPDetailPrint(Sender: TRPShellBase1; BaseReport: TBaseReport);
  39.     procedure ButtonClick(Sender: TObject);
  40.     procedure BaseReportPrint(Sender: TObject);
  41.     procedure RPMaster12ValidateChild(Sender: TRPShellBase1; First: Boolean;
  42.       var Valid: Boolean);
  43.     procedure RPDetailValidateItem(Sender: TRPShellBase1; First: Boolean;
  44.       var Valid: Boolean);
  45.     procedure RPDetailGroupFooterPrint(Sender: TRPShellBase1;
  46.       BaseReport: TBaseReport);
  47.     procedure RPDetailGroupHeader(Sender: TRPShellBase1; First: Boolean;
  48.       var Group: Boolean);
  49.     procedure cbDetNPOIClick(Sender: TObject);
  50.     procedure RPDetailSet(Sender: TRPShellBase1;
  51.       BaseReport: TBaseReport);
  52.     procedure RPMaster11FooterSet(Sender: TRPShellBase1;
  53.       BaseReport: TBaseReport);
  54.     procedure RPMaster12FooterSet(Sender: TRPShellBase1;
  55.       BaseReport: TBaseReport);
  56.     procedure RPGroupFooterSet(Sender: TRPShellBase1;
  57.       BaseReport: TBaseReport);
  58.     procedure BaseReportPrintHeader(Sender: TObject);
  59.     procedure RPDetail11GroupHeaderPrint(Sender: TRPShellBase1;
  60.       BaseReport: TBaseReport);
  61.     procedure RPDetail11GroupHeaderSet(Sender: TRPShellBase1;
  62.       BaseReport: TBaseReport);
  63.     procedure RPMaster11HeaderSet(Sender: TRPShellBase1;
  64.       BaseReport: TBaseReport);
  65.     procedure RPMaster11HeaderPrint(Sender: TRPShellBase1;
  66.       BaseReport: TBaseReport);
  67.     procedure RPMaster12HeaderSet(Sender: TRPShellBase1;
  68.       BaseReport: TBaseReport);
  69.     procedure RPMaster12HeaderPrint(Sender: TRPShellBase1;
  70.       BaseReport: TBaseReport);
  71.     procedure RPMaster11BeforeFirstItem(Sender: TRPShellBase1;
  72.       BaseReport: TBaseReport);
  73.     procedure RPMaster11AfterPageBreak(Sender: TRPShellBase1;
  74.       BaseReport: TBaseReport; Aborted: Boolean);
  75.   private
  76.   { Private declarations }
  77.     RptType: integer;
  78.     CurrentDetail,
  79.     CurrentMaster,
  80.     CurrentMaster2: integer;
  81.     MaxDetail,
  82.     MaxMaster,
  83.     MaxMaster2: integer;
  84.   public
  85.     { Public declarations }
  86.   end;
  87.  
  88. var
  89.   BtnBottomDlg1: TBtnBottomDlg1;
  90.  
  91. implementation
  92.  
  93. {$R *.DFM}
  94.  
  95. procedure TBtnBottomDlg1.cbDetNPOIClick(Sender: TObject);
  96. begin
  97.   btMMDetail.Enabled := not ((cbDetNPOG.Checked) or (cbDetNPOI.Checked));
  98. end;
  99.  
  100. procedure TBtnBottomDlg1.ButtonClick(Sender: TObject);
  101. var
  102.   ReportStream: TMemoryStream;
  103. begin
  104.  
  105. { Connect the Shell Components for the selected report }
  106.   if Sender = btDetail then begin
  107.     RptType := 1;
  108.   end else if Sender = btMDetail then begin
  109.     RptType := 2;
  110.     RPMaster11.RPDetailChild  := RPDetail11;
  111.   end else begin
  112.     RptType := 3;
  113.     RPMaster12.RPMasterParent := RPMaster11;
  114.     RPMaster12.RPDetailChild  := RPDetail11;
  115.   end; { if }
  116.  
  117. { Initialize the random number generator }
  118.   Randomize;
  119.  
  120. { Set object properties according to user's selections }
  121.   RPDetail11.ReprintGroupHeader := cbDetRGH.Checked;
  122.   RPDetail12.ReprintGroupHeader := cbDetRGH.Checked;
  123.   RPDetail13.ReprintGroupHeader := cbDetRGH.Checked;
  124.   RPDetail11.NewPageOnItem := cbDetNPOI.Checked;
  125.   RPDetail12.NewPageOnItem := cbDetNPOI.Checked;
  126.   RPDetail13.NewPageOnItem := cbDetNPOI.Checked;
  127.   RPDetail11.NewPageOnGroup := cbDetNPOG.Checked;
  128.   RPDetail12.NewPageOnGroup := cbDetNPOG.Checked;
  129.   RPDetail13.NewPageOnGroup := cbDetNPOG.Checked;
  130.   RPMaster11.ReprintGroupHeader := cbMas01RGH.Checked;
  131.   RPMaster11.NewPageOnGroup     := cbMas01NPOG.Checked;
  132.   RPMaster12.ReprintGroupHeader := cbMas02RGH.Checked;
  133.   RPMaster12.NewPageOnGroup     := cbMas02NPOG.Checked;
  134.   RPMaster11.ReprintHeader := cbMas01RH.Checked;
  135.   RPMaster11.NewPageOnItem := cbMas01NPOI.Checked;
  136.   RPMaster12.ReprintHeader := cbMas02RH.Checked;
  137.   RPMaster12.NewPageOnItem := cbMas02NPOI.Checked;
  138.  
  139.   { Create the report instance }
  140.   ReportStream := TMemoryStream.Create;
  141.   Application.CreateForm(TReportForm, ReportForm);
  142.   try
  143.     with ReportForm do begin
  144.       BaseReport.FileName := 'RPT.TMP';
  145.       RptBase := BaseReport;
  146.       Caption := RptBase.Title;
  147.       Show;
  148.       end; { with }
  149.  
  150.     with BaseReport do begin
  151.       Stream := ReportStream;
  152.       Execute;
  153.       if not Aborted then begin
  154.         Application.CreateForm(TPreviewForm, PreviewForm);
  155.         try
  156.           with PreviewForm do begin
  157.             FilePrInter1.FileName   := FileName;
  158.             FilePrInter1.StreamMode := StreamMode;
  159.             FilePrInter1.Title      := Title;
  160.             FilePrInter1.Stream     := ReportStream;
  161.             FilePrEview1.FileName   := FileName;
  162.             FilePrEview1.StreamMode := StreamMode;
  163.             FilePrEview1.Title      := Title;
  164.             FilePrEview1.Stream     := ReportStream;
  165.             WindowState             := wsMaximized;
  166.             ShowModal;
  167.             end; { with }
  168.         finally
  169.           PreviewForm.Free;
  170.           end; { try }
  171.         end; { if }
  172.       end; { with }
  173.   finally
  174.     ReportStream.Free;
  175.     ReportForm.Free;
  176.     end;
  177. end;
  178.  
  179. procedure TBtnBottomDlg1.BaseReportPrint(Sender: TObject);
  180. begin
  181. { Execute the correct Shell component for the report's body }
  182.   case RptType of
  183.     1:   RPDetail11.Execute(Sender as TBaseReport);
  184.     2,3: RPMaster11.Execute(Sender as TBaseReport);
  185.   end; { case }
  186. end;
  187.  
  188. procedure TBtnBottomDlg1.BaseReportPrintHeader(Sender: TObject);
  189. begin
  190.   with Sender as TBaseReport do begin
  191.   { Enclose report body section with a border }
  192.     MarginTop    := 1.00;
  193.     MarginBottom := 1.00;
  194.     MarginLeft   := 1.00;
  195.     MarginRight  := 1.00;
  196.   { Draw border for report body section }
  197.     MoveTo( SectionLeft,   SectionTop    );
  198.     LineTo( SectionRight,  SectionTop    );
  199.     LineTo( SectionRight,  SectionBottom );
  200.     LineTo( SectionLeft,   SectionBottom );
  201.     LineTo( SectionLeft,   SectionTop    );
  202.   end; { with }
  203. end;
  204.  
  205. {-----------------------------  Master01  -------------------------------------}
  206.  
  207. procedure TBtnBottomDlg1.RPMaster11ValidateItem(Sender: TRPShellBase1; First: Boolean;
  208.   var Valid: Boolean);
  209. begin
  210.   if First then begin
  211.     CurrentMaster := 1;
  212.     MaxMaster     := 5 + Integer(Random( 5));
  213.   end else begin
  214.     CurrentMaster := CurrentMaster + 1;
  215.   end; { if }
  216.   Valid := CurrentMaster <= MaxMaster;
  217. end;
  218.  
  219. procedure TBtnBottomDlg1.RPMaster11BeforeFirstItem(Sender: TRPShellBase1;
  220.   BaseReport: TBaseReport);
  221. begin
  222.   (Sender as TRPMaster1).PrintHeader;
  223. end;
  224.  
  225. procedure TBtnBottomDlg1.RPMaster11AfterPageBreak(Sender: TRPShellBase1;
  226.   BaseReport: TBaseReport; Aborted: Boolean);
  227. begin
  228.   (Sender as TRPMaster1).PrintHeader;
  229. end;
  230.  
  231. procedure TBtnBottomDlg1.RPMaster11HeaderSet(Sender: TRPShellBase1;
  232.   BaseReport: TBaseReport);
  233. begin
  234.   with BaseReport do begin
  235.     ClearTabs;
  236.     if Sender.UserReprint then begin
  237.       SetFont( 'Times New Roman', 20 );
  238.       SetTab( SectionLeft, pjLeft, SectionRight -
  239.                                    SectionLeft, 5, BOXLINEALL, 60);
  240.       (Sender as TRPMaster1).HeaderLines := 1;
  241.     end else begin
  242.       SetFont( 'Times New Roman', 16 );
  243.       SetTab( 1.0, pjLeft, 4.0, 5, BOXLINENONE, 40);
  244.       (Sender as TRPMaster1).HeaderLines := 3;
  245.     end; { if }
  246.   end; { with }
  247. end;
  248.  
  249. procedure TBtnBottomDlg1.RPMaster11HeaderPrint(Sender: TRPShellBase1;
  250.   BaseReport: TBaseReport);
  251. begin
  252.   with BaseReport do begin
  253.     if Sender.UserReprint then begin
  254.       Print( #9'Page ' + IntToStr(CurrentPage) + ' Header ' + '  ( User )');
  255.     end else begin
  256.       Print( #9);
  257.       CRLF;
  258.       if Sender.SysReprint then begin
  259.         Print( #9'RPMaster01 Header ' + IntToStr(CurrentMaster) + '  ( Reprint )');
  260.       end else begin
  261.         Print( #9'RPMaster01 Header ' + IntToStr(CurrentMaster) + '  ( Normal )');
  262.       end; { if }
  263.       CRLF;
  264.       Print( #9);
  265.     end; { if UserReprint }
  266.   end; { with BaseReport }
  267. end;
  268.  
  269. procedure TBtnBottomDlg1.RPMaster11FooterSet(Sender: TRPShellBase1;
  270.   BaseReport: TBaseReport);
  271. begin
  272.   with BaseReport do begin
  273.     SetFont( 'Times New Roman', 16 );
  274.     ClearTabs;
  275.     SetTab( 1.0, pjLeft, 4.0, 5, BOXLINENONE, 40);
  276.   end; { with }
  277. end;
  278.  
  279. procedure TBtnBottomDlg1.RPMaster11FooterPrint(Sender: TRPShellBase1;
  280.   BaseReport: TBaseReport);
  281. begin
  282.   BaseReport.PrintLn( #9);
  283.   BaseReport.PrintLn( #9'RPMaster01 Footer ' + IntToStr(CurrentMaster));
  284.   BaseReport.Print( #9);
  285. end;
  286.  
  287. {-----------------------------  Master02  -------------------------------------}
  288.  
  289. procedure TBtnBottomDlg1.RPMaster12ValidateItem(Sender: TRPShellBase1; First: Boolean;
  290.   var Valid: Boolean);
  291. begin
  292.   if First then begin
  293.     CurrentMaster2 := 1;
  294.     MaxMaster2     := 6 + Integer(Random(10));
  295.   end else begin
  296.     CurrentMaster2 := CurrentMaster2 + 1;
  297.   end; { if }
  298.   Valid := CurrentMaster2 <= MaxMaster2;
  299. end;
  300.  
  301. procedure TBtnBottomDlg1.RPMaster12ValidateChild(Sender: TRPShellBase1;
  302.   First: Boolean; var Valid: Boolean);
  303. begin
  304.   Valid := true;
  305.   with Sender as TRPMaster1 do begin
  306.     if First then begin
  307.       RPDetailChild := RPDetail11;
  308.     end else if RPDetailChild = RPDetail11 then begin
  309.       RPDetailChild := RPDetail12;
  310.     end else if RPDetailChild = RPDetail12 then begin
  311.       RPDetailChild := RPDetail13;
  312.     end else begin
  313.       Valid := false;
  314.     end; { if }
  315.   end; { with }
  316. end;
  317.  
  318. procedure TBtnBottomDlg1.RPMaster12HeaderSet(Sender: TRPShellBase1;
  319.   BaseReport: TBaseReport);
  320. begin
  321.   with BaseReport do begin
  322.     SetFont( 'Times New Roman', 14 );
  323.     ClearTabs;
  324.     SetTab( 2.0, pjLeft, 4.0, 5, BOXLINENONE, 30);
  325.   end; { with }
  326. end;
  327.  
  328. procedure TBtnBottomDlg1.RPMaster12HeaderPrint(Sender: TRPShellBase1;
  329.   BaseReport: TBaseReport);
  330. begin
  331.   with BaseReport do begin
  332.     if Sender.SysReprint then begin
  333.       Print( #9'RPMaster02 Header ' + IntToStr(CurrentMaster2) + '  ( Reprint )');
  334.     end else begin
  335.       Print( #9'RPMaster02 Header ' + IntToStr(CurrentMaster2) + '  ( Normal )');
  336.     end; { if }
  337.   end; { with }
  338. end;
  339.  
  340. procedure TBtnBottomDlg1.RPMaster12FooterSet(Sender: TRPShellBase1;
  341.   BaseReport: TBaseReport);
  342. begin
  343.   with BaseReport do begin
  344.     SetFont( 'Times New Roman', 14 );
  345.     ClearTabs;
  346.     SetTab( 2.0, pjLeft, 4.0, 5, BOXLINENONE, 30);
  347.   end; { with }
  348. end;
  349.  
  350. procedure TBtnBottomDlg1.RPMaster12FooterPrint(Sender: TRPShellBase1;
  351.   BaseReport: TBaseReport);
  352. begin
  353.   BaseReport.Print( #9'RPMaster02 Footer ' + IntToStr(CurrentMaster2));
  354. end;
  355.  
  356. {-----------------------------  Detail01  -------------------------------------}
  357.  
  358. procedure TBtnBottomDlg1.RPDetailValidateItem(Sender: TRPShellBase1;
  359.   First: Boolean; var Valid: Boolean);
  360. begin
  361.   if First then begin
  362.     CurrentDetail := 1;
  363.     MaxDetail     := 5 + Integer(Random(15));
  364.   end else begin
  365.     CurrentDetail := CurrentDetail + 1;
  366.   end; { if }
  367.   Valid := CurrentDetail <= MaxDetail;
  368. end;
  369.  
  370. procedure TBtnBottomDlg1.RPDetailSet(Sender: TRPShellBase1;
  371.   BaseReport: TBaseReport);
  372. begin
  373.   with BaseReport do begin
  374.     SetFont( 'Times New Roman', 10 );
  375.     ClearTabs;
  376.     SetTab( 3.0, pjLeft, 4.0, 5, BOXLINEALL, Sender.Tag * 5);
  377.   end; { with }
  378. end;
  379.  
  380. procedure TBtnBottomDlg1.RPDetailPrint(Sender: TRPShellBase1;
  381.   BaseReport: TBaseReport);
  382. begin
  383.   BaseReport.Print( #9'Detail' + IntToStr(Sender.Tag) + '  ' + IntToStr(CurrentDetail));
  384. end;
  385.  
  386. { Group Stuff }
  387.  
  388. procedure TBtnBottomDlg1.RPDetail11GroupHeaderSet(Sender: TRPShellBase1;
  389.   BaseReport: TBaseReport);
  390. begin
  391.   with BaseReport do begin
  392.     SetFont( 'Times New Roman', 12 );
  393.     ClearTabs;
  394.     SetTab( 2.5, pjLeft, 4.0, 5, BOXLINENONE, 20);
  395.   end; { with }
  396. end;
  397.  
  398. procedure TBtnBottomDlg1.RPDetail11GroupHeaderPrint(Sender: TRPShellBase1;
  399.   BaseReport: TBaseReport);
  400. begin
  401.   with BaseReport do begin
  402.     if Sender.SysReprint then begin
  403.       Print( #9'RPDetail' + IntToStr(Sender.Tag) + ' Group Header ( Reprint )');
  404.     end else begin
  405.       Print( #9'RPDetail' + IntToStr(Sender.Tag) + ' Group Header ');
  406.     end; { if }
  407.   end; { with }
  408. end;
  409.  
  410. procedure TBtnBottomDlg1.RPDetailGroupHeader(Sender: TRPShellBase1;
  411.   First: Boolean; var Group: Boolean);
  412. begin
  413.   Group := (First) or (((CurrentDetail - 1) mod 3) = 0);
  414. end;
  415.  
  416. procedure TBtnBottomDlg1.RPGroupFooterSet(Sender: TRPShellBase1;
  417.   BaseReport: TBaseReport);
  418. begin
  419.   with BaseReport do begin
  420.     SetFont( 'Times New Roman', 12 );
  421.     ClearTabs;
  422.     SetTab( 2.5, pjLeft, 4.0, 5, BOXLINENONE, 20);
  423.   end; { with }
  424. end;
  425.  
  426. procedure TBtnBottomDlg1.RPDetailGroupFooterPrint(Sender: TRPShellBase1;
  427.   BaseReport: TBaseReport);
  428. begin
  429.   BaseReport.Print( #9'RPDetail' + IntToStr(Sender.Tag) + ' Group Footer ');
  430. end;
  431.  
  432. {------------------------------------------------------------------------------}
  433.  
  434. end.
  435.