?? posprintex.~pas
字號:
unit PosPrintEx;
interface
uses
SysUtils,Classes,Controls,stdCtrls,DB,GridsEh,DBGrideh,ytxStringGridEh,FrmPrintManUnit,FrmPreviewDlg;
const
FileVersion=$AB71;
type
TDriveMode=(DMNone,DMWindows);
TDataType=(DtNone,DtTitleFields,DtBodyFields,DtSysFields);
TBodyType=(btGrid,btDataSet);
TReportVar=Class;
TReportVars=Class;
{表報主體}
TPosReport = class(TComponent)
private
{ Private declarations }
{Private}
FDriveMode:TDriveMode; //驅動模式
FComName:String; //端口名稱
FComByte:Integer; //波特率
FOpenBoxCode:String; //開錢箱指令
FAutoOpenBox:Boolean; //打印后自動開錢箱
FFootSpaceRow:integer; //走紙行數
FPageWidth:Integer; //頁寬
FTitleRowCount:integer; //頁頭行數,用于換頁加表頭
FQuantiyDiciaLength:integer; //數量小數點長度
FMoneyDiciaLength:integer; //金額小數點長度
FSysVars:TReportVars; //系統變量
FTitleVars:TReportVars; //表頭字段
FPageNo:integer; //頁碼
FPageCount:integer; //頁數
FDetailRowCount:integer; //行數
FBodyStartRow:integer; //表體開始行數
FBodyEndRow:integer; //表體結束行數
FStepRow:integer; //表體占用行數
FBodyType:TBodyType; //表體類型
FGrid:TYTXStringGridEh;
FDataSet:TDataSet;
FOpenFlag:Boolean; //模板打開標示
FFilePathName:String; //械板文件位置
FReportLines:TStringList;
FQuantityDiciaLength: integer;
FrmDesign:TFrmPrintMan;
FrmPreview:TFrmPreview;
procedure CreateSysValues;
procedure InitSysValues;
Procedure SetTitleVars(TitleVars:TReportVars);
Function GetTitleVars:TReportVars;
protected
{ Protected declarations }
public
{ Public declarations }
Constructor Create(AOwner:TComponent);Override;
Destructor Destroy;override;
Procedure ShowVarList(VarType:TDataType;Out ListFields:TListBox);
Procedure SetBodyFields(AValue:TYTXStringGridEh);overload;
Procedure SetBodyFields(AValue:TDataSet);Overload;
Procedure SaveToFile(FileName:String);
Procedure LoadFromFile(FileName:String);
Procedure ShowDesign;
Procedure Print;
Procedure PrintPreview;
published
{ Published declarations }
Property ReportVars:TReportVars Read GetTitleVars Write SetTitleVars;
Property AutoOpenBox:boolean Read FAutoOpenBox Write FAutoOpenBox;
Property OpenBoxCode:String Read FOpenBoxCode Write FOpenBoxCode;
Property DriveMode:TDriveMode Read FDriveMode Write FDriveMode;
Property ComName:String Read FComName Write FComName;
Property ComByte:Integer Read FComByte Write FComByte;
Property FootSpaceRow:Integer Read FFootSpaceRow Write FFootSpaceRow;
Property PageWidth:integer Read FPageWidth Write FPageWidth;
Property TitleRowCount:Integer Read FTitleRowCount Write FTitleRowCount;
Property QuantityDicial:integer Read FQuantityDiciaLength Write FQuantityDiciaLength;
Property MoneyDicial:integer Read FMoneyDiciaLength Write FMoneyDiciaLength;
Property ReportLines:TStringList Read FReportLines Write FReportLines;
end;
{報表變量}
TReportVar=Class(TCollectionItem)
Private
{Private}
FVarName:String;
FVarCaption:String;
FVarValue:Variant;
Procedure SetVarName(Value:String);
Function GetVarName:String;
Procedure SetVarCaption(Value:String);
Function GetVarCaption:String;
Procedure SetVarValue(Value:Variant);
Function GetVarValue:Variant;
Protected
{Protected}
procedure Assign(Source:TPersistent);override;
function GetDisplayName: string; override;
Function Index:integer;
Public
{Public}
Constructor Create(ReportVars:TCollection);
Published
{Published}
Property Name:String Read GetVarName Write SetVarName;
Property Caption:String Read GetVarCaption Write SetVarCaption;
Property Value:Variant Read GetVarValue Write SetVarValue;
end;
TReportVarClass=class of TReportVar;
{報表變量集合}
TReportVars=Class(TCollection)
Private
{Private}
FPosReport:TPosReport;
Function GetCount:integer;
Function GetReportVar(Index:integer):TReportVar;
Procedure SetReportVar(Index:integer;Value:TReportVar);
protected
{Protected}
function GetOwner: TPersistent; override;
Public
{Public}
Constructor Create(Report:TPosReport;ReportVarClass:TReportVarClass);
Function Add:TReportVar;
Procedure AddVar(ACaption,AName:String;Value:Variant);
Procedure Clear;
Function GetValueByName(VarName:String):Variant;
Function GetValueByCaption(VarCaption:String):Variant;
Function GetNameByCaption(Caption:String):String;
Procedure SetValueByName(varName:String;Value:Variant);
Procedure SetValueByCaption(varCaption:String;Value:Variant);
Property Items[Index:integer]:TReportVar Read GetReportVar Write SetReportVar;default;
Property PosReport:TPosReport Read FPosReport;
Published
{Published}
Property ItemCount:integer Read GetCount;
end;
procedure Register;
implementation
procedure Register;
begin
RegisterComponents('YtxReport', [TPosReport]);
end;
{ TPosReport }
constructor TPosReport.Create(AOwner: TComponent);
begin
inherited;
FAutoOpenBox:=false;
FBodyEndRow:=0;
FBodyStartRow:=0;
FBodyType:=BtGrid;
FComByte:=9600;
FDataSet:=nil;
FDetailRowCount:=0;
FDriveMode:=dmNone;
FFilePathName:='';
FFootSpaceRow:=3;
FGrid:=nil;
FMoneyDiciaLength:=2;
FOpenBoxCode:='Chr(27)+''p''+Chr(0)+Chr(60)+Chr(255)';
FOpenFlag:=False;
FPageCount:=0;
FPageWidth:=53;
FQuantityDiciaLength:=0;
FStepRow:=0;
FTitleRowCount:=0;
FTitleVars:=TReportVars.Create(self,TReportVar);
FSysVars:=TReportVars.Create(self,TReportVar);
FReportLines:=TStringList.Create;
FrmDesign:=TFrmPrintMan.Create(AOwner);
FrmPreview:=TFrmPreview.Create(AOwner);
CreateSysValues; //添加系統變
end;
procedure TPosReport.CreateSysValues;
begin
FSysVars.AddVar('日期時間','[@.長日期]','');
FSysVars.AddVar('日期','[@.日期]','');
FSysVars.AddVar('時間','[@.時間]','');
FSysVars.AddVar('頁碼','[@.頁碼]','');
FSysVars.AddVar('頁數','[@.頁數]','');
FSysVars.AddVar('行數','[@.行數]','');
FSysVars.AddVar('開發商','[@.開發商]','');
end;
destructor TPosReport.Destroy;
begin
FTitleVars.Free;
FrmDesign.Free;
FrmDesign:=nil;
FrmPreview.Free;
FrmPreview:=nil;
inherited;
end;
function TPosReport.GetTitleVars: TReportVars;
begin
if Assigned(FTitleVars) then
Result:=FTitleVars;
end;
procedure TPosReport.InitSysValues;
begin
FSysVars.SetValueByCaption('日期',FormatDateTime('YYYY-MM-DD',Now));
FSysVars.SetValueByCaption('長時間',FormatDateTime('YYYY-MM-DD HH:MM:SS',Now));
FSysVars.SetValueByName('時間',FormatDateTime('HH:MM:SS',now));
FSysVars.SetValueByCaption('頁碼',intToStr(FPageNo));
FSysVars.SetValueByCaption('頁數',intToStr(FPageCount));
FSysVars.SetValueByCaption('行數',intToStr(FDetailRowCount));
FSysVars.SetValueByCaption('開發商','貴陽欣安博科技');
end;
procedure TPosReport.LoadFromFile(FileName: String);
var
FileFlag:Word;
PosFile:TFileStream;
I:integer;
RowCount:Integer;
tmpLine:String;
begin
PosFile:=TFileStream.Create(FileName,fmOpenRead);
try
with PosFile do
begin
Read(FileFlag,SizeOf(FileFlag));
if FileFlag<>FileVersion then
begin
Raise Exception.Create('打開的文件不是有效的小票文件或已不支持該版本!');
Exit;
end;
Read(FDriveMode,SizeOf(FDriveMode));
Read(FComName,SizeOf(FComName));
Read(FComByte,SizeOf(FComByte));
Read(FOpenBoxCode,SizeOf(FOpenBoxCode));
Read(FAutoOpenBox,SizeOf(FAutoOpenBox));
Read(FFootSpaceRow,SizeOf(FFootSpaceRow));
Read(FPageWidth,SizeOf(FPageWidth));
Read(FTitleRowCount,SizeOf(FTitleRowCount));
Read(FQuantityDiciaLength,SizeOf(FQuantityDiciaLength));
Read(FMoneyDiciaLength,SizeOf(FMoneyDiciaLength));
Read(RowCount,SizeOf(RowCount));
FReportLines.Clear;
For I:=0 to RowCount-1 do
begin
Read(tmpLine,SizeOf(tmpLine));
FReportLines.Add(tmpLine);
end;
end;
FOpenFlag:=True;
FFilePathName:=FileName;
Finally
PosFile.Free;
end;
end;
procedure TPosReport.Print;
begin
end;
procedure TPosReport.PrintPreview;
begin
end;
procedure TPosReport.SaveToFile(FileName: String);
var
FileFlag:Word;
PosFile:TFileStream;
I:integer;
RowCount:integer;
tmpLine:String;
begin
PosFile:=TFileStream.Create(FileName,fmOpenWrite Or fmCreate);
try
with PosFile do
begin
FileFlag:=FileVersion;
Write(PosFile,SizeOf(PosFile)); //保存文件版本類型
{保存小票參數}
Write(FDriveMode,SizeOf(FDriveMode));
Write(FComName,SizeOf(FComName));
Write(FComByte,SizeOf(FComByte));
Write(FOpenBoxCode,SizeOf(FOpenBoxCode));
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -