printer打印代码设计 |
缺席
|
ntjrr
高階會員 發表:240 回覆:312 積分:110 註冊:2005-04-24 發送簡訊給我 |
我在网上得到一个打印DBGRID内容的控件比较有用,如下:
procedure PrintDbGrid(DataSet:TDataSet;DbGrid:TDbGrid;Title:String); var PointX,PointY:integer; ScreenX:integer; i,lx,ly:integer; px1,py1,px2,py2:integer; RowPerPage,RowPrinted:integer; ScaleX:Real; THeight:integer; TitleWidth:integer; SumWidth:integer; PageCount:integer; SpaceX,SpaceY:integer; RowCount:integer; begin PointX:=Round(GetDeviceCaps(printer.Handle,LOGPIXELSX)/2.54); PointY:=Round(GetDeviceCaps(printer.Handle,LOGPIXELSY)/2.54); ScreenX:=Round(Screen.PixelsPerInch/2.54); ScaleX:=PointX/ScreenX; RowPrinted:=0; SumWidth:=0; printer.BeginDoc; With Printer.Canvas do begin DataSet.DisableControls; DataSet.First ; THeight:=Round(TextHeight('我')*1.5);//设定每行高度为字符高的1.5倍 SpaceY:= Round(TextHeight('我')/4); SpaceX:=Round(TextWidth('我')/4); RowPerpage:=Round((printer.PageHeight-5*PointY)/THeight); //上下边缘各2厘米 ly:=2*PointY; PageCount:=0; while not DataSet.Eof do begin if (RowPrinted=RowPerPage) or (RowPrinted=0) then begin if RowPrinted<>0 then Printer.NewPage; RowPrinted:=0; PageCount:=PageCount 1; Font.Name:='宋体'; Font.size:=16; Font.Style:=Font.Style [fsBold]; lx:=Round((Printer.PageWidth-TextWidth(Title))/2); ly:=2*PointY; TextOut(lx,ly,Title); Font.Size:=11; Font.Style:=Font.Style-[fsBold]; lx:=Printer.PageWidth-5*PointX; ly:=Round(2*PointY 0.2*PointY); if RowPerPage*PageCount>DataSet.RecordCount then RowCount:=DataSet.RecordCount else RowCount:=RowPerPage*PageCount; TextOut(lx,ly,'第' IntToStr(RowPerPage*(PageCount-1) 1) '-' IntToStr(RowCount) '条,共' IntToStr(DataSet.RecordCount) '条'); lx:=2*PointX; ly:=ly THeight*2; py1:=ly-SpaceY; if RowCount=DataSet.RecordCount then py2:=py1 THeight*(RowCount-RowPerPage*(PageCount-1) 1) else py2:=py1 THeight*(RowPerPage 1); SumWidth:=lx; for i:=0 to DBGrid.Columns.Count-1 do begin px1:=SumWidth-SpaceX; px2:=SumWidth; MoveTo(px1,py1); LineTo(px2,py2); TitleWidth:=TextWidth(DBGrid.Columns[i].Title.Caption); lx:=Round(SumWidth (DBGrid.Columns[i].width*scaleX-titleWidth)/2); TextOut(lx,ly,DBGrid.Columns[i].Title.Caption); SumWidth:=Round(SumWidth DBGrid.Columns[i].width*scaleX) SpaceX*2; end; px1:=SumWidth; //画最后一条竖线 px2:=SumWidth; MoveTo(px1,py1); LineTo(px2,py2); px1:=2*PointX; //画第一条横线 px2:=SumWidth; py1:=ly-SpaceY; py2:=ly-SpaceY; MoveTo(px1,py1); LineTo(px2,py2); py1:=py1 THeight; py2:=py2 THeight; MoveTo(px1,py1); LineTo(px2,py2); end; lx:=2*PointX; ly:=ly THeight; px1:=lx; px2:=SumWidth; py1:=ly-SpaceY THeight; py2:=ly-SpaceY THeight; MoveTo(px1,py1); LineTo(px2,py2); for i:=0 to DBGrid.Columns.Count-1 do begin TextOut(lx,ly,DataSet.FieldByname(DBGrid.Columns[i].Fieldname).AsString); lx:=Round(lx DBGrid.Columns[i].width*ScaleX SpaceX*2); end; RowPrinted:=RowPrinted 1; DataSet.next; end; DataSet.first; DataSet.EnableControls; end; printer.EndDoc; end;上述代码我想改动一下,但因为小弟对printer用法刚刚接触,不太熟悉。 1。我想默认就为横向打印。 2。想在左下角加一个日期,这是从一个变量传来的,变量的值等于 datetostr(DateTimePicker1.Date);对了这是两个日期,也就是从哪一天到哪一天,中间加个‘到‘字或者加个符号‘--’就行了。谢谢!
------
我的编程起步于ktop,我将永远支持ktop |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |