打印内容写在报表中,使用frRptDesign: TfrReport、frPreview1: TfrPreview;两个控件。
在窗体上放一个frPreview1,
1.报表模板首先从文件加载frRptDesign.LoadFromFile(BarCodeFile);
2.动态赋值:
var
frview: TfrView;
TemplateFile: string;
begin
frRptDesign.LoadFromFile(TemplateFile);//从模版文件加载报表框架
frview := frRptDesign.FindObject('StudentName');
if frview <> nil then
frview.memo.Text := 'chinmusam';
.....
frRptDesign.Preview := frPreview1;//指定为窗体界面上的显示区域
frRptDesign.ShowReport;
if bAssignPrinter then //如果指定了打印机
begin
SetDefaultPrinter(IniConfig.DefaultPrinter);//从配置文件中读取指定的网络打印机名称 一般形如: \\it-02993\HPJ200
end;
if frRptDesign.ChangePrinter(Printer.PrinterIndex, Printer.Printers.IndexOf(IniConfig.DefaultPrinter)) then //打印时,实时调配为指定的打印机进行打印
for i := 1 to iCopy do//打印的份数
frRptDesign.Preview.Print; //即可将报表内容直接送往打印机(界面并不显示报表的内容)
end;
附上SetDefaultPrinter方法:
uses printers, Windows
procedure SetDefaultPrinter(sPrinter: string);
var
LocalPrinter: tprinter;
Device: array[0..255] of Char;
Driver: array[0..255] of char;
Port: array[0..255] of char;
s : array[0..255] of Char;
hDeviceMode: THandle;
begin
if Trim(sPrinter) <> '' then
begin
LocalPrinter := TPrinter.Create;
try
if LocalPrinter.Printers.IndexOf(sPrinter) >-1 then
begin
LocalPrinter.PrinterIndex := LocalPrinter.Printers.IndexOf(sPrinter);
LocalPrinter.GetPrinter(Device, Driver, Port, hDeviceMode);
StrCopy (s, Device);
StrCat (s, ',');
StrCat (s, Driver);
StrCat (s, ',');
StrCat (s, Port);
WriteProfileString('windows', 'device', s);
StrCopy (s, 'windows');
SendMessage (HWND_BROADCAST, WM_WININICHANGE, 0, LongInt(@s));
end;
finally
FreeAndNil(LocalPrinter);
end;
end;
end;