用PrintDialog!不行的话用rave
谢谢!!!
谢谢!!!
解决方案 »
- 帮我估价,开发出这样的项目,我该向对方要价多少钱?
- 关于窗体继承,和普通的类继承是否一样?
- 我想把多个Clientdataset.data(olevariant类型)转成一个xml包,再在后端又把xml包拆分成多个olevariant,应该怎样做呢?
- 寻找译本好书
- 急!在线等。高分求TidSoapServer, TIdSOAPServerHTTP等组件的使用说明。
- 搞了整天都搞不明白,请各位赐教。
- ADOQuery和Datasource的问题,急 请大家帮忙!!
- 在websnap技术中,当我想按下“保存”按纽时如何跳出一个象showmessage()这样的对话框,询问“是”,“否”,或者检查出哪些不符合数据规
- 一个有关sql语句的问题??
- 有没有数据库格式转换工具?
- 推荐一个编程软件,主要是对学PASCAL的朋友
- 网络编程经验的高手看进来,请教问题(极具挑战性,请求帮助)
或者使用FastReport的frPrintGrid控件直接打印!
我能够有选择性的打印我需要的数据吗?
比如:我 如何实现:在dbgrid 中前面 有一个 选择框,
打印的时候只打印我选择的数据呢?
谢谢,请大家给 点思路
通过一些辅助程序,可以实现由选择的打印,首先动态生成一个dbgrid,与将要打印的dbgrid
要有相同的设置,包括列标题和datasourse,然后将要打印的列的visible:=true,不打印的visibel:=fasle,将frprintgrid的dbgrid属性设为动态生成的dbgrid,就行了
我采用的,效果还可以
跳过运行时出错:File not found: 'FR_DSet.dcu'
用rave在做表时,由于没有SQL,Sql查询语句这样写”Select * from不起作用,也作不成。
这个Delphi 7自己就活不了!!!
var
pl,pr,pt,pb:integer;//页边距
px,py:integer;//打印机分辨率
ps:integer;//打印机与显示器分辨率之比
lh:integer;//行高
i:integer;
x,y:integer;//打印坐标
rowb,colb:integer; //行距、行距
begin
//初始化页面
pl:=spinedit1.Value;
pr:=spinedit2.Value;
pt:=spinedit3.Value;
pb:=spinedit4.Value;
rowb:=spinedit6.Value;//行距
colb:=spinedit7.Value;//列距
//将获得的打印机分辨率由厘米转换为英寸
px:=Trunc(GetDeviceCaps(Printer.Handle,LOGPIXELSX)/2.54);
py:=Trunc(GetDeviceCaps(Printer.Handle,LOGPIXELSY)/2.54);
//将屏幕分辨率转换为打印机的比例
ps:=Trunc(GetDeviceCaps(Printer.Handle,LOGPIXELSX)
/Screen.PixelsPerInch);
//设置打印方向
if combobox1.Text='横向打印' then
printer.Orientation:=poPortrait;
else
printer.Orientation:=poLandscape;
//获得打印的字体和大小
printer.Canvas.Font.Name:=combobox2.Text;
printer.canvas.Font.Size:=spinedit5.Value;
printer.canvas.Font.Color:=clred;
printer.Canvas.Pen.Color:=clblue;
//设置行高
lh:=printer.canvas.textheight(dbgrid1.Font.Name);
//打印的起始位置(打印机画布上的位置)
x:=PX*pl;
y:=PY*pt;
//打印DBGrid1中的内容
if (table1.Active=true) and (table1.RecordCount>0) then
begin
//设置一打印机任务标题
printer.Title:='DBGrid内容打印';
with printer do
begin
BeginDoc;
table1.First;
while not table1.Eof do
begin
for i:=0 to DBGrid1.FieldCount-1 do
begin
//设定打印的宽度
if (x+DBGrid1.Columns.Items[i].Width*ps)
<=(PageWidth-ps*pr) then
begin
//画出表格线
Printer.Canvas.Rectangle(x,y,x+dbgrid1.Columns.Items[i].Width*ps,y+lh);
//如果为第一行时,打印DBGrid1确的标题
if y=PY*pt then
Canvas.TextOut(x+rowb,y+colb,
DBGrid1.Columns[i].Title.Caption)
else
//其它行,打印每行的内容
Printer.Canvas.TextOut(x+rowb,y+colb,
DBGrid1.Fields[i].asString);
end;
//下一列的横坐标,下一列的纵坐标不变
x:=x+dbgrid1.Columns.Items[i].Width*ps;
end;
//打印下一记录
if not (y=py*pt) then
table1.next;
x:=px*pl; //打印下一行时,横坐标回到行首
y:=y+lh;
//打印满一页时,新建一页
if (y+lh)>(PageHeight-py*pb) then
begin
NewPage;
x:=px*pl;
y:=py*pt;
end;
end;
EndDoc;
end;
table1.First;//回到DBGrid1首行
Application.MessageBox('已打印完成','打印',32);
end;
end;procedure TForm1.FormActivate(Sender: TObject);
begin
//获得打印可选字体,并设置初始字体为DBGrid1的字体,字号
combobox2.Items:=printer.Fonts;
combobox2.Text:=dbgrid1.Font.Name;
spinedit5.value:=dbgrid1.Font.Size;
table1.DatabaseName:=ExtractFilePath(Application.ExeName);
table1.open;
end;
end.