想不用设计报表而直接打印DBGrid中的内容,而又不想借用第三方插件,在delphi能不能直接编程实现??
解决方案 »
- GDI+写一段文字可以自动分情况用不同的字体吗?
- 如何获取外部程序中treeview的某个节点的值?
- checkbox能不能这样做?
- 想问问各位:COM+技术现在是不是已经过时? 如果是,现在的.net架构是用什么代替COM+的?
- IDtcpconnection组件,writeln()和writebuffer()有什么区别?不是那么简单哦
- 请问如何截获打开输入法的消息?
- 错误“JPEG error #60 ” 是什么意思??? 如有其他#42等等的错误哪里可以查到所有错误的具体说明?
- 如何用动态TQUERY动态生成TDECISION CUBE的字段及TDECISION GRAPH ???
- ##### Delphi中如何做出非模式窗口?(举例) #####
- 如何实现Trace Route功能?给个源码吧
- DELPHI7.0+SQL Server2000,如何对数据库中的日期进行模糊查询?
- adoconnection.create里参数应该传什么呀?我不想在form里加ado,而在手工代码里加ado
你可以将DBGrid的Canvas复制到Printer的Canvas上来打印:
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
if printdialog1.execute then
begin
printer.begindoc;
printer.canvas.draw(0,0,DBGrid1.Canvas);
printer.enddoc;
end;
end;
至于判断安装打印机,没做过,一般也没这个需要,没装就让它出错好了。真的要判断的话,从网上搜索一下吧,应该有答案。
var LeftValue,LeftValue2:integer;
aLabel:TQRLabel;
aText:TQRDbText;
i:integer;
begin
LeftValue:=0;
LeftValue2:=0;
with Form2 do
begin
QuickRep1.DataSet:=form1.ADOQuery1;
aLabel:=TQRLabel.create(Form2);
aLabel.parent:=TitleBand1;
aLabel.width:=400;
aLabel.Height:=TitleBand1.Height;
aLabel.Alignment:=taCenter;
aLabel.Caption:='xx报表';//报表标题。
for i:=0 to form1.DBGrid1.Columns.Count-1 do
begin
//字段标题
aLabel:=TQRLabel.create(Form2);
aLabel.parent:=ColumnHeaderBand1;
aLabel.AutoSize:=False;
aLabel.AutoStretch:=True;
aLabel.Width:=form1.DBGrid1.Columns[i].Width;
aLabel.Left:=LeftValue;
aLabel.Top:=10;
aLabel.Height:=ColumnHeaderBand1.Height;
aLabel.Alignment:=taLeftJustify;
aLabel.Caption:=form1.DBGrid1.Columns[i].DisplayName;;//字段标题名。
LeftValue:=LeftValue+form1.DBGrid1.Columns[i].Width;
//记录内容
aText:=TQRDbtext.Create(Form2);
aText.Parent:=form2.DetailBand1;
aText.DataSet:=QuickRep1.DataSet;
aText.AutoStretch:=True;
aText.Left:=LeftValue2;
aText.height:=form2.DetailBand1.Height;
aText.Top:=10;
aText.Width:=form1.DBGrid1.Columns[i].Width;
aText.Alignment:=taLeftJustify;
aText.DataField:=form3.DBGrid1.Columns[i].FieldName;
LeftValue2:=LeftValue2+form1.DBGrid1.Columns[i].Width;
end;
end;
end;
在QR的preview中也有打印机的设置