WEB开发网
开发学院软件开发Delphi DBGrid使用全书(二) 阅读

DBGrid使用全书(二)

 2006-02-04 13:54:53 来源:WEB开发网   
核心提示:打印 TDBGrid内容方法1PRocedure PrintDbGrid(DataSet:TDataSet;DbGrid:TDbGrid;Title:String);varPointX,PointY:integer; ScreenX:integer; i,lx,ly:integer; px1,py1,px2,py2:i
打印 TDBGrid内容----方法1
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;

Tags:DBGrid 使用 全书

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接