summaryrefslogtreecommitdiff
path: root/src/reportengine/u_command.pas
diff options
context:
space:
mode:
Diffstat (limited to 'src/reportengine/u_command.pas')
-rw-r--r--src/reportengine/u_command.pas855
1 files changed, 855 insertions, 0 deletions
diff --git a/src/reportengine/u_command.pas b/src/reportengine/u_command.pas
new file mode 100644
index 00000000..16f7b0e0
--- /dev/null
+++ b/src/reportengine/u_command.pas
@@ -0,0 +1,855 @@
+{
+ << Impressions >> U_Commande.pas
+
+ Copyright (C) 2010 - Jean-Marc Levecque <jean-marc.levecque@jmlesite.fr>
+
+ This library is a free software coming as a add-on to fpGUI toolkit
+ See the copyright included in the fpGUI distribution for details about redistribution
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
+ Description:
+ This unit builds the objects in memory to produce either the preview or pdf file
+}
+
+unit U_Command;
+
+{$mode objfpc}{$H+}
+
+interface
+
+uses
+ Classes, SysUtils,
+ fpg_base, fpg_main, //fpg_imgfmt_bmp, fpg_imgfmt_jpg,
+ U_Pdf;
+
+type
+ TZone = (zHeader,zFooter,zPage,zMargins);
+ TSectPageNum = (PageNum,SectNum,PSectNum);
+ TBorderFlags= set of (bfLeft,bfRight,bfTop,bfBottom);
+
+ TDimensions= record
+ T: Single;
+ L: Single;
+ R: Single;
+ B: Single;
+ end;
+
+ TPaper= record
+ H: Integer;
+ W: Integer;
+ Printable: TDimensions;
+ end;
+
+ // document classes
+
+ T_Section = class
+ private
+ FNumSect: Integer;
+ FNbPages: Integer;
+ FPaper: TPaper;
+ FMargins: TDimensions;
+ FBotHead: Single;
+ FTopFoot: Single;
+ FPages: TList;
+ FHeader: TList;
+ FFooter: TList;
+ FFrames: TList;
+ FDefCol: Integer;
+ FTitle: string;
+ function GetFirstPage: Integer;
+ function GetTotalPages: Integer;
+ public
+ constructor Create(APaper: TPaper; AMargins: TDimensions; ANum: Integer); virtual;
+ destructor Destroy; override;
+ procedure LoadPage(APageNum: Integer);
+ procedure LoadCmdHeader;
+ procedure LoadCmdPage;
+ procedure LoadCmdFooter;
+ procedure LoadCmdGroup;
+ procedure LoadCmdGroupToPage;
+ procedure LoadSpaceHeader(APosY: Single; AColumn: Integer; AHeight: Single; ABackColor: Integer);
+ procedure LoadSpacePage(APosY: Single; AColumn: Integer; AHeight: Single; ABackColor: Integer);
+ procedure LoadSpaceFooter(APosY: Single; AColumn: Integer; AHeight: Single; ABackColor: Integer);
+ procedure LoadSpaceGroup(AHeight: Single);
+ procedure LoadFrame(AStyle: Integer; AZone: TZone);
+ procedure LoadLine(APosXBegin,APosYBegin: Single; AColumn: Integer; APosXEnd,APosYEnd: Single; AStyle: Integer);
+ procedure LoadLineHorizHeader(APosXBegin,APosYBegin: Single; AColumn: Integer; APosXEnd,APosYEnd: Single; AStyle: Integer);
+ procedure LoadLineHorizPage(APosXBegin,APosYBegin: Single; AColumn: Integer; APosXEnd,APosYEnd: Single; AStyle: Integer);
+ procedure LoadLineHorizFooter(APosXBegin,APosYBegin: Single; AColumn: Integer; APosXEnd,APosYEnd: Single; AStyle: Integer);
+ procedure LoadLineHorizGroupe(AHeight: Single);
+ procedure LoadSurf(APos: T_Points; AColor: TfpgColor);
+ procedure LoadImgHeader(APosX,APosY: Single; AColumn,AImgNum: Integer);
+ procedure LoadImgPage(APosX,APosY: Single; AColumn,AImgNum: Integer);
+ procedure LoadImgFooter(APosX,APosY: Single; AColumn,AImgNum: Integer);
+ function GetCmdPage(NumPage: Integer): TList;
+ property CmdHeader: TList read FHeader;
+ property CmdFooter: TList read FFooter;
+ property NbPages: Integer read FNbPages;
+ property FirstPage: Integer read GetFirstPage;
+ property Pages: TList read FPages;
+ property TotPages: Integer read GetTotalPages;
+ property Paper: TPaper read FPaper;
+ property Margins: TDimensions read FMargins;
+ property CmdFrames: TList read FFrames;
+ property DefaultCol: Integer read FDefCol write FDefCol;
+ property Title: string read FTitle write FTitle;
+ end;
+
+ T_Page = class
+ private
+ FNumPageTot: Integer;
+ FNumPageSect: Integer;
+ FCommands: TList;
+ public
+ constructor Create(ANumSec,ANumTot: Integer); virtual;
+ destructor Destroy; override;
+ property Commands: TList read FCommands write FCommands;
+ property PagesTot: Integer read FNumPageTot;
+ property PagesSect: Integer read FNumPageSect;
+ end;
+
+ T_Group = class
+ private
+ FLineHeight: Single;
+ FGroupHeight: Single;
+ FCommands: TList;
+ public
+ constructor Create; virtual;
+ destructor Destroy; override;
+ property Commands: TList read FCommands write FCommands;
+ property LineHeight: Single read FLineHeight;
+ property GroupeHeight: Single read FGroupHeight;
+ end;
+
+ T_WriteLine = class
+ private
+ FHeight: Integer;
+ FCommands: TList;
+ public
+ constructor Create; virtual;
+ destructor Destroy; override;
+ procedure LoadText(APosX,APosY: Single; AColumn,AText,AFont,AHeight,ABackColor,ABorder,ALineSpace: Integer;
+ ACurFont: Boolean; AFlags: TfpgTextFlags);
+ procedure LoadNumber(APosX,APosY: Single; AColumn,ATextNum,ATextTot,AFont,AHeight,ABackColor,ABorder,ALineSpace: Integer;
+ ACurFont: Boolean; AFlags: TfpgTextFlags; ATotal,AAlpha: Boolean; ATypeNum: TSectPageNum);
+ property Commands: TList read FCommands;
+ property LineHeight: Integer read FHeight;
+ end;
+
+ // command classes
+
+ T_Command = class
+ end;
+
+ PSection = ^T_Section;
+ PPage = ^T_Page;
+ PLigne = ^T_WriteLine;
+ PCommande = ^T_Command;
+ PFont = ^TfpgFont;
+
+ T_WriteText = class(T_Command)
+ private
+ FPosX: Single;
+ FPosY: Single;
+ FColumn: Integer;
+ FText: Integer;
+ FFont: Integer;
+ FBackColor: Integer;
+ FBorder: Integer;
+ FLineSpace: Integer;
+ FCurFont: Boolean;
+ FFlags: TfpgTextFlags;
+ public
+ constructor Create(APosX,APosY: Single; AColumn,AText,AFont,ABackColor,ABorder,ALineSpace: Integer; ACurFont: Boolean; AFlags: TfpgTextFlags); virtual;
+ procedure SetPosY(const AValue: Single);
+ property GetPosX: Single read FPosX;
+ property GetPosY: Single read FPosY;
+ property GetColumn: Integer read FColumn;
+ property GetText: Integer read FText;
+ property GetFont: Integer read FFont;
+ property GetBackColor: Integer read FBackColor;
+ property GetBorder: Integer read FBorder;
+ property GetLineSpace: Integer read FLineSpace;
+ property GetCurFont: Boolean read FCurFont;
+ property GetFlags: TfpgTextFlags read FFlags;
+ end;
+
+ T_Number = class(T_Command)
+ private
+ FPosX: Single;
+ FPosY: Single;
+ FColumn: Integer;
+ FTextNum: Integer;
+ FTextTot: Integer;
+ FFont: Integer;
+ FBackColor: Integer;
+ FBorder: Integer;
+ FLineSpace: Integer;
+ FCurFont: Boolean;
+ FFlags: TfpgTextFlags;
+ FTotal: Boolean;
+ FAlpha: Boolean;
+ FTypeNum: TSectPageNum;
+ public
+ constructor Create(APosX,APosY: Single; AColumn,ATextNum,ATextTot,AFont,ABackColor,ABorder,ALineSpace: Integer;
+ ACurFont: Boolean; AFlags: TfpgTextFlags; ATotal,AAlpha: Boolean; ATypeNum: TSectPageNum); virtual;
+ procedure SetPosY(const AValue: Single);
+ property GetPosX: Single read FPosX;
+ property GetPosY: Single read FPosY;
+ property GetColumn: Integer read FColumn;
+ property GetTextNum: Integer read FTextNum;
+ property GetTextTot: Integer read FTextTot;
+ property GetFont: Integer read FFont;
+ property GetBackColor: Integer read FBackColor;
+ property GetBorder: Integer read FBorder;
+ property GetLineSpace: Integer read FLineSpace;
+ property GetCurFont: Boolean read FCurFont;
+ property GetFlags: TfpgTextFlags read FFlags;
+ property GetTotal: Boolean read FTotal;
+ property GetAlpha: Boolean read FAlpha;
+ property GetTypeNum: TSectPageNum read FTypeNum;
+ end;
+
+ T_Line = class(T_Command)
+ private
+ FPosX: Single;
+ FPosY: Single;
+ FColumn: Integer;
+ FStyle: Integer;
+ FEndX: Single;
+ FEndY: Single;
+ public
+ constructor Create(APosX,APosY: Single; AColumn,AStyle: Integer; AEndX,AEndY: Single); virtual;
+ property GetPosX: Single read FPosX;
+ property GetPosY: Single read FPosY;
+ property GetColumn: Integer read FColumn;
+ property GetStyle: Integer read FStyle;
+ property GetEndX: Single read FEndX;
+ property GetEndY: Single read FEndY;
+ end;
+
+ T_Column = class(T_Command)
+ private
+ FPos: Single;
+ FWidth: Single;
+ FMargin: Single;
+ FColor: TfpgColor;
+ public
+ constructor Create(APos,AWidth,AMargin: Single; AColor: TfpgColor); virtual;
+ function GetTextPos: Single;
+ function GetTextWidth: Single;
+ procedure SetColColor(AColor: TfpgColor);
+ property ColPos: Single read FPos write FPos;
+ property ColWidth: Single read FWidth write FWidth;
+ property ColMargin: Single read FMargin write FMargin;
+ property GetColor: TfpgColor read FColor;
+ end;
+
+ T_Font = class(T_Command)
+ private
+ FFont: TfpgFont;
+ FColor: TfpgColor;
+ FSize: string;
+ public
+ constructor Create(AFont: string; AColor: TfpgColor); virtual;
+ destructor Destroy; override;
+ function GetHeight: Integer;
+ property GetFont: TfpgFont read FFont;
+ property GetColor: TfpgColor read FColor;
+ property GetSize: string read FSize;
+ end;
+
+ T_LineSpace = class(T_Command)
+ private
+ FSup: Single;
+ FInt: Single;
+ FInf: Single;
+ public
+ constructor Create(ASup,AInt,AInf: Single); virtual;
+ property GetSup: Single read FSup;
+ property GetInt: Single read FInt;
+ property GetInf: Single read FInf;
+ end;
+
+ T_Space = class(T_Command)
+ private
+ FPosY: Single;
+ FColumn: Integer;
+ FHeight: Single;
+ FBackColor: Integer;
+ public
+ constructor Create(APosY: Single; AColumn: Integer; AHeight: Single; ABackColor: Integer); virtual;
+ procedure SetPosY(const AValue: Single);
+ property GetPosY: Single read FPosY;
+ property GetColumn: Integer read FColumn;
+ property GetHeight: Single read FHeight;
+ property GetBackColor: Integer read FBackColor;
+ end;
+
+ T_BackColor = class(T_Command)
+ private
+ FColor: TfpgColor;
+ public
+ constructor Create(AColor: TfpgColor); virtual;
+ property GetColor: TfpgColor read FColor;
+ end;
+
+ T_LineStyle = class(T_Command)
+ private
+ FThick: Single;
+ FColor: TfpgColor;
+ FStyle: TfpgLineStyle;
+ public
+ constructor Create(AThick: Single; AColor: Tfpgcolor; AStyle: TfpgLineStyle); virtual;
+ property GetThick: Single read FThick;
+ property GetColor: TfpgColor read FColor;
+ property GetStyle: TfpgLineStyle read FStyle;
+ end;
+
+ T_Border = class(T_Command)
+ private
+ FFlags: TBorderFlags;
+ FStyle: Integer;
+ public
+ constructor Create(AFlags: TBorderFlags; AStyle: Integer);
+ property GetFlags: TBorderFlags read FFlags;
+ property GetStyle: Integer read FStyle;
+ end;
+
+ T_Frame = class(T_Command)
+ private
+ FStyle: Integer;
+ FZone: TZone;
+ public
+ constructor Create(AStyle: Integer; AZone: TZone);
+ property GetStyle: Integer read FStyle;
+ property GetZone: TZone read FZone;
+ end;
+
+ T_Surface = class(T_Command)
+ private
+ FPoints: T_Points;
+ FColor: TfpgColor;
+ public
+ constructor Create(APoints: array of TRefPos; AColor: TfpgColor);
+ property GetPoints: T_Points read FPoints;
+ property GetColor: TfpgColor read FColor;
+ end;
+
+ T_Image = class(T_Command)
+ private
+ FImage: Integer;
+ FColumn: Integer;
+ FPosX: Single;
+ FPosY: Single;
+ public
+ constructor Create(APosX,APosY: Single; AColumn,AImageNum: Integer);
+ property GetImage: Integer read FImage;
+ property GetColumn: Integer read FColumn;
+ property GetPosX: Single read FPosX;
+ property GetPosY: Single read FPosY;
+ end;
+
+var
+ Sections: TList;
+ Columns: TList;
+ Texts: TStringList;
+ ImageNames: TStringList;
+ Fonts: TList;
+ LineSpaces: TList;
+ BackColors: TList;
+ LineStyles: TList;
+ Borders: TList;
+ Images: TList;
+ VSection: T_Section;
+ VPage: T_Page;
+ VGroup: T_Group;
+ VWriteLine: T_WriteLine;
+ VCommand: T_Command;
+ VColumn: T_Column;
+ VBackColor: T_BackColor;
+ VFont: T_Font;
+ VLineSpace: T_LineSpace;
+ VLineStyle: T_LineStyle;
+ VBorder: T_Border;
+
+implementation
+
+// utility functions
+
+// extracts the font size from the fontdesc
+
+function ExtractFontSize(const AValue: string): string;
+begin
+if Pos(':',AValue)> 0
+then
+ Result:= Copy(AValue,Succ(Pos('-',AValue)),Pred(Pos(':',Avalue)-Pos('-',AValue)))
+else
+ Result:= Copy(AValue,Succ(Pos('-',AValue)),Length(AValue)-Pos('-',AValue));
+end;
+
+// document class methods
+
+function T_Section.GetFirstPage: Integer;
+begin
+Result:= T_Page(Pages[0]).PagesTot;
+end;
+
+function T_Section.GetTotalPages: Integer;
+begin
+if Pages.Count> 0
+then
+ Result:= T_Page(Pages[Pred(Pages.Count)]).PagesTot
+else
+ Result:= 0;
+end;
+
+constructor T_Section.Create(APaper: TPaper; AMargins: TDimensions; ANum: Integer);
+begin
+FNumSect:= ANum;
+FNbPages:= 0;
+FPaper:= APaper;
+FMargins:= AMargins;
+FBotHead:= FMargins.T;
+FTopFoot:= FMargins.B;
+FPages:= TList.Create;
+FHeader:= TList.Create;
+FFooter:= TList.Create;
+FFrames:= TList.Create;
+end;
+
+destructor T_Section.Destroy;
+var
+ Cpt: Integer;
+begin
+if FPages.Count> 0
+then
+ for Cpt:= 0 to Pred(FPages.Count) do
+ T_Page(FPages[Cpt]).Free;
+FPages.Free;
+if FHeader.Count> 0
+then
+ for Cpt:= 0 to Pred(FHeader.Count) do
+ T_Command(FHeader[Cpt]).Free;
+FHeader.Free;
+if FFooter.Count> 0
+then
+ for Cpt:= 0 to Pred(FFooter.Count) do
+ T_Command(FFooter[Cpt]).Free;
+FFooter.Free;
+if FFrames.Count> 0
+then
+ for Cpt:= 0 to Pred(FFrames.Count) do
+ T_Command(FFrames[Cpt]).Free;
+FFrames.Free;
+inherited Destroy;
+end;
+
+procedure T_Section.LoadPage(APageNum: Integer);
+begin
+Inc(FNbPages);
+VPage:= T_Page.Create(FNbPages,APageNum);
+FPages.Add(VPage);
+end;
+
+procedure T_Section.LoadCmdHeader;
+var
+ Cpt: Integer;
+begin
+for Cpt:= 0 to Pred(VWriteLine.Commands.Count) do
+ FHeader.Add(VWriteLine.Commands.Items[Cpt]);
+VWriteLine.FHeight:= 0;
+VWriteLine.Commands.Clear;
+end;
+
+procedure T_Section.LoadCmdPage;
+var
+ Cpt: Integer;
+begin
+for Cpt:= 0 to Pred(VWriteLine.Commands.Count) do
+ T_Page(Pages[Pred(FPages.Count)]).Commands.Add(VWriteLine.Commands.Items[Cpt]);
+VWriteLine.FHeight:= 0;
+VWriteLine.Commands.Clear;
+end;
+
+procedure T_Section.LoadCmdFooter;
+var
+ Cpt: Integer;
+begin
+for Cpt:= 0 to Pred(VWriteLine.Commands.Count) do
+ FFooter.Add(VWriteLine.Commands.Items[Cpt]);
+VWriteLine.FHeight:= 0;
+VWriteLine.Commands.Clear;
+end;
+
+procedure T_Section.LoadCmdGroup;
+var
+ Cpt: Integer;
+begin
+for Cpt:= 0 to Pred(VWriteLine.Commands.Count) do
+ VGroup.Commands.Add(VWriteLine.Commands.Items[Cpt]);
+with VGroup do
+ begin
+ FLineHeight:= VWriteLine.FHeight;
+ FGroupHeight:= FGroupHeight+FLineHeight;
+ end;
+VWriteLine.FHeight:= 0;
+VWriteLine.Commands.Clear;
+end;
+
+procedure T_Section.LoadCmdGroupToPage;
+var
+ Cpt: Integer;
+begin
+for Cpt:= 0 to Pred(VGroup.Commands.Count) do
+ T_Page(Pages[Pred(FPages.Count)]).Commands.Add(VGroup.Commands.Items[Cpt]);
+VGroup.FGroupHeight:= 0;
+VGroup.Commands.Clear;
+end;
+
+procedure T_Section.LoadSpaceHeader(APosY: Single; AColumn: Integer; AHeight: Single; ABackColor: Integer);
+begin
+VCommand:= T_Space.Create(APosY,AColumn,AHeight,ABackColor);
+FHeader.Add(VCommand);
+end;
+
+procedure T_Section.LoadSpacePage(APosY: Single; AColumn: Integer; AHeight: Single; ABackColor: Integer);
+begin
+VCommand:= T_Space.Create(APosY,AColumn,AHeight,ABackColor);
+T_Page(Pages[Pred(FPages.Count)]).Commands.Add(VCommand);
+end;
+
+procedure T_Section.LoadSpaceFooter(APosY: Single; AColumn: Integer; AHeight: Single; ABackColor: Integer);
+begin
+VCommand:= T_Space.Create(APosY,AColumn,AHeight,ABackColor);
+FFooter.Add(VCommand);
+end;
+
+procedure T_Section.LoadSpaceGroup(AHeight: Single);
+begin
+VGroup.FGroupHeight:= VGroup.FGroupHeight+AHeight;
+end;
+
+procedure T_Section.LoadFrame(AStyle: Integer; AZone: TZone);
+begin
+VCommand:= T_Frame.Create(AStyle,AZone);
+FFrames.Add(VCommand);
+end;
+
+procedure T_Section.LoadLine(APosXBegin,APosYBegin: Single; AColumn: Integer; APosXEnd,APosYEnd: Single; AStyle: Integer);
+begin
+VCommand:= T_Line.Create(APosXBegin,APosYBegin,AColumn,AStyle,APosXEnd,APosYEnd);
+T_Page(Pages[Pred(FPages.Count)]).Commands.Add(VCommand);
+end;
+
+procedure T_Section.LoadLineHorizHeader(APosXBegin,APosYBegin: Single; AColumn: Integer; APosXEnd,APosYEnd: Single;
+ AStyle: Integer);
+begin
+VCommand:= T_Line.Create(APosXBegin,APosYBegin,AColumn,AStyle,APosXEnd,APosYEnd);
+FHeader.Add(VCommand);
+end;
+
+procedure T_Section.LoadLineHorizPage(APosXBegin,APosYBegin: Single; AColumn: Integer; APosXEnd,APosYEnd: Single; AStyle: Integer);
+begin
+VCommand:= T_Line.Create(APosXBegin,APosYBegin,AColumn,AStyle,APosXEnd,APosYEnd);
+T_Page(Pages[Pred(FPages.Count)]).Commands.Add(VCommand);
+end;
+
+procedure T_Section.LoadLineHorizFooter(APosXBegin,APosYBegin: Single; AColumn: Integer; APosXEnd,APosYEnd: Single; AStyle: Integer);
+begin
+VCommand:= T_Line.Create(APosXBegin,APosYBegin,AColumn,AStyle,APosXEnd,APosYEnd);
+FFooter.Add(VCommand);
+end;
+
+procedure T_Section.LoadLineHorizGroupe(AHeight: Single);
+begin
+VGroup.FGroupHeight:= VGroup.FGroupHeight+AHeight;
+end;
+
+procedure T_Section.LoadSurf(APos: T_Points; AColor: TfpgColor);
+begin
+VCommand:= T_Surface.Create(APos,AColor);
+T_Page(Pages[Pred(FPages.Count)]).Commands.Add(VCommand);
+end;
+
+procedure T_Section.LoadImgHeader(APosX,APosY: Single; AColumn,AImgNum: Integer);
+begin
+VCommand:= T_Image.Create(APosX,APosY,AColumn,AImgNum);
+FHeader.Add(VCommand);
+end;
+
+procedure T_Section.LoadImgPage(APosX,APosY: Single; AColumn,AImgNum: Integer);
+begin
+VCommand:= T_Image.Create(APosX,APosY,AColumn,AImgNum);
+T_Page(Pages[Pred(FPages.Count)]).Commands.Add(VCommand);
+end;
+
+procedure T_Section.LoadImgFooter(APosX,APosY: Single; AColumn,AImgNum: Integer);
+begin
+VCommand:= T_Image.Create(APosX,APosY,AColumn,AImgNum);
+FFooter.Add(VCommand);
+end;
+
+function T_Section.GetCmdPage(NumPage: Integer): TList;
+begin
+Result:= T_Page(Pages[Pred(NumPage)]).Commands;
+end;
+
+constructor T_Page.Create(ANumSec,ANumTot: Integer);
+begin
+FNumPageTot:= ANumTot;
+FNumPageSect:= ANumSec;
+FCommands:= TList.Create;
+end;
+
+destructor T_Page.Destroy;
+var
+ Cpt: Integer;
+begin
+if FCommands.Count> 0
+then
+ for Cpt:= 0 to Pred(FCommands.Count) do
+ T_Command(FCommands[Cpt]).Free;
+FCommands.Free;
+inherited Destroy;
+end;
+
+constructor T_Group.Create;
+begin
+FLineHeight:= 0;
+FGroupHeight:= 0;
+FCommands:= TList.Create;
+end;
+
+destructor T_Group.Destroy;
+var
+ Cpt: Integer;
+begin
+if FCommands.Count> 0
+then
+ for Cpt:= 0 to Pred(FCommands.Count) do
+ T_Command(FCommands[Cpt]).Free;
+FCommands.Free;
+inherited Destroy;
+end;
+
+constructor T_WriteLine.Create;
+begin
+FHeight:= 0;
+FCommands:= TList.Create;
+end;
+
+destructor T_WriteLine.Destroy;
+var
+ Cpt: Integer;
+begin
+if FCommands.Count> 0
+then
+ for Cpt:= 0 to Pred(FCommands.Count) do
+ T_Command(FCommands[Cpt]).Free;
+FCommands.Free;
+inherited Destroy;
+end;
+
+procedure T_WriteLine.LoadText(APosX,APosY: Single; AColumn,AText,AFont,AHeight,ABackColor,ABorder,ALineSpace: Integer;
+ ACurFont: Boolean; AFlags: TfpgTextFlags);
+begin
+if FHeight< AHeight
+then
+ FHeight:= AHeight;
+VCommand:= T_WriteText.Create(APosX,APosY,AColumn,AText,AFont,ABackColor,ABorder,ALineSpace,ACurFont,AFlags);
+Commands.Add(VCommand);
+end;
+
+procedure T_WriteLine.LoadNumber(APosX,APosY: Single; AColumn,ATextNum,ATextTot,AFont,AHeight,ABackColor,ABorder,ALineSpace: Integer;
+ ACurFont: Boolean; AFlags: TfpgTextFlags; ATotal,AAlpha: Boolean; ATypeNum: TSectPageNum);
+begin
+if FHeight< AHeight
+then
+ FHeight:= AHeight;
+VCommand:= T_Number.Create(APosX,APosY,AColumn,ATextNum,ATextTot,AFont,ABackColor,ABorder,ALineSpace,ACurFont,AFlags,ATotal,AAlpha,ATypeNum);
+Commands.Add(VCommand);
+end;
+
+// command class methods
+
+procedure T_WriteText.SetPosY(const AValue: Single);
+begin
+if FPosY<> AValue
+then
+ FPosY:= AValue;
+end;
+
+constructor T_WriteText.Create(APosX,APosY: Single; AColumn,AText,AFont,ABackColor,ABorder,ALineSpace: Integer; ACurFont: Boolean; AFlags: TfpgTextFlags);
+begin
+inherited Create;
+FPosX:= APosX;
+FPosY:= APosY;
+FColumn:= AColumn;
+FText:= AText;
+FFont:= AFont;
+FBackColor:= ABackColor;
+FBorder:= ABorder;
+FLineSpace:= ALineSpace;
+FCurFont:= ACurFont;
+FFlags:= AFlags;
+end;
+
+procedure T_Number.SetPosY(const AValue: Single);
+begin
+if FPosY<> AValue
+then
+ FPosY:= AValue;
+end;
+
+constructor T_Number.Create(APosX,APosY: Single; AColumn,ATextNum,ATextTot,AFont,ABackColor,ABorder,ALineSpace: Integer;
+ ACurFont: Boolean; AFlags: TfpgTextFlags; ATotal,AAlpha: Boolean; ATypeNum: TSectPageNum);
+begin
+inherited Create;
+FPosX:= APosX;
+FPosY:= APosY;
+FColumn:= AColumn;
+FTextNum:= ATextNum;
+FTextTot:= ATextTot;
+FFont:= AFont;
+FBackColor:= ABackColor;
+FBorder:= ABorder;
+FLineSpace:= ALineSpace;
+FCurFont:= ACurFont;
+FFlags:= AFlags;
+FTotal:= ATotal;
+FAlpha:= AAlpha;
+FTypeNum:= ATypeNum;
+end;
+
+constructor T_Line.Create(APosX,APosY: Single; AColumn,AStyle: Integer; AEndX,AEndY: Single);
+begin
+FPosX:= APosX;
+FPosY:= APosY;
+FColumn:= AColumn;
+FStyle:= AStyle;
+FEndX:= AEndX;
+FEndY:= AEndY;
+end;
+
+constructor T_Column.Create(APos,AWidth,AMargin: Single; AColor: TfpgColor);
+begin
+inherited Create;
+FPos:= APos;
+FWidth:= AWidth;
+FMargin:= AMargin;
+FColor:= AColor;
+end;
+
+function T_Column.GetTextPos: Single;
+begin
+Result:= FPos+FMargin;
+end;
+
+function T_Column.GetTextWidth: Single;
+begin
+Result:= FWidth-(FMargin*2);
+end;
+
+procedure T_Column.SetColColor(AColor: TfpgColor);
+begin
+if FColor<> AColor
+then
+ FColor:= AColor;
+end;
+
+constructor T_Font.Create(AFont: string; AColor: TfpgColor);
+begin
+inherited Create;
+FFont:= fpgApplication.GetFont(AFont);
+FColor:= AColor;
+FSize:= ExtractFontSize(AFont);
+end;
+
+destructor T_Font.Destroy;
+begin
+FFont.Free;
+inherited Destroy;
+end;
+
+function T_Font.GetHeight: Integer;
+begin
+Result:= TfpgFont(FFont).Height;
+end;
+
+constructor T_LineSpace.Create(ASup,AInt,AInf: Single);
+begin
+inherited Create;
+FSup:= ASup;
+FInt:= AInt;
+FInf:= AInf;
+end;
+
+constructor T_Space.Create(APosY: Single; AColumn: Integer; AHeight: Single; ABackColor: Integer);
+begin
+inherited Create;
+FPosY:= APosY;
+FColumn:= AColumn;
+FHeight:= AHeight;
+FBackColor:= ABackColor;
+end;
+
+constructor T_Surface.Create(APoints: array of TRefPos; AColor: TfpgColor);
+var
+ Cpt: Integer;
+begin
+inherited Create;
+SetLength(FPoints,Length(APoints));
+for Cpt:= 0 to Pred(Length(FPoints)) do
+ FPoints[Cpt]:= APoints[Cpt];
+FColor:= AColor;
+end;
+
+procedure T_Space.SetPosY(const AValue: Single);
+begin
+if FPosY<> AValue
+then
+ FPosY:= AValue;
+end;
+
+constructor T_BackColor.Create(AColor: TfpgColor);
+begin
+FColor:= AColor;
+end;
+
+constructor T_LineStyle.Create(AThick: Single; AColor: Tfpgcolor; AStyle: TfpgLineStyle);
+begin
+inherited Create;
+FThick:= AThick;
+FColor:= AColor;
+FStyle:= AStyle;
+end;
+
+constructor T_Border.Create(AFlags: TBorderFlags; AStyle: Integer);
+begin
+inherited Create;
+FFlags:= AFlags;
+FStyle:= AStyle;
+end;
+
+constructor T_Frame.Create(AStyle: Integer; AZone: TZone);
+begin
+inherited Create;
+FStyle:= AStyle;
+FZone:= AZone;
+end;
+
+constructor T_Image.Create(APosX,APosY: Single; AColumn,AImageNum: Integer);
+begin
+inherited Create;
+FImage:= AImageNum;
+FColumn:= AColumn;
+FPosX:= APosX;
+FPosY:= APosY;
+end;
+
+end.
+