开发环境:Delphi 7,WinXP SP2。打印机:HP LaserJet 6L目标:打印分栏报表。procedure PrintGrids(Canvas :TCanvas);
begin
……//该例程里仅循环调用了Canvas.MoveTo();Canvas.LineTo();画表格线
end;procedure PrintItems(Canvas :TCanvas);
begin
……//该例程里仅循环调用了Windows.DrawText();画表格文字
end;procedure TCustomCell.Print;{TCustomCell是我写的一个报表控件}
begin
……;参数计算略
Printer.BeginDoc;
try
PrintGrids(Printer.Canvas);
PrintItems(Printer.Canvas);
finally
Printer.EndDoc;
end;
end;问题在于:1)用PrintGrids(Printer.Canvas);只画表格线完全正常;
2)用PrintItems(Printer.Canvas);只画表格文字完全正常;
3)先画表格文字,再画表格线,完全正常。也就是这样:
procedure TCustomCell.Print;{TCustomCell是我写的一个报表控件}
begin
……;参数计算略
Printer.BeginDoc;
try
PrintItems(Printer.Canvas);
PrintGrids(Printer.Canvas);
finally
Printer.EndDoc;
end;
end;
4)但是先画表格线,再画表格文字,打印机会死掉!
5)把例程改为下面的仅画一条线,打印机同样会死掉!也就是说只要先画了线,打印机就要死掉。
procedure TCustomCell.Print;{TCustomCell是我写的一个报表控件}
begin
……;参数计算略
Printer.BeginDoc;
try
Printer.Canvas.MoveTo();
Printer.Canvas.LineTo();
PrintItems(Printer.Canvas);
finally
Printer.EndDoc;
end;
end;
6)以上代码中,表格每页打印44行8列;若增加行高,每页只打印22行8列(表格外框矩形定位完全一样),无论先画格线还是先画文字,完全正常;这个问题真奇怪,是什么原因呢?
begin
……//该例程里仅循环调用了Canvas.MoveTo();Canvas.LineTo();画表格线
end;procedure PrintItems(Canvas :TCanvas);
begin
……//该例程里仅循环调用了Windows.DrawText();画表格文字
end;procedure TCustomCell.Print;{TCustomCell是我写的一个报表控件}
begin
……;参数计算略
Printer.BeginDoc;
try
PrintGrids(Printer.Canvas);
PrintItems(Printer.Canvas);
finally
Printer.EndDoc;
end;
end;问题在于:1)用PrintGrids(Printer.Canvas);只画表格线完全正常;
2)用PrintItems(Printer.Canvas);只画表格文字完全正常;
3)先画表格文字,再画表格线,完全正常。也就是这样:
procedure TCustomCell.Print;{TCustomCell是我写的一个报表控件}
begin
……;参数计算略
Printer.BeginDoc;
try
PrintItems(Printer.Canvas);
PrintGrids(Printer.Canvas);
finally
Printer.EndDoc;
end;
end;
4)但是先画表格线,再画表格文字,打印机会死掉!
5)把例程改为下面的仅画一条线,打印机同样会死掉!也就是说只要先画了线,打印机就要死掉。
procedure TCustomCell.Print;{TCustomCell是我写的一个报表控件}
begin
……;参数计算略
Printer.BeginDoc;
try
Printer.Canvas.MoveTo();
Printer.Canvas.LineTo();
PrintItems(Printer.Canvas);
finally
Printer.EndDoc;
end;
end;
6)以上代码中,表格每页打印44行8列;若增加行高,每页只打印22行8列(表格外框矩形定位完全一样),无论先画格线还是先画文字,完全正常;这个问题真奇怪,是什么原因呢?
俺用D2007的~
建议你深层Debug卡那可能吧
不過用QRT打印沒有問題!