|
 |
栏目导栏 |
|
| |
|
|
|
|
 |
资料搜索 |
|
| |
|
|
|
|
 |
热门文章 |
|
| |
|
|
|
|
 |
最新文章 |
|
| |
|
|
|
| |
| |
|
|
|
|
打印TDBGrid中的内容,请看如下代码:CDSLinux联盟 CDSLinux联盟
CDSLinux联盟 procedure PrintDbGrid(DataSet:TDataSet;DbGrid:TDbGrid;Title:String);CDSLinux联盟 varCDSLinux联盟 PointX,PointY:integer;CDSLinux联盟 ScreenX:integer;CDSLinux联盟 i,lx,ly:integer;CDSLinux联盟 px1,py1,px2,py2:integer;CDSLinux联盟 RowPerPage,RowPrinted:integer;CDSLinux联盟 ScaleX:Real;CDSLinux联盟 THeight:integer;CDSLinux联盟 TitleWidth:integer;CDSLinux联盟 SumWidth:integer;CDSLinux联盟 PageCount:integer;CDSLinux联盟 SpaceX,SpaceY:integer;CDSLinux联盟 RowCount:integer;CDSLinux联盟 beginCDSLinux联盟 PointX:=Round(GetDeviceCaps(printer.Handle,LOGPIXELSX)/2.54);CDSLinux联盟 PointY:=Round(GetDeviceCaps(printer.Handle,LOGPIXELSY)/2.54);CDSLinux联盟 ScreenX:=Round(Screen.PixelsPerInch/2.54);CDSLinux联盟 ScaleX:=PointX/ScreenX;CDSLinux联盟 RowPrinted:=0;CDSLinux联盟 SumWidth:=0;CDSLinux联盟 printer.BeginDoc;CDSLinux联盟 With Printer.Canvas doCDSLinux联盟 beginCDSLinux联盟 DataSet.DisableControls;CDSLinux联盟 DataSet.First ;CDSLinux联盟 THeight:=Round(TextHeight('我')*1.5);//设定每行高度为字符高的1.5倍CDSLinux联盟 SpaceY:= Round(TextHeight('我')/4);CDSLinux联盟 SpaceX:=Round(TextWidth('我')/4);CDSLinux联盟 RowPerpage:=Round((printer.PageHeight-5*PointY)/THeight); //上下边缘各2厘米CDSLinux联盟 ly:=2*PointY;CDSLinux联盟 PageCount:=0;CDSLinux联盟 while not DataSet.Eof doCDSLinux联盟 beginCDSLinux联盟 if (RowPrinted=RowPerPage) or (RowPrinted=0) thenCDSLinux联盟 beginCDSLinux联盟 if RowPrinted<>0 thenCDSLinux联盟 Printer.NewPage;CDSLinux联盟 RowPrinted:=0;CDSLinux联盟 PageCount:=PageCount+1;CDSLinux联盟 Font.Name:='宋体';CDSLinux联盟 Font.size:=16;CDSLinux联盟 Font.Style:=Font.Style+[fsBold];CDSLinux联盟 lx:=Round((Printer.PageWidth-TextWidth(Title))/2);CDSLinux联盟 ly:=2*PointY;CDSLinux联盟 TextOut(lx,ly,Title);CDSLinux联盟 Font.Size:=11;CDSLinux联盟 Font.Style:=Font.Style-[fsBold];CDSLinux联盟 lx:=Printer.PageWidth-5*PointX;CDSLinux联盟 ly:=Round(2*PointY+0.2*PointY);CDSLinux联盟 if RowPerPage*PageCount>DataSet.RecordCount thenCDSLinux联盟 RowCount:=DataSet.RecordCountCDSLinux联盟 elseCDSLinux联盟 RowCount:=RowPerPage*PageCount;CDSLinux联盟 TextOut(lx,ly,'第'+IntToStr(RowPerPage*(PageCount-1)+1)+'-'+IntToStr(RowCount)+'条,共'+IntToStr(DataSet.RecordCount)+'条');CDSLinux联盟 lx:=2*PointX;CDSLinux联盟 ly:=ly+THeight*2;CDSLinux联盟 py1:=ly-SpaceY;CDSLinux联盟 if RowCount=DataSet.RecordCount thenCDSLinux联盟 py2:=py1+THeight*(RowCount-RowPerPage*(PageCount-1)+1)CDSLinux联盟 elseCDSLinux联盟 py2:=py1+THeight*(RowPerPage+1);CDSLinux联盟 SumWidth:=lx;CDSLinux联盟 for i:=0 to DBGrid.Columns.Count-1 doCDSLinux联盟 beginCDSLinux联盟 px1:=SumWidth-SpaceX;CDSLinux联盟 px2:=SumWidth;CDSLinux联盟 MoveTo(px1,py1);CDSLinux联盟 LineTo(px2,py2);CDSLinux联盟 TitleWidth:=TextWidth(DBGrid.Columns[i].Title.Caption);CDSLinux联盟 lx:=Round(SumWidth+(DBGrid.Columns[i].width*scaleX-titleWidth)/2);CDSLinux联盟 TextOut(lx,ly,DBGrid.Columns[i].Title.Caption);CDSLinux联盟 SumWidth:=Round(SumWidth+DBGrid.Columns[i].width*scaleX)+SpaceX*2;CDSLinux联盟 end;CDSLinux联盟 px1:=SumWidth; //画最后一条竖线CDSLinux联盟 px2:=SumWidth;CDSLinux联盟 MoveTo(px1,py1);CDSLinux联盟 LineTo(px2,py2);CDSLinux联盟 px1:=2*PointX; //画第一条横线CDSLinux联盟 px2:=SumWidth;CDSLinux联盟 py1:=ly-SpaceY;CDSLinux联盟 py2:=ly-SpaceY;CDSLinux联盟 MoveTo(px1,py1);CDSLinux联盟 LineTo(px2,py2);CDSLinux联盟 py1:=py1+THeight;CDSLinux联盟 py2:=py2+THeight;CDSLinux联盟 MoveTo(px1,py1);CDSLinux联盟 LineTo(px2,py2);CDSLinux联盟 end;CDSLinux联盟 lx:=2*PointX;CDSLinux联盟 ly:=ly+THeight;CDSLinux联盟 px1:=lx;CDSLinux联盟 px2:=SumWidth;CDSLinux联盟 py1:=ly-SpaceY+THeight;CDSLinux联盟 py2:=ly-SpaceY+THeight;CDSLinux联盟 MoveTo(px1,py1);CDSLinux联盟 LineTo(px2,py2);CDSLinux联盟 for i:=0 to DBGrid.Columns.Count-1 doCDSLinux联盟 beginCDSLinux联盟 TextOut(lx,ly,DataSet.FieldByname(DBGrid.Columns[i].Fieldname).AsString);CDSLinux联盟 lx:=Round(lx+DBGrid.Columns[i].width*ScaleX+SpaceX*2);CDSLinux联盟 end;CDSLinux联盟 RowPrinted:=RowPrinted+1;CDSLinux联盟 DataSet.next;CDSLinux联盟 end;CDSLinux联盟 DataSet.first;CDSLinux联盟 DataSet.EnableControls;CDSLinux联盟 end;CDSLinux联盟 printer.EndDoc;CDSLinux联盟 end;CDSLinux联盟
|
CDSLinux联盟 CDSLinux联盟 打印StringGrid内容CDSLinux联盟 CDSLinux联盟
CDSLinux联盟 Procedure TACDListerMain.PrintTable;CDSLinux联盟 VarCDSLinux联盟 margins: TRect;CDSLinux联盟 spacing: Integer;CDSLinux联盟 Cols: TList;CDSLinux联盟 Dlg: TPrintProgressDlg;CDSLinux联盟 CDSLinux联盟 Procedure SetColumnWidth;CDSLinux联盟 VarCDSLinux联盟 i, k, w: Integer;CDSLinux联盟 BeginCDSLinux联盟 Printer.Canvas.Font.Style := [ fsBold ];CDSLinux联盟 For i := 0 To Pred( Grid.ColCount ) DoCDSLinux联盟 CDSLinux联盟 Cols.Add( Pointer( Printer.Canvas.TextWidth( Grid.Cells[ i,0 ] )));CDSLinux联盟 CDSLinux联盟 Printer.Canvas.Font.Style := [];CDSLinux联盟 For i := 1 To Pred( Grid.RowCount ) DoCDSLinux联盟 For k := 0 To Pred( Grid.ColCount ) Do BeginCDSLinux联盟 w:= Printer.Canvas.TextWidth( Grid.Cells[ k, i ] );CDSLinux联盟 If w > Integer( Cols[ k ] ) ThenCDSLinux联盟 Cols[ k ] := Pointer( w );CDSLinux联盟 End; { For }CDSLinux联盟 CDSLinux联盟 w := 2 * Printer.Canvas.Font.PixelsPerInch div 3;CDSLinux联盟 margins :=CDSLinux联盟 Rect( w, w, Printer.PageWidth-w, Printer.PageHeight - w );CDSLinux联盟 spacing := Printer.Canvas.Font.PixelsPerInch div 10;CDSLinux联盟 CDSLinux联盟 w := 0;CDSLinux联盟 For i := 0 To Pred(cols.Count) DoCDSLinux联盟 w := w + Integer( cols[ i ] ) + spacing;CDSLinux联盟 w := w - spacing;CDSLinux联盟 If w > (margins.right-margins.left ) Then BeginCDSLinux联盟 w := w - (margins.right-margins.left );CDSLinux联盟 cols[ cols.Count-2 ] :=CDSLinux联盟 Pointer( Integer( cols[ cols.Count-2 ] ) - w );CDSLinux联盟 End; { If }CDSLinux联盟 CDSLinux联盟 w:= 0;CDSLinux联盟 For i := 0 To Pred(cols.Count) DoCDSLinux联盟 w := w + Integer( cols[ i ] ) + spacing;CDSLinux联盟 margins.right := w - spacing + margins.left;CDSLinux联盟 End; { SetColumnWidth }CDSLinux联盟 CDSLinux联盟 Procedure DoPrint;CDSLinux联盟 VarCDSLinux联盟 i: Integer;CDSLinux联盟 y: Integer;CDSLinux联盟 Procedure DoLine(lineno: Integer);CDSLinux联盟 VarCDSLinux联盟 x, n: Integer;CDSLinux联盟 r: TRect;CDSLinux联盟 th: Integer;CDSLinux联盟 BeginCDSLinux联盟 If Length(Grid.Cells[0,lineno]) = 0 Then Exit;CDSLinux联盟 CDSLinux联盟 x:= margins.left;CDSLinux联盟 With Printer.Canvas Do BeginCDSLinux联盟 th := TextHeight( '膟' );CDSLinux联盟 For n := 0 To Pred( Cols.Count ) Do BeginCDSLinux联盟 r := Rect( 0, 0, Integer(Cols[ n ]), th);CDSLinux联盟 OffsetRect( r, x, y );CDSLinux联盟 TextRect( r, x, y, Grid.Cells[ n, lineno ] );CDSLinux联盟 x := r.right + spacing;CDSLinux联盟 End; { For }CDSLinux联盟 End; { With }CDSLinux联盟 y := y + th;CDSLinux联盟 End; { DoLine }CDSLinux联盟 Procedure DoHeader;CDSLinux联盟 BeginCDSLinux联盟 y:= margins.top;CDSLinux联盟 With Printer.Canvas Do BeginCDSLinux联盟 Font.Style := [ fsBold ];CDSLinux联盟 DoLine( 0 );CDSLinux联盟 Pen.Width := Font.PixelsPerInch div 72;CDSLinux联盟 Pen.Color := clBlack;CDSLinux联盟 MoveTo( margins.left, y );CDSLinux联盟 LineTo( margins.right, y );CDSLinux联盟 Inc( y, 2 * Pen.Width );CDSLinux联盟 Font.Style := [ ];CDSLinux联盟 End; { With }CDSLinux联盟 End; { DoHeader }CDSLinux联盟 BeginCDSLinux联盟 y:= 0;CDSLinux联盟 For i := 1 To Pred( Grid.RowCount ) Do BeginCDSLinux联盟 Dlg.Progress( i );CDSLinux联盟 Application.ProcessMessages;CDSLinux联盟 If FPrintAborted Then Exit;CDSLinux联盟 CDSLinux联盟 If y = 0 ThenCDSLinux联盟 DoHeader;CDSLinux联盟 DoLine( i );CDSLinux联盟 If y >= margins.bottom Then BeginCDSLinux联盟 Printer.NewPage;CDSLinux联盟 y:= 0;CDSLinux联盟 End; { If }CDSLinux联盟 End; { For }CDSLinux联盟 End; { DoPrint }CDSLinux联盟 CDSLinux联盟 BeginCDSLinux联盟 FPrintAborted := False;CDSLinux联盟 Dlg := TPrintProgressDlg.Create( Application );CDSLinux联盟 With Dlg DoCDSLinux联盟 tryCDSLinux联盟 OnAbort := PrintAborted;CDSLinux联盟 Display( cPrintPreparation );CDSLinux联盟 SetProgressRange( 0, Grid.RowCount );CDSLinux联盟 Show;CDSLinux联盟 Application.ProcessMessages;CDSLinux联盟 Printer.Orientation := poLandscape;CDSLinux联盟 CDSLinux联盟 Printer.BeginDoc;CDSLinux联盟 Cols:= Nil;CDSLinux联盟 tryCDSLinux联盟 Cols:= TLIst.Create;CDSLinux联盟 Printer.Canvas.Font.Assign( Grid.Font );CDSLinux联盟 SetColumnWidth;CDSLinux联盟 Display( cPrintProceeding );CDSLinux联盟 Application.ProcessMessages;CDSLinux联盟 DoPrint;CDSLinux联盟 finallyCDSLinux联盟 Cols.Free;CDSLinux联盟 If FPrintAborted ThenCDSLinux联盟 Printer.AbortCDSLinux联盟 ElseCDSLinux联盟 Printer.EndDoc;CDSLinux联盟 end;CDSLinux联盟 finallyCDSLinux联盟 Close;CDSLinux联盟 End; { With }CDSLinux联盟 End; { TACDListerMain.PrintTable }CDSLinux联盟
|
Linux联盟收集整理 ,转贴请标明原始链接,如有任何疑问欢迎来本站Linux论坛讨论 |
|
|
|
|
|