rptexpressions.pp 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259
  1. unit rptexpressions;
  2. {$mode objfpc}{$H+}
  3. {$I demos.inc}
  4. interface
  5. uses
  6. Classes,
  7. SysUtils,
  8. fpreport,
  9. udapp;
  10. type
  11. { TExpressionsDemo }
  12. TExpressionsDemo = class(TReportDemoApp)
  13. private
  14. FReportData: TFPReportUserData;
  15. sl: TStringList;
  16. procedure DoBeforePrint(Sender: TFPReportElement);
  17. procedure GetReportDataFirst(Sender: TObject);
  18. procedure GetReportDataValue(Sender: TObject; const AValueName: String; var AValue: Variant);
  19. procedure GetReportDataEOF(Sender: TObject; var IsEOF: Boolean);
  20. procedure GetReportFieldNames(Sender: TObject; List: TStrings);
  21. protected
  22. procedure InitialiseData; override;
  23. procedure CreateReportDesign; override;
  24. public
  25. constructor Create(AOwner : TComponent); override;
  26. destructor Destroy; override;
  27. end;
  28. implementation
  29. { TExpressionsDemo }
  30. procedure TExpressionsDemo.GetReportDataFirst(Sender: TObject);
  31. begin
  32. {$IFDEF gdebug}
  33. writeln('GetReportDataFirst');
  34. {$ENDIF}
  35. end;
  36. procedure TExpressionsDemo.DoBeforePrint(Sender: TFPReportElement);
  37. begin
  38. With rpt.Variables.FindVariable('isEven') do
  39. AsBoolean:=Not AsBoolean;
  40. end;
  41. procedure TExpressionsDemo.GetReportDataValue(Sender: TObject; const AValueName: String; var AValue: Variant);
  42. begin
  43. {$IFDEF gdebug}
  44. writeln(Format('GetReportDataValue - %d', [lReportData.RecNo]));
  45. {$ENDIF}
  46. if AValueName = 'element' then
  47. begin
  48. AValue := sl[FReportData.RecNo-1];
  49. end;
  50. end;
  51. procedure TExpressionsDemo.GetReportDataEOF(Sender: TObject; var IsEOF: Boolean);
  52. begin
  53. {$IFDEF gdebug}
  54. writeln(Format('GetReportDataEOF - %d', [lReportData.RecNo]));
  55. {$ENDIF}
  56. if FReportData.RecNo > sl.Count then
  57. IsEOF := True
  58. else
  59. IsEOF := False;
  60. end;
  61. procedure TExpressionsDemo.GetReportFieldNames(Sender: TObject; List: TStrings);
  62. begin
  63. List.Add('element');
  64. end;
  65. procedure TExpressionsDemo.InitialiseData;
  66. var
  67. i: integer;
  68. begin
  69. sl := TStringList.Create;
  70. for i := 1 to 15 do
  71. sl.Add(Format(Char(64+i)+'-Item %d', [i]));
  72. end;
  73. procedure TExpressionsDemo.CreateReportDesign;
  74. var
  75. p: TFPReportPage;
  76. TitleBand: TFPReportTitleBand;
  77. DataBand: TFPReportDataBand;
  78. Memo: TFPReportMemo;
  79. PageFooter: TFPReportPageFooterBand;
  80. DataHeader: TFPReportDataHeaderBand;
  81. begin
  82. Inherited;
  83. rpt.Author := 'Graeme Geldenhuys';
  84. rpt.Title := 'FPReport Demo 2 - Expression Evaluation';
  85. // Line zero : even..
  86. rpt.Variables.AddVariable('isEven').AsBoolean:=True;
  87. p := TFPReportPage.Create(rpt);
  88. p.Orientation := poPortrait;
  89. p.PageSize.PaperName := 'A4';
  90. { page margins }
  91. p.Margins.Left := 20;
  92. p.Margins.Top := 20;
  93. p.Margins.Right := 20;
  94. p.Margins.Bottom := 20;
  95. p.Data := FReportData;
  96. p.Font.Name := 'LiberationSans';
  97. TitleBand := TFPReportTitleBand.Create(p);
  98. TitleBand.Layout.Height := 40;
  99. {$ifdef ColorBands}
  100. TitleBand.Frame.Shape := fsRectangle;
  101. TitleBand.Frame.BackgroundColor := clReportTitleSummary;
  102. {$endif}
  103. Memo := TFPReportMemo.Create(TitleBand);
  104. Memo.Layout.Left := 55;
  105. Memo.Layout.Top := 10;
  106. Memo.Layout.Width := 50;
  107. Memo.Layout.Height := 8;
  108. Memo.Text := 'THE REPORT TITLE';
  109. Memo := TFPReportMemo.Create(TitleBand);
  110. Memo.Layout.Left := 125;
  111. Memo.Layout.Top := 20;
  112. Memo.Layout.Width := 50;
  113. Memo.Layout.Height := 8;
  114. Memo.Text := 'Report Date: [TODAY]';
  115. Memo := TFPReportMemo.Create(TitleBand);
  116. Memo.Layout.Left := 0;
  117. Memo.Layout.Top := 0;
  118. Memo.Layout.Width := 30;
  119. Memo.Layout.Height := 5;
  120. Memo.Text := '1 + 2 = [1 + 2].';
  121. Memo.Options := [moDisableExpressions];
  122. DataHeader := TFPReportDataHeaderBand.Create(p);
  123. DataHeader.Layout.Height := 10;
  124. {$ifdef ColorBands}
  125. DataHeader.Frame.Shape := fsRectangle;
  126. DataHeader.Frame.BackgroundColor := clDataHeaderFooter;
  127. {$endif}
  128. DataHeader.UseParentFont := False;
  129. DataHeader.Font.Name := 'LiberationSans-Bold';
  130. Memo := TFPReportMemo.Create(DataHeader);
  131. Memo.Layout.Left := 5;
  132. Memo.Layout.Top := 0;
  133. Memo.Layout.Width := 75;
  134. Memo.Layout.Height := 5;
  135. Memo.Text := 'Complex Example';
  136. Memo.Frame.Lines := [flBottom];
  137. Memo.TextAlignment.Vertical := tlCenter;
  138. Memo := TFPReportMemo.Create(DataHeader);
  139. Memo.Layout.Left := 85;
  140. Memo.Layout.Top := 0;
  141. Memo.Layout.Width := 25;
  142. Memo.Layout.Height := 5;
  143. Memo.Text := 'Single Calc';
  144. Memo.Frame.Lines := [flBottom];
  145. Memo.TextAlignment.Vertical := tlCenter;
  146. Memo := TFPReportMemo.Create(DataHeader);
  147. Memo.Layout.Left := 120;
  148. Memo.Layout.Top := 0;
  149. Memo.Layout.Width := 35;
  150. Memo.Layout.Height := 5;
  151. Memo.Text := 'System Variables';
  152. Memo.StretchMode := smActualHeight;
  153. Memo.Frame.Lines := [flBottom];
  154. Memo.TextAlignment.Vertical := tlCenter;
  155. DataBand := TFPReportDataBand.Create(p);
  156. DataBand.Layout.Height := 10;
  157. DataBand.HeaderBand := DataHeader;
  158. {$ifdef ColorBands}
  159. DataBand.Frame.Shape := fsRectangle;
  160. DataBand.Frame.BackgroundColor := clDataBand;
  161. {$endif}
  162. DataBand.OnBeforePrint:=@DoBeforePrint;
  163. Memo := TFPReportMemo.Create(DataBand);
  164. Memo.Layout.Left := 5;
  165. Memo.Layout.Top := 2;
  166. Memo.Layout.Width := 75;
  167. Memo.Layout.Height := 5;
  168. Memo.Text := 'Even row: [isEven]. Hello world "[element]", and first letter is "[COPY(element, 1, 1)]".';
  169. Memo.Options := [];
  170. Memo := TFPReportMemo.Create(DataBand);
  171. Memo.Layout.Left := 85;
  172. Memo.Layout.Top := 2;
  173. Memo.Layout.Width := 25;
  174. Memo.Layout.Height := 5;
  175. Memo.Text := '[2 + RecNo - 6]';
  176. Memo.Options := [moHideZeros];
  177. Memo := TFPReportMemo.Create(DataBand);
  178. Memo.Layout.Left := 120;
  179. Memo.Layout.Top := 2;
  180. Memo.Layout.Width := 25;
  181. Memo.Layout.Height := 5;
  182. Memo.Text := 'RecNo = [RecNo].';
  183. PageFooter := TFPReportPageFooterBand.Create(p);
  184. PageFooter.Layout.Height := 20;
  185. {$ifdef ColorBands}
  186. PageFooter.Frame.Shape := fsRectangle;
  187. PageFooter.Frame.BackgroundColor := clPageHeaderFooter;
  188. {$endif}
  189. Memo := TFPReportMemo.Create(PageFooter);
  190. Memo.Layout.Left := 135;
  191. Memo.Layout.Top := 13;
  192. Memo.Layout.Width := 20;
  193. Memo.Layout.Height := 5;
  194. Memo.Text := 'Page [PageNo]';
  195. Memo := TFPReportMemo.Create(PageFooter);
  196. Memo.Layout.Left := 0;
  197. Memo.Layout.Top := 0;
  198. Memo.Layout.Width := 30;
  199. Memo.Layout.Height := 5;
  200. Memo.Text := '1 + 2 = [1 + 2].';
  201. end;
  202. constructor TExpressionsDemo.Create(AOwner: TComponent);
  203. begin
  204. Inherited;
  205. FReportData := TFPReportUserData.Create(self);
  206. FReportData.OnGetValue := @GetReportDataValue;
  207. FReportData.OnGetEOF := @GetReportDataEOF;
  208. FReportData.OnFirst := @GetReportDataFirst;
  209. FReportData.OnGetNames := @GetReportFieldNames;
  210. end;
  211. destructor TExpressionsDemo.Destroy;
  212. begin
  213. FreeAndNil(FReportData);
  214. FreeAndNil(sl);
  215. inherited Destroy;
  216. end;
  217. end.