关于打印超难报表,能解决者全送分...(200分)

F

fszdw

Unregistered / Unconfirmed
GUEST, unregistred user!
我需要按如下格式打印报表:
单位:#################### 电话:########
申请人:########### 号码:###########
凭单数##########份
一、编号共#######份
######## ######## ######## ######## ######## ######## ######## ########
共6行
二、编号共#######份
######## ######## ######## ######## ######## ######## ######## ########
共6行
三、编号共#######份
######## ######## ######## ######## ######## ######## ######## ########
合计######份
以上内容打印页面为A4纸,#号为需打印在A4纸上固定位置表中一个字段内容,共##份为打印数量统计
,合计##份为全部打印数量统计,如果符合第一点条件则打印在第一点,如果符合第二点条件则打在
第二点后,如果符合第三点则打在第三点后,符合第二、三点则分别打在第二、三点后。请高手指点
,万分感激!
 
好简单哟
直接往printer.canvas上写就都解决了
 
to pearl:
我的每一记录字段值有可能打在第一点或第二点或第三点后,请问怎样直接写,能详细
点吗?通过立即送上全部分数![?]
 
1、直接写Printer
2、生成到StringList中,灌到Word中去
 
这个简单,在word中做个模板文件,在需要打印的地方设置书签,然后在delphi中
把指定内容添加到书签处再打印就行.
 
用qr也可以,可能简单些.
 
根據條件產生三個視圖﹐再用報表工具加上三個子報表﹐每個子報表對應不同的視圖資料集﹐
如用REPORT BUILD做﹐這種報表很簡單﹐前不久做過類似報表。
 
同意atkins 的
 
to hbezwwl,在需要打印的地方设置书签??
具体怎样个做法,能给个例子吗,请指教.
 
使用Delphi-QReport的band和SubBand很容易做到。
 
delphi的qreport本身就能做的嘛
 
to 各位:
能说出具体的做法和程序代码吗?我需要实际解决问题的做法...,please help me! OK?
 
to hbezwwl:
我觉得你的办法可行,不知你能否说出具体做法吗?我的数据源是一个数据表.
 
qr,
在OnNeedData事件中处理打印数据,应该不很难的。
 
看来还是要自己慢慢想法试试才行了!
 
//Set the printer
FDevice : PChar;
FDriver : PChar;
FPort : PChar;
DeviceMode : THandle;
DevMode : PDeviceMode;
constructor TPrinterSettings.Create;
begin
inherited Create;
GetMem(FDevice, 128);
GetMem(FDriver, 128);
GetMem(FPort, 128);
FPaperSize := A4;
FPrinter := nil;
end;

function TPrinterSettings.Supported(Setting : integer) : boolean;
begin
if assigned(FPrinter) then
Supported := (DevMode^.dmFields and Setting) = Setting
else
Supported := false;
end;

procedure TPrinterSettings.SetField(aField : integer);
begin
DevMode^.dmFields := DevMode^.dmFields or aField;
end;

procedure TPrinterSettings.ApplySettings;
begin
FPrinter.GetPrinter(FDevice, FDriver, FPort, DeviceMode);
DevMode := GlobalLock(DeviceMode);
if PaperSize = Custom then
begin
SetField(dm_paperlength);
DevMode^.dmPaperLength := PaperLength;
SetField(dm_paperwidth);
DevMode^.dmPaperWidth := PaperWidth;
{$ifdef FANG}
if Supported(dm_formname) then
begin
SetField(dm_formname);
StrPCopy(DevMode^.dmFormName, PaperFormName);
end;
//fang 900327 end
{$endif}
end;

if FDuplex then
begin
SetField(dm_duplex);
DevMode^.dmDuplex := dmdup_horizontal;
end;

if Supported(dm_PaperSize) and (PaperSize <> Default) then
begin
SetField(dm_papersize);
{$ifdef FANG}
if GetVersion() < $80000000 then
begin
if GetPrnPaperSize(FDevice, PaperFormName, iPaperSize) then
DevMode^.dmPaperSize := iPaperSize
else
DevMode^.dmPaperSize := cQRPaperTranslate[PaperSize];
end
else
{$endif}
DevMode^.dmPaperSize := cQRPaperTranslate[PaperSize];
end;

SetField(dm_copies);
DevMode^.dmCopies := FCopies;
SetField(dm_defaultsource);
DevMode^.dmDefaultSource := (DevMode^.dmDefaultSource and 256) or cQRBinTranslate[OutputBin];
SetField(dm_orientation);
if Orientation=poPortrait then
DevMode^.dmOrientation := dmorient_portrait
else
DevMode^.dmOrientation := dmorient_landscape;
FPrinter.SetPrinter(FDevice, FDriver, FPort, DeviceMode);
GlobalUnlock(DeviceMode);
end;

////////////////////
DrawData(Printer.Canvas);
procedure DrawData(Canvas: TCanvas);
begin
//DrawWhatyouwnat;
end;
 
别人的问题讨论是我最好的学习!谢论坛全体人!
 

Similar threads

回复
0
查看
909
不得闲
D
回复
0
查看
812
DelphiTeacher的专栏
D
D
回复
0
查看
759
DelphiTeacher的专栏
D
D
回复
0
查看
748
DelphiTeacher的专栏
D
D
回复
0
查看
2K
DelphiTeacher的专栏
D
顶部