mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-06-01 12:42:34 +02:00
271 lines
6.8 KiB
ObjectPascal
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.
|
|
|