fpc/packages/fcl-report/demos/rptexpressions.pp
2020-01-18 16:40:57 +00:00

271 lines
6.8 KiB
ObjectPascal

unit rptexpressions;
{$mode objfpc}{$H+}
{$I demos.inc}
interface
uses
Classes,
SysUtils,
fpreport,
udapp;
type
{ TExpressionsDemo }
TExpressionsDemo = class(TReportDemoApp)
private
FReportData: TFPReportUserData;
sl: TStringList;
procedure DoBeforePrint(Sender: TFPReportElement);
procedure GetReportDataFirst(Sender: TObject);
procedure GetReportDataValue(Sender: TObject; const AValueName: String; var AValue: Variant);
procedure GetReportDataEOF(Sender: TObject; var IsEOF: Boolean);
procedure GetReportFieldNames(Sender: TObject; List: TStrings);
protected
procedure InitialiseData; override;
procedure CreateReportDesign; override;
public
constructor Create(AOwner : TComponent); override;
destructor Destroy; override;
Class function Description : string; override;
end;
implementation
{ TExpressionsDemo }
procedure TExpressionsDemo.GetReportDataFirst(Sender: TObject);
begin
{$IFDEF gdebug}
writeln('GetReportDataFirst');
{$ENDIF}
end;
procedure TExpressionsDemo.DoBeforePrint(Sender: TFPReportElement);
begin
With rpt.Variables.FindVariable('isEven') do
AsBoolean:=Not AsBoolean;
end;
procedure TExpressionsDemo.GetReportDataValue(Sender: TObject; const AValueName: String; var AValue: Variant);
begin
{$IFDEF gdebug}
writeln(Format('GetReportDataValue - %d', [lReportData.RecNo]));
{$ENDIF}
if AValueName = 'element' then
begin
AValue := sl[FReportData.RecNo-1];
end;
end;
procedure TExpressionsDemo.GetReportDataEOF(Sender: TObject; var IsEOF: Boolean);
begin
{$IFDEF gdebug}
writeln(Format('GetReportDataEOF - %d', [lReportData.RecNo]));
{$ENDIF}
if FReportData.RecNo > sl.Count then
IsEOF := True
else
IsEOF := False;
end;
procedure TExpressionsDemo.GetReportFieldNames(Sender: TObject; List: TStrings);
begin
List.Add('element');
end;
procedure TExpressionsDemo.InitialiseData;
var
i: integer;
begin
sl := TStringList.Create;
for i := 1 to 15 do
sl.Add(Format(Char(64+i)+'-Item %d', [i]));
end;
procedure TExpressionsDemo.CreateReportDesign;
var
p: TFPReportPage;
TitleBand: TFPReportTitleBand;
DataBand: TFPReportDataBand;
Memo: TFPReportMemo;
PageFooter: TFPReportPageFooterBand;
DataHeader: TFPReportDataHeaderBand;
begin
Inherited;
rpt.Author := 'Graeme Geldenhuys';
rpt.Title := 'FPReport Demo 2 - Expression Evaluation';
// Line zero : even..
rpt.Variables.AddVariable('isEven').AsBoolean:=True;
p := TFPReportPage.Create(rpt);
p.Orientation := poPortrait;
p.PageSize.PaperName := 'A4';
{ page margins }
p.Margins.Left := 20;
p.Margins.Top := 20;
p.Margins.Right := 20;
p.Margins.Bottom := 20;
p.Data := FReportData;
p.Font.Name := 'LiberationSans';
TitleBand := TFPReportTitleBand.Create(p);
TitleBand.Layout.Height := 40;
{$ifdef ColorBands}
TitleBand.Frame.Shape := fsRectangle;
TitleBand.Frame.BackgroundColor := clReportTitleSummary;
{$endif}
Memo := TFPReportMemo.Create(TitleBand);
Memo.Layout.Left := 55;
Memo.Layout.Top := 10;
Memo.Layout.Width := 50;
Memo.Layout.Height := 8;
Memo.Text := 'THE REPORT TITLE';
Memo := TFPReportMemo.Create(TitleBand);
Memo.Layout.Left := 125;
Memo.Layout.Top := 20;
Memo.Layout.Width := 50;
Memo.Layout.Height := 8;
{$IFDEF fptestX}
Memo.Text := 'Report Date: 2020-01-15';
{$ELSE}
Memo.Text := 'Report Date: [TODAY]';
{$ENDIF}
Memo := TFPReportMemo.Create(TitleBand);
Memo.Layout.Left := 0;
Memo.Layout.Top := 0;
Memo.Layout.Width := 30;
Memo.Layout.Height := 5;
Memo.Text := '1 + 2 = [1 + 2].';
Memo.Options := [moDisableExpressions];
DataHeader := TFPReportDataHeaderBand.Create(p);
DataHeader.Layout.Height := 10;
{$ifdef ColorBands}
DataHeader.Frame.Shape := fsRectangle;
DataHeader.Frame.BackgroundColor := clDataHeaderFooter;
{$endif}
DataHeader.UseParentFont := False;
DataHeader.Font.Name := 'LiberationSans-Bold';
DataHeader.Data:=FReportData;
Memo := TFPReportMemo.Create(DataHeader);
Memo.Layout.Left := 5;
Memo.Layout.Top := 0;
Memo.Layout.Width := 75;
Memo.Layout.Height := 5;
Memo.Text := 'Complex Example';
Memo.Frame.Lines := [flBottom];
Memo.TextAlignment.Vertical := tlCenter;
Memo := TFPReportMemo.Create(DataHeader);
Memo.Layout.Left := 85;
Memo.Layout.Top := 0;
Memo.Layout.Width := 25;
Memo.Layout.Height := 5;
Memo.Text := 'Single Calc';
Memo.Frame.Lines := [flBottom];
Memo.TextAlignment.Vertical := tlCenter;
Memo := TFPReportMemo.Create(DataHeader);
Memo.Layout.Left := 120;
Memo.Layout.Top := 0;
Memo.Layout.Width := 35;
Memo.Layout.Height := 5;
Memo.Text := 'System Variables';
Memo.StretchMode := smActualHeight;
Memo.Frame.Lines := [flBottom];
Memo.TextAlignment.Vertical := tlCenter;
DataBand := TFPReportDataBand.Create(p);
DataBand.Layout.Height := 10;
{$ifdef ColorBands}
DataBand.Frame.Shape := fsRectangle;
DataBand.Frame.BackgroundColor := clDataBand;
{$endif}
DataBand.OnBeforePrint:=@DoBeforePrint;
DataBand.Data:=FReportData;
Memo := TFPReportMemo.Create(DataBand);
Memo.Layout.Left := 5;
Memo.Layout.Top := 2;
Memo.Layout.Width := 75;
Memo.Layout.Height := 5;
Memo.Text := 'Even row: [isEven]. Hello world "[element]", and first letter is "[COPY(element, 1, 1)]".';
Memo.Options := [];
Memo := TFPReportMemo.Create(DataBand);
Memo.Layout.Left := 85;
Memo.Layout.Top := 2;
Memo.Layout.Width := 25;
Memo.Layout.Height := 5;
Memo.Text := '[2 + RecNo('''') - 6]';
Memo.Options := [moHideZeros];
Memo := TFPReportMemo.Create(DataBand);
Memo.Layout.Left := 120;
Memo.Layout.Top := 2;
Memo.Layout.Width := 25;
Memo.Layout.Height := 5;
Memo.Text := 'RecNo = [RecNo('''')].';
PageFooter := TFPReportPageFooterBand.Create(p);
PageFooter.Layout.Height := 20;
{$ifdef ColorBands}
PageFooter.Frame.Shape := fsRectangle;
PageFooter.Frame.BackgroundColor := clPageHeaderFooter;
{$endif}
Memo := TFPReportMemo.Create(PageFooter);
Memo.Layout.Left := 135;
Memo.Layout.Top := 13;
Memo.Layout.Width := 20;
Memo.Layout.Height := 5;
Memo.Text := 'Page [PageNo]';
Memo := TFPReportMemo.Create(PageFooter);
Memo.Layout.Left := 0;
Memo.Layout.Top := 0;
Memo.Layout.Width := 30;
Memo.Layout.Height := 5;
Memo.Text := '1 + 2 = [1 + 2].';
end;
constructor TExpressionsDemo.Create(AOwner: TComponent);
begin
Inherited;
FReportData := TFPReportUserData.Create(self);
FReportData.OnGetValue := @GetReportDataValue;
FReportData.OnGetEOF := @GetReportDataEOF;
FReportData.OnFirst := @GetReportDataFirst;
FReportData.OnGetNames := @GetReportFieldNames;
end;
destructor TExpressionsDemo.Destroy;
begin
FreeAndNil(FReportData);
FreeAndNil(sl);
inherited Destroy;
end;
class function TExpressionsDemo.Description: string;
begin
Result:='Demo with expressions in Memos';
end;
end.