| Blog信息 |
|
blog名称:注册会计师(注会)练习软件 日志总数:398 评论数量:116 留言数量:27 访问次数:3284633 建立时间:2005年6月6日 |

| |
|
今天将一段c#的datagrid打印类"翻译"成了delphi for net ,并支持eco 软件技术
吕向阳 发表于 2006/5/7 20:30:11 |
| [borland eco delphi datagrid 打印 ]
想以后省点事,今天花点力,做了一回二道贩子,将一个c#代码变了过来.不过,还没有网格线.
unit printdatagird;
interface uses System.Collections, system.windows.Forms , System.Drawing,System.Drawing.Printing,System.Data , System.ComponentModel , Borland.Eco.Windows.Forms, Borland.Eco.WinForm, Borland.Eco.Handles ;
type DataGridPrinter= class private { Private Declarations } datagrid:datagrid; PrintDocument1: printDocument; PageSetupDialog: pageSetupDialog; PrintPreviewDialog:printPreviewDialog; procedure printDocument_PrintPage( sender:system.object;e:System.Drawing.Printing.PrintPageEventArgs ); function GetPrintDocument():PrintDocument;
public constructor Create(datagrid:datagrid) ; procedure print(); end;
implementation
///---------------
procedure DataGridPrinter.printDocument_PrintPage(sender: TObject; e: System.Drawing.Printing.PrintPageEventArgs);var i,j, rowCount, colCount, x ,y , rowGap, colGap , leftMargin:integer; font:system.drawing.font; headingFont:system.drawing.font; captionFont:system.drawing.font ; Brush:system.drawing.brush ; s,f3, cellValue:string; // aa:datagrid.tablestyles; begin rowCount := 0; colCount := 0; x := 0; y := 0; rowGap := 30; colGap := 5; leftMargin := 50; font := system.drawing.Font.create('Arial', 10); headingFont :=system.drawing.Font.create('Arial', 11, FontStyle.Underline); captionFont := system.drawing.Font.create('Arial', 10, FontStyle.Bold); brush :=SolidBrush.create(Color.Black); cellValue := '';
if(dataGrid.DataSource.GetType().ToString() = 'System.Data.DataTable') then begin rowCount := DataTable(dataGrid.DataSource).Rows.Count; end else if(dataGrid.DataSource.GetType().ToString() = 'System.Collections.ArrayList') then begin rowCount := ArrayList(dataGrid.DataSource).Count; end else begin try rowcount:=expressionhandle(datagrid.DataSource).Element.GetAsCollection.Count; except messagebox.show('数据源有错误!'); exit; end; end;
colCount := dataGrid.TableStyles[0].GridColumnStyles.Count;
//print caption if(dataGrid.CaptionVisible) then begin y := y+rowGap; x := leftMargin; e.Graphics.DrawString(dataGrid.CaptionText, captionFont, brush, x, y); end;
//print headings y :=y+ rowGap; x := leftMargin; for j := 0 to colCount-1 do begin if(dataGrid.TableStyles[0].GridColumnStyles[j].Width > 0) then begin cellValue := dataGrid.TableStyles[0].GridColumnStyles[j].HeaderText; e.Graphics.DrawString(cellValue, headingFont, brush, x, y); x:=x+dataGrid.TableStyles[0].GridColumnStyles[j].Width + colGap; end; end;
//print all rows for i:= 0 to rowCount-1 do begin y:=y+ rowGap; x := leftMargin; for j := 0 to colCount-1 do begin if(dataGrid.TableStyles[0].GridColumnStyles[j].Width > 0) then begin cellValue := dataGrid[i,j].ToString(); e.Graphics.DrawString(cellValue, font, brush, x, y); x:=x+ dataGrid.TableStyles[0].GridColumnStyles[j].Width + colGap; // y := y + rowGap // * (cellValue.Split({'\r', '\n'}).Length - 1); end; end; end;
s:= cellValue; f3:= cellValue;end;
function DataGridPrinter.GetPrintDocument():PrintDocument;begin result:= printDocument1;end;
procedure DataGridPrinter.Print();var pageSetupDialog: System.Windows.Forms.PageSetupDialog; printPreviewDialog:System.Windows.Forms.PrintPreviewDialog;begin//trypageSetupDialog := System.Windows.Forms.PageSetupDialog.create();pageSetupDialog.Document := printDocument1;pageSetupDialog.ShowDialog();printPreviewDialog :=System.Windows.Forms.PrintPreviewDialog.create;printPreviewDialog.Document := printDocument1;printPreviewDialog.Height := 600;printPreviewDialog.Width := 800;printPreviewDialog.ShowDialog();end;
///---------------
constructor DataGridPrinter.Create(datagrid:datagrid);begin inherited Create; // TODO: Add any constructor code here self.dataGrid := dataGrid; printDocument1 :=system.drawing.Printing.PrintDocument.create(); include(printDocument1.PrintPage,printDocument_PrintPage);end;
end;
这些代码运行要求datagrid必须人工定义tablestyle中的每一列. |
|
|