📄 u_reportprint.~pas
字号:
unit U_ReportPrint;
interface
uses windows,Controls,DB,Dialogs,Forms,Variants,SysUtils,
ppCTMain, ppReport, ppDevice, myChkBox,ppDsgner,
ppSubRpt, ppRegion, ppBarCod, ppCtrls, ppRichTx, ppMemo, ppVar,
ppStrtch, ppPrnabl, ppClass, ppBands, ppCache, ppEndUsr, ppProd, ppComm,
ppRelatv, ppDB, ppDBPipe, ppTypes,ppChrtDp,raIDE,daIDE,ppViewr;
type
TJLSClass= class
public
procedure PreviewFormCreate(Sender: TObject);
end;
Procedure ReportPrint(WinCtl: TWinControl;
Data:Array of TDataSource;
DSTemplate: TDataSource;
RptName: String;
RBegin: TppRangeBeginType;
REnd: TppRangeEndType;
RDevice: String;Print:boolean=true); StdCall;
implementation
Procedure ReportPrint(WinCtl: TWinControl;
Data:Array of TDataSource;
DSTemplate: TDataSource;
RptName: String;
RBegin: TppRangeBeginType;
REnd: TppRangeEndType;
RDevice: String;Print:boolean=true); StdCall;
var
pl:Array of TppDBPipeline;
plTemplate: TppDBPipeline;
Rpt: TppReport;
Designer: TppDesigner;
i,HighBounds:integer;
HasData:Boolean;
JLSClass:TJLSClass;
begin
Rpt:=TppReport.Create(WinCtl);
Rpt.Units:=utMillimeters;
Designer:=nil;
if Not DSTemplate.DataSet.Active then
DSTemplate.DataSet.Open;
HasData:=DSTemplate.DataSet.Locate('name', VarArrayOf([RptName]), [loCaseInsensitive]);
if Not HasData then
begin
if Print then
begin
MessageDlg('指定报表不存在!',mtInformation, [mbOk],0);
Exit;
end
else
begin
if MessageDlg('指定报表不存在,你要新建吗?',mtInformation, [mbOk, mbCancel],0)<>mrOk then
Exit;
end;
end;
HighBounds:=High(Data);
SetLength(pl,HighBounds+1);
try
for i:=0 to HighBounds do
begin
pl[i]:=TppDBPipeline.Create(WinCtl);
pl[i].Name:='pl'+IntToStr(i);
pl[i].Visible:=true;
pl[i].DataSource:=Data[i];
Case i of
0:begin
pl[i].UserName:='Data';
pl[i].RangeBegin:=RBegin;
pl[i].RangeEnd:=REnd;
end;
1:pl[i].UserName:='SubData';
else pl[i].UserName:='Data'+Data[i].Name ;
end;
pl[i].AutoCreateFields:=true;
end;
Rpt.DataPipeline:=pl[0];
plTemplate:=TppDBPipeline.Create(WinCtl);
plTemplate.UserName:='Template';
//plTemplate.AutoCreateFields:=true; {cgh 2002-07-19} ////////////
plTemplate.DataSource:=DSTemplate;
Rpt.SavePrinterSetup:=true;
Rpt.Template.SaveTo:=stDatabase;
Rpt.Template.Format:=ftASCII;
// Rpt.Units:=utMillimeters;
Rpt.AllowPrintToArchive:=true;
Rpt.AllowPrintToFile:=true;
Rpt.Template.DatabaseSettings.DataPipeline:=plTemplate;
Rpt.Template.DatabaseSettings.NameField:='Name';
Rpt.Template.DatabaseSettings.TemplateField:='Template';
Rpt.Template.DatabaseSettings.Name:=RptName;
if Rpt.PrinterSetup.PaperNames.IndexOf('A4')<>-1 then
Rpt.PrinterSetup.PaperName:='A4';
if HasData then Rpt.Template.LoadFromDatabase;
if RDevice = '' then
Rpt.DeviceType:='dtScreen'
else
Rpt.DeviceType:=RDevice;
Rpt.OnPreviewFormCreate:=JLSClass.PreviewFormCreate;
if Print then
Rpt.Print
else
begin
Designer:=TppDesigner.Create(WinCtl);
Designer.Caption:=Rpt.Template.DatabaseSettings.Name;
Designer.AllowDataSettingsChange:=true;
Designer.AllowSaveToFile:=true;
Designer.DataSettings.AllowEditSQL:=true;
Designer.DataSettings.DatabaseType:=dtMSSQLServer;
Designer.DataSettings.SQLType:=sqSQL1;
Designer.DataSettings.UseDataDictionary:=true;
Designer.ShowData:=true;
Designer.Report:=Rpt;
Designer.ShowModal;
end;
finally
Rpt.Free;
DsTemplate.DataSet.AfterInsert:=nil;
if Assigned(Designer) then
Designer.Free;
plTemplate.Free;
for i:=high(pl) to 0 do
pl[i].Free;
end;
end;
{ TJLSClass }
procedure TJLSClass.PreviewFormCreate(Sender: TObject);
begin
TppViewer(TppReport(Sender).PreviewForm.Viewer).ZoomSetting := zs100Percent;
TppReport(Sender).PreviewForm.WindowState:=wsMaximized;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -