收据问题
我做了一个超市收银系统,我想点击打印按钮,就能打印dbgrid中的一些内容,例如产品名、单价、数量等等,就像到超市里拿到收据那种感觉,急
[解决办法]
F1,看帮助:
void __fastcall TForm1::Button1Click(TObject *Sender){ TPrinter *Prntr = Printer(); TRect r = Rect(200,200,Prntr->PageWidth - 200,Prntr->PageHeight- 200); Prntr->BeginDoc(); for( int i = 0; i < Memo1->Lines->Count; i++) Prntr->Canvas->TextOut(200,200 + (i * Prntr->Canvas->TextHeight(Memo1->Lines->Strings[i])), Memo1->Lines->Strings[i]); Prntr->Canvas->Brush->Color = clBlack; Prntr->Canvas->FrameRect(r); Prntr->EndDoc();}
[解决办法]
这个问题其实还是看你的需要,对于打印问题有两种解决方案1.使用打印控件,在BCB中是QuickReport控件,就像是打印报表一样2. 使用TPrinter ,自己在程序中进行控制。当然,还有第三种解决方案,就是使用插件
1.使用QuickReport
我跟你说下步骤,你自己再琢磨琢磨
1》是拖一个QuickReport的控件,在他的属性properties中,有个band属性,你如果要打印文件头啊什么的就都勾选上,如果不需要就把HasDetial给选上,这个HasDetial就是你打印的具体内容,也就是列的值
2》,你勾选上HasDetial后,就会在form的列表上显示一个detailband,在detailband中有个DataSet属性,你将这个属性的数据源和你在DBGrid中的数据源设置一直,接着你拖控件TQRDBText,你需要打印多少项就拖多少个TQRDBText,比如你要产品名、单价、数量就分别拖3个,并将这些TQRDBText都放在detailband下面,调整这些TQRDBText的位置,使他们整齐可见就可以了,主要是调整TQRDBText的left属性
3》对于每一个TQRDBText,都有一个DataField属性,这个属性是说从你数据源中取得的字段,比如在DBGrid中,你的产品名字段叫productName,你就将对应的DataField写上productName就可以,其余的类似
4》所有上面的建好之后,你只需要在button的程序中写上QuickReport->PreviewModal();//预览,或者QuickReport->Print();就可以
2.使用TPrinter类来自己画报表,我也按照顺序跟你说下
1》TPrinter *P=Printer(); //首先要定义
2》 P->BeginDoc(); //表示打印当前页,开始一项工作
3》 for(int =1;i<=??;i++) //需要打印多少,根据你自己的需要来判断
4》{P->Canvas->TextOutA(100,200,DBGrid->DataSource->DataSet->FieldByName("productName")->AsString);//这个是打印的内容,共有3个参数,第一是横坐标位置,第二个是纵坐标位置,第三个是数值,你可以根据你的DBGrid显示的内容来取值,具体需要你可以自己灵活修改
5》 if(DBGrid->DataSource->DataSet->Eof)
break;
else
DBGrid->DataSource->DataSet->Next(); //这个是打印循环跳出的条件
6》 P->EndDoc();打印完了,结束