向一个DLL中通过函数参数传递一个窗体form,怎么窗体都传过去了,窗体上的数据集却没过去? ( 积分: 10 )

你传TForm过去,肯定什么也没有
 
project1.dll如下:<br>================================================================================<br>library Project1;<br><br>uses<br> &nbsp;Forms,<br> &nbsp;PrintForm in 'PrintForm.pas' {frmPrintForm};<br><br>Exports<br> &nbsp;WinPrint;<br>{$R *.res}<br><br><br>begin<br>{ &nbsp;Application.Initialize;<br> &nbsp;Application.CreateForm(TForm1, Form1);<br> &nbsp;Application.Run;<br>}<br>end.<br>------------------------------------------------------------------------------<br>unit PrintForm;<br><br>interface<br><br>uses<br> &nbsp;Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,<br> &nbsp;dxDBGrid, RM_class, RM_Desgn, RM_dset, RM_dbset, dxEditor, StdCtrls,<br> &nbsp;dxCntner, dxEdLib, dxDBELib, dxTL, dxDBCtrl, ExtCtrls, dxExEdtr, RM_shape,<br> &nbsp;dxDBTL, KsSkinLabels, RM_e_csv, RM_e_txt, RM_chart, RM_FormReport, Series;<br><br>const<br> &nbsp;SHOW_REPORT = 1;<br> &nbsp;PRINT_REPORT = 2;<br> &nbsp;DESIGN_REPORT = 3;<br> &nbsp;INITI_REPORT = 4;<br><br>type<br> &nbsp;TfrmPrintForm = class(TForm)<br> &nbsp; &nbsp;rmReport: TRMReport;<br> &nbsp; &nbsp;RMDesigner1: TRMDesigner;<br> &nbsp; &nbsp;RMDBDataSet1: TRMDBDataSet;<br> &nbsp; &nbsp;RMTextExport1: TRMTextExport;<br> &nbsp; &nbsp;RMCSVExport1: TRMCSVExport;<br> &nbsp; &nbsp;RMChartObject1: TRMChartObject;<br> &nbsp; &nbsp;RMChartObject2: TRMChartObject;<br> &nbsp;private<br> &nbsp; &nbsp;{ Private declarations }<br> &nbsp; &nbsp;BandReportTitle: TRMBandView;<br> &nbsp; &nbsp;BandPageHeader: TRMBandView;<br> &nbsp; &nbsp;BandDetail: TRMBandView;<br> &nbsp; &nbsp;BandDetailChart: TRMBandView;<br> &nbsp; &nbsp;BandPageFooter: TRMBandView;<br> &nbsp; &nbsp;BandReportSummary: TRMBandView;<br><br> &nbsp; &nbsp;lTitleY, lGridY, lGridH: Integer;<br> &nbsp; &nbsp;frmForm1: TForm;<br> &nbsp; &nbsp;Page1: TRMPage;<br> &nbsp; &nbsp;sReportFile, sFile: string;<br> &nbsp; &nbsp;lTitle, lMode: Integer;<br> &nbsp; &nbsp;bPrintBar, bReturn, bNewReport: Boolean;<br> &nbsp; &nbsp;lPrintChartType: Integer;<br> &nbsp; &nbsp;sChart, sPrintChartX, sPrintChartY, sChartNameX, sChartNameY: string;<br> &nbsp; &nbsp;procedure PrintPrepare; //准备打印<br> &nbsp; &nbsp;function PrintBegin: Boolean; //开始打印<br><br> &nbsp; &nbsp;procedure LoadBand; //读入页边条<br> &nbsp; &nbsp;procedure LoadControl(Control: TControl); //读入Control<br> &nbsp; &nbsp;procedure LoadTopControl(Control: TControl); //读入最上面Control<br> &nbsp; &nbsp;procedure LoadBottomControl(Control: TControl); //读入最下面Control<br> &nbsp; &nbsp;procedure LoadOldControl(Control: TControl); //读入已存在Control<br><br> &nbsp; &nbsp;procedure LoadDBGrid(Grid1: TdxDBGrid); //读入DBGrid<br> &nbsp; &nbsp;procedure SetGridHeader(Grid1: TdxDBGrid); //设置表头<br> &nbsp; &nbsp;procedure SetGridBody(Grid1: TdxDBGrid); //设置表体<br> &nbsp; &nbsp;procedure SetGridSummary(Grid1: TdxDBGrid); //设置表尾<br><br> &nbsp; &nbsp;procedure LoadDBTree(Tree1: TdxDBTreeList); //读入DBTree<br> &nbsp; &nbsp;procedure SetTreeHeader(Tree1: TdxDBTreeList); //设置表头<br> &nbsp; &nbsp;procedure SetTreeBody(Tree1: TdxDBTreeList); //设置表体<br> &nbsp; &nbsp;procedure SetTreeSummary(Tree1: TdxDBTreeList); //设置表尾<br><br> &nbsp; &nbsp;function LoadReportFile: Boolean; //读报表文件<br> &nbsp; &nbsp;function SaveReportFile: boolean; //写报表文件<br><br> &nbsp; &nbsp;procedure SetTitle; //设置标题<br> &nbsp; &nbsp;function GetAlignment(Align: TAlignment): TRMAlignment;<br> &nbsp; &nbsp;function GetBandSub(Grid1: TCustomdxDBTreeListControl; Index: Integer):<br> &nbsp; &nbsp; &nbsp;Integer;<br> &nbsp; &nbsp;function ViewAssign(m1: TRMMemoView; Control: TControl): Boolean;<br> &nbsp; &nbsp;//为各种控件赋值<br> &nbsp; &nbsp;function ShapeViewAssign(s1: TRMShapeView; Control: TControl): Boolean;<br> &nbsp; &nbsp;//为各种Shape控件赋值<br> &nbsp; &nbsp;function PicViewAssign(p1: TRMPictureView; Control: TControl): Boolean;<br> &nbsp; &nbsp;//为各种图象控件赋值<br> &nbsp; &nbsp;function GetPoint(Control: TControl): TPoint;<br> &nbsp; &nbsp;procedure SetChart;<br> &nbsp;public<br> &nbsp; &nbsp;{ Public declarations }<br> &nbsp;end;<br><br>function WinPrint(Form1: TForm; lTitle1, lMode1: Integer; sFile1, sChart1:<br> &nbsp;string): Boolean;<br>{<br> &nbsp;参数( 要打印Form;标题类型(0=空,1=中间,2=左边);打印类型(显示,打印,编辑,初始化);文件ID )<br> &nbsp;打印类型(显示=SHOW_REPORT,打印=PRINT_REPORT,编辑=DESIGN_REPORT,初始化=INITI_REPORT)<br>}<br>implementation<br><br>{$R *.DFM}<br>const<br> &nbsp;C_LEFT = 20;<br> &nbsp;C_HEIGHT = 20;<br><br>function WinPrint(Form1: TForm; lTitle1, lMode1: Integer; sFile1, sChart1:<br> &nbsp;string): Boolean;<br>var<br> &nbsp;frmPrintForm: TfrmPrintForm;<br>begin<br> &nbsp;frmPrintForm := TfrmPrintForm.Create(Application);<br> &nbsp;with frmPrintForm do<br> &nbsp;begin<br> &nbsp; &nbsp;frmForm1 := Form1;<br> &nbsp; &nbsp;lMode := lMode1;<br> &nbsp; &nbsp;lTitle := lTitle1;<br> &nbsp; &nbsp;sFile := sFile1;<br> &nbsp; &nbsp;sChart := sChart1;<br> &nbsp; &nbsp;PrintPrepare;<br> &nbsp; &nbsp;PrintBegin;<br> &nbsp; &nbsp;Result := bReturn;<br> &nbsp; &nbsp;{Free;}<br> &nbsp;end;<br>end;<br><br>procedure TfrmPrintForm.PrintPrepare;<br>var<br> &nbsp;i: Integer;<br>begin<br><br> &nbsp;lPrintChartType := -1;<br> &nbsp;sPrintChartX := '';<br> &nbsp;sPrintChartY := '';<br> &nbsp;sChartNameX := '';<br> &nbsp;sChartNameY := '';<br><br> &nbsp;if (sPrintChartX = '') or (sPrintChartY = '') then<br> &nbsp; &nbsp;lPrintChartType := -1; //不是图形<br> &nbsp;if lPrintChartType &gt;= 0 then<br> &nbsp; &nbsp;bNewReport := True;<br><br> &nbsp;LoadReportFile; &nbsp;//装载报表文件<br> &nbsp;LoadBand; &nbsp; &nbsp; &nbsp; &nbsp;//装载条带<br> &nbsp;SetTitle;<br> &nbsp;with frmForm1 do<br> &nbsp;begin<br> &nbsp; &nbsp;for i := 0 to ComponentCount - 1 do<br> &nbsp; &nbsp;begin<br> &nbsp; &nbsp; &nbsp;if (TControl(Components).Visible) and (Components is<br> &nbsp; &nbsp; &nbsp; &nbsp;TCustomdxTreeList) then<br> &nbsp; &nbsp; &nbsp;begin<br> &nbsp; &nbsp; &nbsp; &nbsp;lGridY := GetPoint(TControl(Components)).Y;<br> &nbsp; &nbsp; &nbsp; &nbsp;lGridH := TdxDBGrid(Components).RowHeight;<br> &nbsp; &nbsp; &nbsp;end;<br> &nbsp; &nbsp;end;<br> &nbsp; &nbsp;for i := 0 to ComponentCount - 1 do<br> &nbsp; &nbsp; &nbsp;if (TControl(Components).Visible) and (Components is TControl) then<br> &nbsp; &nbsp; &nbsp;begin<br> &nbsp; &nbsp; &nbsp; &nbsp;if bNewReport then<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;LoadTopControl(TControl(Components))<br> &nbsp; &nbsp; &nbsp; &nbsp;else<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;LoadOldControl(TControl(Components));<br> &nbsp; &nbsp; &nbsp;end;<br> &nbsp; &nbsp;for i := 0 to ComponentCount - 1 do<br> &nbsp; &nbsp; &nbsp;if (TControl(Components).Visible) and (Components is TdxDBGrid) then<br> &nbsp; &nbsp; &nbsp; &nbsp;LoadDBGrid(TdxDBGrid(Components)); &nbsp;//装载报表数据源<br> &nbsp; &nbsp;for i := 0 to ComponentCount - 1 do<br> &nbsp; &nbsp; &nbsp;if (TControl(Components).Visible) and (Components is TdxDBTreeList) then<br> &nbsp; &nbsp; &nbsp; &nbsp;LoadDBTree(TdxDBTreeList(Components));<br> &nbsp; &nbsp;for i := 0 to ComponentCount - 1 do<br> &nbsp; &nbsp;begin<br> &nbsp; &nbsp; &nbsp;if (TControl(Components).Visible) and (Components is TControl) then<br> &nbsp; &nbsp; &nbsp;begin<br> &nbsp; &nbsp; &nbsp; &nbsp;if bNewReport then<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;LoadBottomControl(TControl(Components))<br> &nbsp; &nbsp; &nbsp; &nbsp;else<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;LoadOldControl(TControl(Components));<br> &nbsp; &nbsp; &nbsp;end;<br> &nbsp; &nbsp;end;<br> &nbsp; &nbsp;if bNewReport then<br> &nbsp; &nbsp; &nbsp;for i := 0 to ComponentCount - 1 do<br> &nbsp; &nbsp; &nbsp;begin<br> &nbsp; &nbsp; &nbsp; &nbsp;if (sChartNameX &lt;&gt; '') and (sChartNameY &lt;&gt; '') then<br> &nbsp; &nbsp; &nbsp; &nbsp;begin<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;SetChart;<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Break;<br> &nbsp; &nbsp; &nbsp; &nbsp;end;<br> &nbsp; &nbsp; &nbsp;end;<br> &nbsp;end;<br>end;<br><br>procedure TfrmPrintForm.SetChart;<br>var<br> &nbsp;lBY, lBH: Integer;<br> &nbsp;cv: TRMChartView;<br>begin<br> &nbsp;//饼图<br> &nbsp;BandPageHeader.Visible := False;<br> &nbsp;BandDetail.dy := 0;<br> &nbsp;BandReportSummary.Visible := False;<br> &nbsp;lBY := BandReportSummary.y + BandReportSummary.dy + C_HEIGHT;<br> &nbsp;lBH := 300;<br> &nbsp;BandDetailChart := TRMBandView(RMCreateObject(gtBand, ''));<br> &nbsp;BandDetailChart.BandType := btMasterData;<br> &nbsp;BandDetailChart.Name := 'BandDetailChart';<br> &nbsp;Page1.Objects.Add(BandDetailChart);<br> &nbsp;BandDetailChart.SetBounds(0, lBY, 0, lBH);<br> &nbsp;{$IFNDEF NoRmComPass}<br> &nbsp;cv := TRMChartView.Create;<br> &nbsp;cv.Name := 'ChartView';<br> &nbsp;cv.SetBounds(C_LEFT, lBy + C_HEIGHT, 600, lBH - C_HEIGHT);<br> &nbsp;cv.AddSeries;<br> &nbsp;cv.Series[0].ChartOptions.ShowMarks := True;<br> &nbsp;cv.Series[0].ChartOptions.Colored := True;<br> &nbsp;cv.Series[0].ChartOptions.ChartType := lPrintChartType;<br> &nbsp;cv.Series[0].ChartOptions.MarksStyle := 3;<br> &nbsp;cv.Series[0].LegendObj := sChartNameX;<br> &nbsp;cv.Series[0].ValueObj := sChartNameY;<br> &nbsp;Page1.Objects.Add(cv);<br> &nbsp;{$ELSE}<br><br> &nbsp;{$ENDIF}<br>end;<br><br>function TfrmPrintForm.PrintBegin: Boolean;<br>begin<br> &nbsp;Result := True;<br> &nbsp;case lMode of<br> &nbsp; &nbsp;SHOW_REPORT: rmReport.ShowReport;<br> &nbsp; &nbsp;PRINT_REPORT: rmReport.PrintReport;<br> &nbsp; &nbsp;DESIGN_REPORT: rmReport.DesignReport;<br> &nbsp; &nbsp;INITI_REPORT: rmReport.DesignReport;<br> &nbsp;else<br> &nbsp; &nbsp;Result := False;<br> &nbsp;end;<br> &nbsp;if Result &lt;&gt; False then<br> &nbsp; &nbsp;SaveReportFile;<br>end;<br><br>procedure TfrmPrintForm.LoadBand;<br>begin<br> &nbsp;if bNewReport then //如果是新建报表。<br> &nbsp;begin<br> &nbsp; &nbsp;rmReport.Pages.Clear;<br> &nbsp; &nbsp;rmReport.Pages.Add;<br> &nbsp; &nbsp;Page1 := rmReport.Pages[0];<br> &nbsp; &nbsp;BandReportTitle := TRMBandView(RMCreateObject(gtBand, ''));<br> &nbsp; &nbsp;BandReportTitle.BandType := btReportTitle;<br> &nbsp; &nbsp;BandReportTitle.Name := 'BandReportTitle';<br> &nbsp; &nbsp;BandReportTitle.SetBounds(0, C_HEIGHT, 0, 0);<br> &nbsp; &nbsp;Page1.Objects.Add(BandReportTitle);<br><br> &nbsp; &nbsp;BandPageHeader := TRMBandView(RMCreateObject(gtBand, ''));<br> &nbsp; &nbsp;BandPageHeader.BandType := btPageHeader;<br> &nbsp; &nbsp;BandPageHeader.Name := 'BandPageHeader';<br> &nbsp; &nbsp;Page1.Objects.Add(BandPageHeader);<br> &nbsp; &nbsp;BandPageHeader.SetBounds(0, C_HEIGHT * 2, 0, 0);<br><br> &nbsp; &nbsp;BandDetail := TRMBandView(RMCreateObject(gtBand, ''));<br> &nbsp; &nbsp;BandDetail.BandType := btMasterData;<br> &nbsp; &nbsp;BandDetail.Name := 'BandDetail';<br> &nbsp; &nbsp;Page1.Objects.Add(BandDetail);<br> &nbsp; &nbsp;BandDetail.SetBounds(0, C_HEIGHT * 3, 0, 0);<br><br> &nbsp; &nbsp;BandPageFooter := TRMBandView(RMCreateObject(gtBand, ''));<br> &nbsp; &nbsp;BandPageFooter.BandType := btPageFooter;<br> &nbsp; &nbsp;BandPageFooter.Name := 'BandPageFooter';<br> &nbsp; &nbsp;Page1.Objects.Add(BandPageFooter);<br> &nbsp; &nbsp;BandPageFooter.SetBounds(0, C_HEIGHT * 4, 0, 0);<br><br> &nbsp; &nbsp;BandReportSummary := TRMBandView(RMCreateObject(gtBand, ''));<br> &nbsp; &nbsp;BandReportSummary.BandType := btReportSummary;<br> &nbsp; &nbsp;BandReportSummary.Name := 'BandReportSummary';<br> &nbsp; &nbsp;Page1.Objects.Add(BandReportSummary);<br> &nbsp; &nbsp;BandReportSummary.SetBounds(0, C_HEIGHT * 5, 0, 0);<br> &nbsp;end<br> &nbsp;else &nbsp;//如果报表已经存在<br> &nbsp;begin<br> &nbsp; &nbsp;Page1 := rmReport.Pages[0];<br> &nbsp; &nbsp;BandReportTitle := TRMBandView(page1.FindObject('BandReportTitle')); &nbsp;//获取报表标题<br> &nbsp; &nbsp;BandPageHeader := TRMBandView(page1.FindObject('BandPageHeader')); &nbsp; &nbsp;//获取页头<br> &nbsp; &nbsp;BandDetail := TRMBandView(page1.FindObject('BandDetail')); &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;//获取数据区<br> &nbsp; &nbsp;BandPageFooter := TRMBandView(page1.FindObject('BandPageFooter')); &nbsp; &nbsp;//获取页脚<br> &nbsp; &nbsp;BandReportSummary := TRMBandView(page1.FindObject('BandReportSummary')); &nbsp;//获取页合计<br> &nbsp;end;<br>end;<br><br>function TfrmPrintForm.LoadReportFile: Boolean;<br>var<br> &nbsp;sDir: string;<br>begin<br> &nbsp;Result := True;<br> &nbsp;bNewReport := False;<br> &nbsp;sReportFile := '';<br> &nbsp;sDir := Trim(ExtractFilePath(Application.ExeName)) + 'Report';<br> &nbsp;if not DirectoryExists(sDir) then<br> &nbsp;begin<br> &nbsp; &nbsp;if not CreateDir(sDir) then<br> &nbsp; &nbsp;begin<br> &nbsp; &nbsp; &nbsp;raise Exception.Create('不能新建目录,请手工新建这目录。' + #13 + sDir);<br> &nbsp; &nbsp; &nbsp;Result := false;<br> &nbsp; &nbsp;end;<br> &nbsp;end;<br> &nbsp;if Result &lt;&gt; False then<br> &nbsp;begin<br> &nbsp; &nbsp;if lPrintChartType = -1 then<br> &nbsp; &nbsp; &nbsp;sReportFile := sDir + '/' + sFile + '.Rep'<br> &nbsp; &nbsp;else<br> &nbsp; &nbsp; &nbsp;sReportFile := sDir + '/' + sFile + '图形.Rep';<br> &nbsp;end;<br> &nbsp;if (not FileExists(sReportFile)) or (lMode = INITI_REPORT) then<br> &nbsp; &nbsp;bNewReport := True<br> &nbsp;else<br> &nbsp; &nbsp;if not rmReport.LoadFromFile(sReportFile) then<br> &nbsp; &nbsp; &nbsp;bNewReport := True;<br> &nbsp;rmReport.FileName := sReportFile;<br>end;<br><br>function TfrmPrintForm.SaveReportFile: Boolean;<br>begin<br> &nbsp;Result := True;<br> &nbsp;if lPrintChartType &gt;= 0 then<br> &nbsp; &nbsp;Exit;<br> &nbsp;if (sReportFile &lt;&gt; '') and bNewReport then<br> &nbsp; &nbsp;rmReport.SaveToFile(sReportFile);<br> &nbsp;if not FileExists(sReportFile) then<br> &nbsp; &nbsp;Result := False;<br>end;<br><br>procedure TfrmPrintForm.SetTitle;<br>var<br> &nbsp;mt: TRMMemoView;<br> &nbsp;Font: TFont;<br>begin<br> &nbsp;if not bNewReport then &nbsp;//如果不是新建报表,则不必设定报表标题<br> &nbsp; &nbsp;exit;<br> &nbsp;mt := TRMMemoView(RMCreateObject(gtMemo, ''));<br> &nbsp;mt.gapx := 0;<br> &nbsp;mt.gapy := 0;<br> &nbsp;mt.dx := 0;<br> &nbsp;lTitleY := C_HEIGHT;<br> &nbsp;lGridY := 0;<br> &nbsp;if lTitle &gt; 0 then<br> &nbsp;begin<br> &nbsp; &nbsp;Font := TFont.Create;<br> &nbsp; &nbsp;Font.Name := '宋体';<br> &nbsp; &nbsp;Font.Size := 22;<br> &nbsp; &nbsp;Font.Charset := GB2312_CHARSET;<br> &nbsp; &nbsp;Font.Style := [fsBold];<br> &nbsp; &nbsp;mt.Font.Assign(Font);<br> &nbsp; &nbsp;if lTitle = 1 then<br> &nbsp; &nbsp; &nbsp;mt.PAlignment := rmtaCenterJustify<br> &nbsp; &nbsp;else<br> &nbsp; &nbsp; &nbsp;if lTitle = 2 then<br> &nbsp; &nbsp; &nbsp; &nbsp;mt.PAlignment := rmtaLeftJustify;<br> &nbsp; &nbsp;mt.Memo.Add(frmForm1.Caption);<br> &nbsp; &nbsp;mt.SetBounds(C_LEFT, C_HEIGHT, frmForm1.Width, 40);<br> &nbsp; &nbsp;mt.Name := 'TiTtle' + frmForm1.Name;<br> &nbsp; &nbsp;Page1.Objects.Add(mt);<br> &nbsp; &nbsp;BandReportTitle.y := C_HEIGHT;<br> &nbsp; &nbsp;BandReportTitle.dy := 40;<br> &nbsp; &nbsp;lTitleY := BandReportTitle.dy + C_HEIGHT;<br> &nbsp;end<br>end;<br><br>procedure TfrmPrintForm.LoadControl(Control: TControl);<br>var<br> &nbsp;m: TRMMemoView;<br> &nbsp;p: TRMPictureView;<br> &nbsp;s: TRMShapeView;<br>begin<br> &nbsp;if Control.Parent.Visible = False then<br> &nbsp; &nbsp;exit;<br> &nbsp;if (Control is TImage) or (Control is TdxGraphicEdit) or (Control is<br> &nbsp; &nbsp;TdxDBGraphicEdit) then<br> &nbsp;begin<br> &nbsp; &nbsp;p := TRMPictureView(RMCreateObject(gtPicture, ''));<br> &nbsp; &nbsp;p.gapx := 0;<br> &nbsp; &nbsp;p.gapy := 0;<br> &nbsp; &nbsp;p.dx := 0;<br> &nbsp; &nbsp;p.SetBounds(GetPoint(Control).x + C_LEFT, GetPoint(Control).y + lTitleY,<br> &nbsp; &nbsp; &nbsp;Control.Width, Control.Height);<br> &nbsp; &nbsp;if not PicViewAssign(p, Control) then<br> &nbsp; &nbsp; &nbsp;exit;<br> &nbsp; &nbsp;p.Name := Control.Name;<br> &nbsp; &nbsp;Page1.Objects.Add(p);<br> &nbsp; &nbsp;if (BandReportTitle.dy &lt; (p.y + p.dy)) and (p.y &lt; (lGridY + lTitleY)) then<br> &nbsp; &nbsp; &nbsp;BandReportTitle.dy := p.y + p.dy;<br> &nbsp; &nbsp;if p.y &gt; (lGridY + lTitleY) then<br> &nbsp; &nbsp;begin<br> &nbsp; &nbsp; &nbsp;p.y := BandReportSummary.y + lGridH + 8;<br> &nbsp; &nbsp; &nbsp;if (BandReportSummary.dy &lt; (p.y - BandReportSummary.y + p.dy)) then<br> &nbsp; &nbsp; &nbsp; &nbsp;BandReportSummary.dy := (p.y - BandReportSummary.y + p.dy);<br> &nbsp; &nbsp;end;<br> &nbsp;end<br> &nbsp;else<br> &nbsp; &nbsp;if (Control is TShape) then<br> &nbsp; &nbsp;begin<br> &nbsp; &nbsp; &nbsp;s := TRMShapeView(RMCreateObject(gtAddin, 'TRMShapeView'));<br> &nbsp; &nbsp; &nbsp;s.gapx := 0;<br> &nbsp; &nbsp; &nbsp;s.gapy := 0;<br> &nbsp; &nbsp; &nbsp;s.dx := 0;<br> &nbsp; &nbsp; &nbsp;s.SetBounds(GetPoint(Control).x + C_LEFT, GetPoint(Control).y + lTitleY,<br> &nbsp; &nbsp; &nbsp; &nbsp;Control.Width, Control.Height);<br> &nbsp; &nbsp; &nbsp;if not ShapeViewAssign(s, Control) then<br> &nbsp; &nbsp; &nbsp; &nbsp;exit;<br> &nbsp; &nbsp; &nbsp;s.Name := Control.Name;<br> &nbsp; &nbsp; &nbsp;Page1.Objects.Add(s);<br> &nbsp; &nbsp; &nbsp;if (BandReportTitle.dy &lt; (s.y + s.dy)) and (s.y &lt; (lGridY + lTitleY)) then<br> &nbsp; &nbsp; &nbsp; &nbsp;BandReportTitle.dy := s.y + s.dy;<br> &nbsp; &nbsp; &nbsp;if s.y &gt; (lGridY + lTitleY) then<br> &nbsp; &nbsp; &nbsp;begin<br> &nbsp; &nbsp; &nbsp; &nbsp;s.y := BandReportSummary.y + lGridH + 8;<br> &nbsp; &nbsp; &nbsp; &nbsp;if (BandReportSummary.dy &lt; (s.y - BandReportSummary.y + s.dy)) then<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;BandReportSummary.dy := (s.y - BandReportSummary.y + s.dy);<br> &nbsp; &nbsp; &nbsp;end;<br> &nbsp; &nbsp;end<br> &nbsp; &nbsp;else<br> &nbsp; &nbsp;begin<br> &nbsp; &nbsp; &nbsp;m := TRMMemoView(RMCreateObject(gtMemo, ''));<br> &nbsp; &nbsp; &nbsp;m.gapx := 0;<br> &nbsp; &nbsp; &nbsp;m.gapy := 0;<br> &nbsp; &nbsp; &nbsp;m.dx := 0;<br> &nbsp; &nbsp; &nbsp;m.SetBounds(GetPoint(Control).x + C_LEFT, GetPoint(Control).y + lTitleY,<br> &nbsp; &nbsp; &nbsp; &nbsp;Control.Width, Control.Height);<br> &nbsp; &nbsp; &nbsp;if not ViewAssign(m, Control) then<br> &nbsp; &nbsp; &nbsp; &nbsp;exit;<br> &nbsp; &nbsp; &nbsp;m.Name := Control.Name;<br> &nbsp; &nbsp; &nbsp;Page1.Objects.Add(m);<br> &nbsp; &nbsp; &nbsp;if (BandReportTitle.dy &lt; (m.y + m.dy)) and (m.y &lt; (lGridY + lTitleY)) then<br> &nbsp; &nbsp; &nbsp; &nbsp;BandReportTitle.dy := m.y + m.dy;<br> &nbsp; &nbsp; &nbsp;if m.y &gt; (lGridY + lTitleY) then<br> &nbsp; &nbsp; &nbsp;begin<br> &nbsp; &nbsp; &nbsp; &nbsp;m.y := BandReportSummary.y + lGridH + 8;<br> &nbsp; &nbsp; &nbsp; &nbsp;if (BandReportSummary.dy &lt; (m.y - BandReportSummary.y + m.dy)) then<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;BandReportSummary.dy := (m.y - BandReportSummary.y + m.dy);<br> &nbsp; &nbsp; &nbsp;end;<br> &nbsp; &nbsp;end;<br>end;<br><br>procedure TfrmPrintForm.LoadTopControl(Control: TControl); //读入最上面Control<br>begin<br> &nbsp;BandReportSummary.y := BandReportTitle.y + BandReportTitle.dy + C_HEIGHT * 4;<br> &nbsp;if GetPoint(Control).y &lt;= lGridY then<br> &nbsp; &nbsp;LoadControl(Control);<br>end;<br><br>procedure TfrmPrintForm.LoadBottomControl(Control: TControl); //读入最下面Control<br>begin<br> &nbsp;if GetPoint(Control).y &gt;= lGridY then<br> &nbsp; &nbsp;LoadControl(Control);<br>end;<br><br>procedure TfrmPrintForm.LoadOldControl(Control: TControl);<br>var<br> &nbsp;v: TRMView;<br>begin<br> &nbsp;v := Page1.FindObject(Control.Name);<br> &nbsp;if v = nil then<br> &nbsp; &nbsp;exit;<br> &nbsp;if (Control is TImage) or (Control is TdxGraphicEdit) or (Control is<br> &nbsp; &nbsp;TdxDBGraphicEdit) then<br> &nbsp;begin<br> &nbsp; &nbsp;if not PicViewAssign(TRMPictureView(v), Control) then<br> &nbsp; &nbsp; &nbsp;exit;<br> &nbsp;end<br> &nbsp;else<br> &nbsp; &nbsp;if (Control is TShape) then<br> &nbsp; &nbsp;begin<br> &nbsp; &nbsp; &nbsp;if not ShapeViewAssign(TRMShapeView(Page1.FindObject(Control.Name)), Control) then<br> &nbsp; &nbsp; &nbsp; &nbsp;exit;<br> &nbsp; &nbsp;end<br> &nbsp; &nbsp;else<br> &nbsp; &nbsp;begin<br> &nbsp; &nbsp; &nbsp;if not ViewAssign(TRMMemoView(Page1.FindObject(Control.Name)), Control) then<br> &nbsp; &nbsp; &nbsp; &nbsp;exit;<br> &nbsp; &nbsp;end;<br>end;<br><br>function TfrmPrintForm.GetBandSub(Grid1: TCustomdxDBTreeListControl; Index:<br> &nbsp;Integer): Integer;<br>var<br> &nbsp;i, j: Integer;<br>begin<br> &nbsp;j := 0;<br> &nbsp;for i := 0 to Grid1.ColumnCount - 1 do<br> &nbsp; &nbsp;if Grid1.Columns.Visible and (Grid1.Columns.BandIndex = Index) then<br> &nbsp; &nbsp; &nbsp;inc(j);<br> &nbsp;Result := j;<br>end;<br><br>procedure TfrmPrintForm.LoadDBGrid(Grid1: TdxDBGrid);<br>begin<br> &nbsp;if (Grid1 = nil) or (Grid1.Datasource = nil) or (Grid1.Datasource.Dataset =<br> &nbsp; &nbsp;nil) then<br> &nbsp; &nbsp;Exit;<br> &nbsp;if not Grid1.Datasource.Dataset.Active then<br> &nbsp; &nbsp;Exit;<br> &nbsp;RMDBDataSet1.DataSource := Grid1.DataSource;<br> &nbsp;rmReport.DataSet := RMDBDataSet1;<br> &nbsp;if Grid1.Tag = 5 then<br> &nbsp; &nbsp;bPrintBar := True<br> &nbsp;else<br> &nbsp; &nbsp;bPrintBar := False;<br> &nbsp;SetGridHeader(Grid1); //表头<br> &nbsp;SetGridBody(Grid1); //表体<br> &nbsp;SetGridSummary(Grid1); //表尾<br>end;<br><br>procedure TfrmPrintForm.SetGridHeader(Grid1: TdxDBGrid);<br>var<br> &nbsp;x, i: Integer;<br> &nbsp;m: TRMMemoView;<br>begin<br> &nbsp;if bNewReport then<br> &nbsp; &nbsp;BandPageHeader.y := BandReportTitle.y + BandReportTitle.dy + C_HEIGHT;<br> &nbsp;if Grid1.ShowBands then //表头1<br> &nbsp;begin<br> &nbsp; &nbsp;x := C_LEFT;<br> &nbsp; &nbsp;if bNewReport then<br> &nbsp; &nbsp; &nbsp;BandPageHeader.dy := BandPageHeader.dy + Grid1.RowHeight + 4;<br> &nbsp; &nbsp;if bNewReport and bPrintBar then<br> &nbsp; &nbsp; &nbsp;BandPageHeader.dy := 0; //打印成条行表<br> &nbsp; &nbsp;for i := 0 to Grid1.Bands.Count - 1 do<br> &nbsp; &nbsp;begin<br> &nbsp; &nbsp; &nbsp;if not Grid1.Bands.Visible then<br> &nbsp; &nbsp; &nbsp; &nbsp;Continue;<br> &nbsp; &nbsp; &nbsp;m := TRMMemoView(RMCreateObject(gtMemo, ''));<br> &nbsp; &nbsp; &nbsp;m.SetBounds(x, BandPageHeader.y, Grid1.Bands.Width +<br> &nbsp; &nbsp; &nbsp; &nbsp;GetBandSub(Grid1, Grid1.Bands.Index), Grid1.RowHeight + 4);<br> &nbsp; &nbsp; &nbsp;m.Font.Assign(Grid1.BandFont);<br> &nbsp; &nbsp; &nbsp;m.Memo.Text := Grid1.Bands.Caption;<br> &nbsp; &nbsp; &nbsp;m.PLayout := rmtlCenter;<br> &nbsp; &nbsp; &nbsp;m.PAlignment := GetAlignment(Grid1.Columns.HeaderAlignment); //GetAlignment(Grid1.Columns.Alignment);<br> &nbsp; &nbsp; &nbsp;m.FillColor := Grid1.Color;<br>// &nbsp; &nbsp; &nbsp;m.Font := Grid1.HeaderFont;<br> &nbsp; &nbsp; &nbsp;if Grid1.ShowGrid then<br> &nbsp; &nbsp; &nbsp; &nbsp;m.Prop['FrameTyp'] := $F;<br> &nbsp; &nbsp; &nbsp;m.Name := 'Grid_Band_' + IntToStr(i);<br> &nbsp; &nbsp; &nbsp;if Page1.FindObject(m.Name) &lt;&gt; nil then<br> &nbsp; &nbsp; &nbsp; &nbsp;Page1.FindObject(m.Name).Assign(m)<br> &nbsp; &nbsp; &nbsp;else<br> &nbsp; &nbsp; &nbsp; &nbsp;Page1.Objects.Add(m);<br> &nbsp; &nbsp; &nbsp;x := x + Grid1.Bands.Width + GetBandSub(Grid1, Grid1.Bands.Index);<br> &nbsp; &nbsp;end;<br> &nbsp;end;<br> &nbsp;if Grid1.ShowHeader then //表头2<br> &nbsp;begin<br> &nbsp; &nbsp;x := C_LEFT;<br> &nbsp; &nbsp;if bNewReport then<br> &nbsp; &nbsp; &nbsp;BandPageHeader.dy := BandPageHeader.dy + Grid1.RowHeight + 4;<br> &nbsp; &nbsp;if bNewReport and bPrintBar then<br> &nbsp; &nbsp; &nbsp;BandPageHeader.dy := 0; //打印成条行表<br> &nbsp; &nbsp;for i := 0 to Grid1.ColumnCount - 1 do<br> &nbsp; &nbsp;begin<br> &nbsp; &nbsp; &nbsp;if not Grid1.Columns.Visible then<br> &nbsp; &nbsp; &nbsp; &nbsp;Continue;<br> &nbsp; &nbsp; &nbsp;if (Grid1.Columns.Field = nil) and (Grid1.Columns.Visible = false) then<br> &nbsp; &nbsp; &nbsp; &nbsp;Continue;<br> &nbsp; &nbsp; &nbsp;m := TRMMemoView(RMCreateObject(gtMemo, ''));<br> &nbsp; &nbsp; &nbsp;if Grid1.ShowBands then<br> &nbsp; &nbsp; &nbsp; &nbsp;m.SetBounds(x, BandPageHeader.y + Grid1.RowHeight + 4,<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Grid1.Columns.Width + 1, Grid1.RowHeight + 4)<br> &nbsp; &nbsp; &nbsp;else<br> &nbsp; &nbsp; &nbsp; &nbsp;m.SetBounds(x, BandPageHeader.y, Grid1.Columns.Width + 1,<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Grid1.RowHeight + 4);<br> &nbsp; &nbsp; &nbsp;m.Font.Assign(Grid1.Columns.Font);<br> &nbsp; &nbsp; &nbsp;m.Memo.Text := Grid1.Columns.Caption;<br> &nbsp; &nbsp; &nbsp;m.PLayout := rmtlCenter;<br> &nbsp; &nbsp; &nbsp;m.PAlignment := GetAlignment(Grid1.Columns.HeaderAlignment); //GetAlignment(Grid1.Columns.Alignment);<br> &nbsp; &nbsp; &nbsp;m.FillColor := Grid1.Color;<br>// &nbsp; &nbsp; &nbsp;m.Font := Grid1.HeaderFont;<br> &nbsp; &nbsp; &nbsp;if Grid1.ShowGrid then<br> &nbsp; &nbsp; &nbsp; &nbsp;m.Prop['FrameTyp'] := $F;<br> &nbsp; &nbsp; &nbsp;m.Name := 'Row0' + Grid1.Columns.Name;<br> &nbsp; &nbsp; &nbsp;if Page1.FindObject(m.Name) &lt;&gt; nil then<br> &nbsp; &nbsp; &nbsp; &nbsp;Page1.FindObject(m.Name).Assign(m)<br> &nbsp; &nbsp; &nbsp;else<br> &nbsp; &nbsp; &nbsp; &nbsp;Page1.Objects.Add(m);<br> &nbsp; &nbsp; &nbsp;x := x + Grid1.Columns.Width + 1;<br> &nbsp; &nbsp;end;<br> &nbsp;end;<br>end;<br><br>procedure TfrmPrintForm.SetGridBody(Grid1: TdxDBGrid);<br>var<br> &nbsp;x, i: Integer;<br> &nbsp;v: TRMView;<br>begin<br> &nbsp;//画出表体<br> &nbsp;if bNewReport then<br> &nbsp; &nbsp;BandDetail.y := BandPageHeader.y + BandPageHeader.dy + C_HEIGHT;<br> &nbsp;if bNewReport then<br> &nbsp; &nbsp;BandDetail.dy := Grid1.RowHeight + 4;<br><br> &nbsp;x := C_LEFT;<br> &nbsp;for i := 0 to Grid1.ColumnCount - 1 do<br> &nbsp;begin<br> &nbsp; &nbsp;if not Grid1.Columns.Visible then<br> &nbsp; &nbsp; &nbsp;Continue;<br> &nbsp; &nbsp;if (Grid1.Columns.Field = nil) and (Grid1.Columns.Visible = false) then Continue;<br> &nbsp; &nbsp;v := RMCreateObject(gtMemo, '');<br><br> &nbsp; &nbsp;//按表单上表格字段的位置大小设定打印位置<br> &nbsp; &nbsp;//v.SetBounds(x, BandDetail.y, Grid1.Columns.Width + 1, BandDetail.Dy);<br><br> &nbsp; &nbsp;if not bNewReport and bPrintBar then &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //bPrintBar指是否打印条<br> &nbsp; &nbsp; &nbsp;v.SetBounds(x, BandDetail.y + Grid1.RowHeight + 4, Grid1.Columns.Width + 1, Grid1.RowHeight + 4)<br> &nbsp; &nbsp;else<br> &nbsp; &nbsp; &nbsp;v.SetBounds(x, BandDetail.y, Grid1.Columns.Width + 1, BandDetail.Dy);<br><br> &nbsp; &nbsp;TRMMemoView(v).PAlignment := GetAlignment(Grid1.Columns.Alignment);<br> &nbsp; &nbsp;if Grid1.ShowGrid then<br> &nbsp; &nbsp; &nbsp;v.Prop['FrameTyp'] := $F;<br> &nbsp; &nbsp;TRMMemoView(v).Font.Assign(Grid1.Columns.Font);<br> &nbsp; &nbsp;//设置数据字段<br> &nbsp; &nbsp;v.Memo.Text := Format('[%s.%s.&quot;%s&quot;]', [Grid1.DataSource.DataSet.Owner.Name,<br> &nbsp; &nbsp; &nbsp;Grid1.DataSource.DataSet.Name, Grid1.Columns.FieldName]);<br> &nbsp; &nbsp;if edgoRowAutoHeight in Grid1.OptionsView then<br> &nbsp; &nbsp;v.Prop['WordWrap'] := True ;<br> &nbsp; &nbsp;v.FillColor := Grid1.Color;<br> &nbsp; &nbsp;v.Name := 'Row1' + Grid1.Columns.Name;<br> &nbsp; &nbsp;//画饼图<br> &nbsp; &nbsp;if Grid1.Columns.FieldName = sPrintChartX then<br> &nbsp; &nbsp; &nbsp;sChartNameX := v.Name<br> &nbsp; &nbsp;else<br> &nbsp; &nbsp; &nbsp;if Grid1.Columns.FieldName = sPrintChartY then<br> &nbsp; &nbsp; &nbsp; &nbsp;sChartNameY := v.Name;<br><br> &nbsp; &nbsp;if lPrintChartType &gt;= 0 then //如果是图形<br> &nbsp; &nbsp;begin<br> &nbsp; &nbsp; &nbsp;v.dy := 0;<br> &nbsp; &nbsp; &nbsp;v.Visible := False;<br> &nbsp; &nbsp;end;<br><br> &nbsp; &nbsp;if Page1.FindObject(v.Name) &lt;&gt; nil then<br> &nbsp; &nbsp; &nbsp;Page1.FindObject(v.Name).Assign(v)<br> &nbsp; &nbsp;else<br> &nbsp; &nbsp; &nbsp;Page1.Objects.Add(v);<br> &nbsp; &nbsp;x := x + Grid1.Columns.Width + 1;<br> &nbsp;end;<br> &nbsp;if bNewReport and bPrintBar then<br> &nbsp; &nbsp;BandDetail.y := BandPageHeader.y; //打印成条行表<br> &nbsp;if bNewReport and bPrintBar then<br> &nbsp; &nbsp;BandDetail.dy := Grid1.RowHeight * 3 + 12; //打印成条行表<br>end;<br><br>procedure TfrmPrintForm.SetGridSummary(Grid1: TdxDBGrid); //表尾<br>var<br> &nbsp;x, y, i, j: Integer;<br> &nbsp;k: real;<br> &nbsp;IsbigNum: Boolean;<br> &nbsp;m: TRMMemoView;<br> &nbsp;mName, mS, mS1, mS2: string;<br>begin<br> &nbsp;if bNewReport then<br> &nbsp; &nbsp;BandPageFooter.y := BandDetail.y + BandDetail.dy + C_HEIGHT;<br> &nbsp;if bNewReport then<br> &nbsp; &nbsp;BandPageFooter.dy := 0;<br> &nbsp;if bNewReport then<br> &nbsp; &nbsp;BandReportSummary.y := BandPageFooter.y + BandPageFooter.dy + C_HEIGHT;<br> &nbsp;if bNewReport then<br> &nbsp; &nbsp;BandReportSummary.dy := BandReportSummary.dy + Grid1.RowHeight + 4;<br> &nbsp;x := C_LEFT;<br> &nbsp;y := BandReportSummary.y;<br><br> &nbsp;x := C_LEFT;<br> &nbsp;if Grid1.ShowSummaryFooter then<br> &nbsp;begin<br> &nbsp; &nbsp;for i := 0 to Grid1.ColumnCount - 1 do<br> &nbsp; &nbsp;begin<br> &nbsp; &nbsp; &nbsp;if not Grid1.Columns.Visible then<br> &nbsp; &nbsp; &nbsp; &nbsp;Continue;<br> &nbsp; &nbsp; &nbsp;if (Grid1.Columns.Field = nil) and (Grid1.Columns.Visible = false) then<br> &nbsp; &nbsp; &nbsp; &nbsp;Continue;<br> &nbsp; &nbsp; &nbsp;m := TRMMemoView(RMCreateObject(gtMemo, ''));<br> &nbsp; &nbsp; &nbsp;m.SetBounds(x, y, Grid1.Columns.Width + 1,<br> &nbsp; &nbsp; &nbsp; &nbsp;Grid1.RowHeight + 4);<br> &nbsp; &nbsp; &nbsp;m.PAlignment := GetAlignment(Grid1.Columns.Alignment);<br> &nbsp; &nbsp; &nbsp;if Grid1.ShowGrid then<br> &nbsp; &nbsp; &nbsp; &nbsp;m.Prop['FrameTyp'] := $F;<br> &nbsp; &nbsp; &nbsp;m.Font.Assign(Grid1.Columns.Font);<br> &nbsp; &nbsp; &nbsp;m.Memo.Text := Grid1.Columns.SummaryFooterText;<br> &nbsp; &nbsp; &nbsp;m.FillColor := Grid1.Color;<br> &nbsp; &nbsp; &nbsp;m.Name := 'Summary' + Grid1.Columns.Name;<br> &nbsp; &nbsp; &nbsp;if Page1.FindObject(m.Name) &lt;&gt; nil then<br> &nbsp; &nbsp; &nbsp; &nbsp;Page1.FindObject(m.Name).Assign(m)<br> &nbsp; &nbsp; &nbsp;else<br> &nbsp; &nbsp; &nbsp; &nbsp;Page1.Objects.Add(m);<br> &nbsp; &nbsp; &nbsp;x := x + Grid1.Columns.Width + 1;<br> &nbsp; &nbsp;end;<br> &nbsp;end;<br>end;<br><br>procedure TfrmPrintForm.LoadDBTree(Tree1: TdxDBTreeList);<br>begin<br> &nbsp;if (Tree1 = nil) or (Tree1.Datasource = nil) or (Tree1.Datasource.Dataset =<br> &nbsp; &nbsp;nil) then<br> &nbsp; &nbsp;Exit;<br> &nbsp;if not Tree1.Datasource.Dataset.Active then<br> &nbsp; &nbsp;Exit;<br> &nbsp;RMDBDataSet1.DataSource := Tree1.DataSource;<br> &nbsp;rmReport.DataSet := RMDBDataSet1;<br> &nbsp;if Tree1.Tag = 5 then<br> &nbsp; &nbsp;bPrintBar := True<br> &nbsp;else<br> &nbsp; &nbsp;bPrintBar := False;<br> &nbsp;SetTreeHeader(Tree1); //表头<br> &nbsp;SetTreeBody(Tree1); //表体<br> &nbsp;SetTreeSummary(Tree1); //表尾<br>end;<br><br>procedure TfrmPrintForm.SetTreeHeader(Tree1: TdxDBTreeList);<br>var<br> &nbsp;x, i: Integer;<br> &nbsp;m: TRMMemoView;<br>begin<br> &nbsp;if bNewReport then<br> &nbsp; &nbsp;BandPageHeader.y := BandReportTitle.y + BandReportTitle.dy + C_HEIGHT;<br> &nbsp;if Tree1.ShowBands then //表头1<br> &nbsp;begin<br> &nbsp; &nbsp;x := C_LEFT;<br> &nbsp; &nbsp;if bNewReport then<br> &nbsp; &nbsp; &nbsp;BandPageHeader.dy := BandPageHeader.dy + Tree1.RowHeight + 4;<br> &nbsp; &nbsp;if bNewReport and bPrintBar then<br> &nbsp; &nbsp; &nbsp;BandPageHeader.dy := 0; //打印成条行表<br> &nbsp; &nbsp;for i := 0 to Tree1.Bands.Count - 1 do<br> &nbsp; &nbsp;begin<br> &nbsp; &nbsp; &nbsp;if not Tree1.Bands.Visible then<br> &nbsp; &nbsp; &nbsp; &nbsp;Continue;<br> &nbsp; &nbsp; &nbsp;m := TRMMemoView(RMCreateObject(gtMemo, ''));<br> &nbsp; &nbsp; &nbsp;m.SetBounds(x, BandPageHeader.y, Tree1.Bands.Width +<br> &nbsp; &nbsp; &nbsp; &nbsp;GetBandSub(Tree1, Tree1.Bands.Index), Tree1.RowHeight + 4);<br> &nbsp; &nbsp; &nbsp;m.Font.Assign(Tree1.BandFont);<br> &nbsp; &nbsp; &nbsp;m.Memo.Text := Tree1.Bands.Caption;<br> &nbsp; &nbsp; &nbsp;m.PLayout := rmtlCenter;<br> &nbsp; &nbsp; &nbsp;m.PAlignment := GetAlignment(Tree1.Bands.Alignment);<br> &nbsp; &nbsp; &nbsp;m.FillColor := Tree1.Color;<br> &nbsp; &nbsp; &nbsp;// &nbsp; &nbsp; &nbsp;if Tree1.ShowGrid then m.FrameTyp := $F;<br> &nbsp; &nbsp; &nbsp;m.Prop['FrameTyp'] := $F;<br> &nbsp; &nbsp; &nbsp;m.Name := 'Grid_Band_' + IntToStr(i);<br> &nbsp; &nbsp; &nbsp;if Page1.FindObject(m.Name) &lt;&gt; nil then<br> &nbsp; &nbsp; &nbsp; &nbsp;Page1.FindObject(m.Name).Assign(m)<br> &nbsp; &nbsp; &nbsp;else<br> &nbsp; &nbsp; &nbsp; &nbsp;Page1.Objects.Add(m);<br> &nbsp; &nbsp; &nbsp;x := x + Tree1.Bands.Width + GetBandSub(Tree1, Tree1.Bands.Index);<br> &nbsp; &nbsp;end;<br> &nbsp;end;<br> &nbsp;if Tree1.ShowHeader then //表头2<br> &nbsp;begin<br> &nbsp; &nbsp;x := C_LEFT;<br> &nbsp; &nbsp;if bNewReport then<br> &nbsp; &nbsp; &nbsp;BandPageHeader.dy := BandPageHeader.dy + Tree1.RowHeight + 4;<br> &nbsp; &nbsp;if bNewReport and bPrintBar then<br> &nbsp; &nbsp; &nbsp;BandPageHeader.dy := 0; //打印成条行表<br> &nbsp; &nbsp;for i := 0 to Tree1.ColumnCount - 1 do<br> &nbsp; &nbsp;begin<br> &nbsp; &nbsp; &nbsp;if not Tree1.Columns.Visible then<br> &nbsp; &nbsp; &nbsp; &nbsp;Continue;<br> &nbsp; &nbsp; &nbsp;if (Tree1.Columns.Field = nil) and (Tree1.Columns.Visible = false) then<br> &nbsp; &nbsp; &nbsp; &nbsp;Continue;<br> &nbsp; &nbsp; &nbsp;m := TRMMemoView(RMCreateObject(gtMemo, ''));<br> &nbsp; &nbsp; &nbsp;if Tree1.ShowBands then<br> &nbsp; &nbsp; &nbsp; &nbsp;m.SetBounds(x, BandPageHeader.y + Tree1.RowHeight + 4,<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Tree1.Columns.Width + 1, Tree1.RowHeight + 4)<br> &nbsp; &nbsp; &nbsp;else<br> &nbsp; &nbsp; &nbsp; &nbsp;m.SetBounds(x, BandPageHeader.y, Tree1.Columns.Width + 1,<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Tree1.RowHeight + 4);<br> &nbsp; &nbsp; &nbsp;m.Font.Assign(Tree1.Columns.Font);<br> &nbsp; &nbsp; &nbsp;m.Memo.Text := Tree1.Columns.Caption;<br> &nbsp; &nbsp; &nbsp;m.PLayout := rmtlCenter;<br> &nbsp; &nbsp; &nbsp;m.PAlignment := GetAlignment(Tree1.Columns.Alignment);<br> &nbsp; &nbsp; &nbsp;m.FillColor := Tree1.Color;<br> &nbsp; &nbsp; &nbsp;m.Prop['FrameTyp'] := $F;<br> &nbsp; &nbsp; &nbsp;m.Name := 'Row0' + Tree1.Columns.Name;<br> &nbsp; &nbsp; &nbsp;if Page1.FindObject(m.Name) &lt;&gt; nil then<br> &nbsp; &nbsp; &nbsp; &nbsp;Page1.FindObject(m.Name).Assign(m)<br> &nbsp; &nbsp; &nbsp;else<br> &nbsp; &nbsp; &nbsp; &nbsp;Page1.Objects.Add(m);<br> &nbsp; &nbsp; &nbsp;x := x + Tree1.Columns.Width + 1;<br> &nbsp; &nbsp;end;<br> &nbsp;end;<br>end;<br><br>procedure TfrmPrintForm.SetTreeBody(Tree1: TdxDBTreeList);<br>var<br> &nbsp;x, i: Integer;<br> &nbsp;v: TRMView;<br>begin<br> &nbsp;//画出表体<br> &nbsp;if bNewReport then<br> &nbsp; &nbsp;BandDetail.y := BandPageHeader.y + BandPageHeader.dy + C_HEIGHT;<br> &nbsp;if bNewReport then<br> &nbsp; &nbsp;BandDetail.dy := Tree1.RowHeight + 4;<br><br> &nbsp;x := C_LEFT;<br> &nbsp;for i := 0 to Tree1.ColumnCount - 1 do<br> &nbsp;begin<br> &nbsp; &nbsp;if not Tree1.Columns.Visible then<br> &nbsp; &nbsp; &nbsp;Continue;<br> &nbsp; &nbsp;if (Tree1.Columns.Field = nil) and (Tree1.Columns.Visible = false) then<br> &nbsp; &nbsp; &nbsp;Continue;<br> &nbsp; &nbsp;v := RMCreateObject(gtMemo, '');<br><br> &nbsp; &nbsp;if not bNewReport and bPrintBar then<br> &nbsp; &nbsp; &nbsp;v.SetBounds(x, BandDetail.y + Tree1.RowHeight + 4, Tree1.Columns.Width + 1, Tree1.RowHeight + 4)<br> &nbsp; &nbsp;else<br> &nbsp; &nbsp; &nbsp;v.SetBounds(x, BandDetail.y, Tree1.Columns.Width + 1, BandDetail.Dy);<br><br> &nbsp; &nbsp;TRMMemoView(v).PAlignment := GetAlignment(Tree1.Columns.Alignment);<br> &nbsp; &nbsp;if Tree1.ShowGrid then<br> &nbsp; &nbsp; &nbsp;v.Prop['FrameTyp'] := $F;<br> &nbsp; &nbsp;v.Prop['FrameTyp'] := $F;<br> &nbsp; &nbsp;TRMMemoView(v).Font.Assign(Tree1.Columns.Font);<br> &nbsp; &nbsp;//设置数据字段<br> &nbsp; &nbsp;v.Memo.Text := Format('[%s.%s.&quot;%s&quot;]', [Tree1.DataSource.DataSet.Owner.Name,<br> &nbsp; &nbsp; &nbsp;Tree1.DataSource.DataSet.Name, Tree1.Columns.FieldName]);<br> &nbsp; &nbsp;v.FillColor := Tree1.Color;<br> &nbsp; &nbsp;v.Name := 'Row1' + Tree1.Columns.Name;<br> &nbsp; &nbsp;//画饼图<br> &nbsp; &nbsp;if Tree1.Columns.FieldName = sPrintChartX then<br> &nbsp; &nbsp; &nbsp;sChartNameX := v.Name<br> &nbsp; &nbsp;else<br> &nbsp; &nbsp; &nbsp;if Tree1.Columns.FieldName = sPrintChartY then<br> &nbsp; &nbsp; &nbsp; &nbsp;sChartNameY := v.Name;<br><br> &nbsp; &nbsp;if lPrintChartType &gt;= 0 then //如果是图形<br> &nbsp; &nbsp;begin<br> &nbsp; &nbsp; &nbsp;v.dy := 0;<br> &nbsp; &nbsp; &nbsp;v.Visible := False;<br> &nbsp; &nbsp;end;<br><br> &nbsp; &nbsp;if Page1.FindObject(v.Name) &lt;&gt; nil then<br> &nbsp; &nbsp; &nbsp;Page1.FindObject(v.Name).Assign(v)<br> &nbsp; &nbsp;else<br> &nbsp; &nbsp; &nbsp;Page1.Objects.Add(v);<br> &nbsp; &nbsp;x := x + Tree1.Columns.Width + 1;<br> &nbsp;end;<br> &nbsp;if bNewReport and bPrintBar then<br> &nbsp; &nbsp;BandDetail.y := BandPageHeader.y; //打印成条行表<br> &nbsp;if bNewReport and bPrintBar then<br> &nbsp; &nbsp;BandDetail.dy := Tree1.RowHeight * 3 + 12; //打印成条行表<br>end;<br><br>procedure TfrmPrintForm.SetTreeSummary(Tree1: TdxDBTreeList); //表尾<br>var<br> &nbsp;x, i: Integer;<br> &nbsp;m: TRMMemoView;<br>begin<br> &nbsp;if bNewReport then<br> &nbsp; &nbsp;BandPageFooter.y := BandDetail.y + BandDetail.dy + C_HEIGHT;<br> &nbsp;if bNewReport then<br> &nbsp; &nbsp;BandPageFooter.dy := 0;<br> &nbsp;if bNewReport then<br> &nbsp; &nbsp;BandReportSummary.y := BandPageFooter.y + BandPageFooter.dy + C_HEIGHT;<br> &nbsp;if bNewReport then<br> &nbsp; &nbsp;BandReportSummary.dy := BandReportSummary.dy + Tree1.RowHeight + 4;<br> &nbsp;x := C_LEFT;<br> &nbsp;if Tree1.ShowFooter then<br> &nbsp;begin<br> &nbsp; &nbsp;for i := 0 to Tree1.ColumnCount - 1 do<br> &nbsp; &nbsp;begin<br> &nbsp; &nbsp; &nbsp;if not Tree1.Columns.Visible then<br> &nbsp; &nbsp; &nbsp; &nbsp;Continue;<br> &nbsp; &nbsp; &nbsp;if (Tree1.Columns.Field = nil) and (Tree1.Columns.Visible = false) then<br> &nbsp; &nbsp; &nbsp; &nbsp;Continue;<br> &nbsp; &nbsp; &nbsp;m := TRMMemoView(RMCreateObject(gtMemo, ''));<br> &nbsp; &nbsp; &nbsp;m.SetBounds(x, BandReportSummary.y, Tree1.Columns.Width + 1,<br> &nbsp; &nbsp; &nbsp; &nbsp;Tree1.RowHeight + 4);<br> &nbsp; &nbsp; &nbsp;m.PAlignment := GetAlignment(Tree1.Columns.Alignment);<br> &nbsp; &nbsp; &nbsp;if Tree1.ShowGrid then<br> &nbsp; &nbsp; &nbsp; &nbsp;m.Prop['FrameTyp'] := $F;<br> &nbsp; &nbsp; &nbsp;m.Prop['FrameTyp'] := $F;<br> &nbsp; &nbsp; &nbsp;m.Font.Assign(Tree1.Columns.Font);<br> &nbsp; &nbsp; &nbsp;m.Memo.Text := Tree1.Columns.SummaryFooterText; // .SummaryFooterFormat;<br> &nbsp; &nbsp; &nbsp;m.FillColor := Tree1.Color;<br> &nbsp; &nbsp; &nbsp;m.Name := 'Summary' + Tree1.Columns.Name;<br> &nbsp; &nbsp; &nbsp;if Page1.FindObject(m.Name) &lt;&gt; nil then<br> &nbsp; &nbsp; &nbsp; &nbsp;Page1.FindObject(m.Name).Assign(m)<br> &nbsp; &nbsp; &nbsp;else<br> &nbsp; &nbsp; &nbsp; &nbsp;Page1.Objects.Add(m);<br> &nbsp; &nbsp; &nbsp;x := x + Tree1.Columns.Width + 1;<br> &nbsp; &nbsp;end;<br> &nbsp;end;<br>end;<br><br>function TfrmPrintForm.GetPoint(Control: TControl): TPoint;<br>var<br> &nbsp;Point: TPoint;<br>begin<br> &nbsp;Point.x := 0;<br> &nbsp;Point.y := 0;<br> &nbsp;Point := Control.ClientToScreen(point);<br> &nbsp;Point := frmForm1.ScreenToClient(Point);<br> &nbsp;Result := Point;<br>end;<br><br>function TfrmPrintForm.GetAlignment(Align: TAlignment): TRMAlignment;<br>begin<br> &nbsp;case Align of<br> &nbsp; &nbsp;taLeftJustify: Result := rmtaLeftJustify;<br> &nbsp; &nbsp;taRightJustify: Result := rmtaRightJustify;<br> &nbsp; &nbsp;taCenter: Result := rmtaCenterJustify;<br> &nbsp;else<br> &nbsp; &nbsp;Result := rmtaLeftJustify;<br> &nbsp;end;<br>end;<br><br>function TfrmPrintForm.ViewAssign(m1: TRMMemoView; Control: TControl): Boolean;<br>begin<br> &nbsp;Result := true;<br><br> &nbsp;if Control is TSeSkinLabel then<br> &nbsp;begin //标准控件<br> &nbsp; &nbsp;m1.Font.Assign(TSeSkinLabel(Control).Font);<br> &nbsp; &nbsp;m1.Memo.Text := TSeSkinLabel(Control).Caption;<br> &nbsp;end<br> &nbsp;else<br> &nbsp; &nbsp;if Control is TCustomEdit then<br> &nbsp; &nbsp;begin<br> &nbsp; &nbsp; &nbsp;m1.Font.Assign(TEdit(Control).Font);<br> &nbsp; &nbsp; &nbsp;m1.Memo.Text := TEdit(Control).Text;<br> &nbsp; &nbsp;end<br> &nbsp; &nbsp;else<br> &nbsp; &nbsp; &nbsp;if Control is TCustomMemo then<br> &nbsp; &nbsp; &nbsp;begin<br> &nbsp; &nbsp; &nbsp; &nbsp;m1.Font.Assign(TMemo(Control).Font);<br> &nbsp; &nbsp; &nbsp; &nbsp;m1.Memo.Assign(TMemo(Control).Lines);<br> &nbsp; &nbsp; &nbsp;end<br> &nbsp; &nbsp; &nbsp;else<br> &nbsp; &nbsp; &nbsp; &nbsp;if Control is TCustomdxEdit then<br> &nbsp; &nbsp; &nbsp; &nbsp;begin //Express No DB<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;m1.Font.Assign(TdxEdit(Control).Font);<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;m1.Memo.Text := TdxEdit(Control).Text;<br> &nbsp; &nbsp; &nbsp; &nbsp;end<br> &nbsp; &nbsp; &nbsp; &nbsp;else<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if Control is TCustomdxDateEdit then<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;begin<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;m1.Font.Assign(TdxDateEdit(Control).Font);<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;m1.Memo.Text := TdxDateEdit(Control).Text;<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;end<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;else<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if Control is TCustomdxPickEdit then<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;begin<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;m1.Font.Assign(TdxPickEdit(Control).Font);<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;m1.Memo.Text := TdxPickEdit(Control).Text;<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;end<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;else<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if Control is TdxButtonEdit then<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;begin<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;m1.Font.Assign(TdxButtonEdit(Control).Font);<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;m1.Memo.Text := TCustomdxButtonEdit(Control).Text;<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;end<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;else<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if Control is TCustomdxDBEdit then<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;begin //Express is DB<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;m1.Font.Assign(TdxDBEdit(Control).Font);<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;m1.Memo.Text := TdxDBEdit(Control).Text;<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;end<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;else<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if Control is TCustomdxDBDateEdit then<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;begin<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;m1.Font.Assign(TdxDBDateEdit(Control).Font);<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;m1.Memo.Text := TdxDBDateEdit(Control).Text;<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;end<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;else<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if Control is TCustomdxDBPickEdit then<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;begin<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;m1.Font.Assign(TdxDBPickEdit(Control).Font);<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;m1.Memo.Text := TdxDBPickEdit(Control).Text;<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;end<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;else<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if Control is TdxDBButtonEdit then<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;begin<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;m1.Font.Assign(TdxDBButtonEdit(Control).Font);<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;m1.Memo.Text := TCustomdxDBButtonEdit(Control).Text;<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;end<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;else<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if Control is TdxInplaceTextEdit then<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;begin<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;m1.Font.Assign(frmForm1.Font);<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;m1.Memo.Text := TdxInplaceTextEdit(Control).Text;<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;end<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;else<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Result := false;<br>end;<br><br>function TfrmPrintForm.ShapeViewAssign(s1: TRMShapeView; Control: TControl):<br> &nbsp;Boolean;<br>begin<br> &nbsp;Result := True;<br> &nbsp;if Control is TShape then<br> &nbsp;begin<br> &nbsp; &nbsp;{$IFNDEF NoRmComPass}<br> &nbsp; &nbsp;case TShape(Control).Shape of<br> &nbsp; &nbsp; &nbsp;stRectangle: s1.ShapeType := rmskRectangle;<br> &nbsp; &nbsp; &nbsp;stSquare: s1.ShapeType := rmskRectangle;<br> &nbsp; &nbsp; &nbsp;stRoundRect: s1.ShapeType := rmskRectangle;<br> &nbsp; &nbsp; &nbsp;stRoundSquare: s1.ShapeType := rmskRectangle;<br> &nbsp; &nbsp; &nbsp;stEllipse: s1.ShapeType := rmskRectangle;<br> &nbsp; &nbsp; &nbsp;stCircle: s1.ShapeType := rmskRectangle;<br> &nbsp; &nbsp;end;<br> &nbsp; &nbsp;{$ELSE}<br><br> &nbsp; &nbsp;{$ENDIF}<br> &nbsp; &nbsp;s1.FillColor := TShape(Control).Brush.Color;<br> &nbsp; &nbsp;s1.dx := TShape(Control).Pen.Width;<br> &nbsp; &nbsp;s1.FillColor := TShape(Control).Pen.Color;<br> &nbsp; &nbsp;s1.PenMode := TShape(Control).Pen.Mode;<br> &nbsp;end<br> &nbsp;else<br> &nbsp; &nbsp;Result := false;<br>end;<br><br>function TfrmPrintForm.PicViewAssign(p1: TRMPictureView; Control: TControl):<br> &nbsp;Boolean;<br>begin<br> &nbsp;Result := True;<br> &nbsp;if Control is TImage then<br> &nbsp;begin<br> &nbsp; &nbsp;if TImage(Control).Picture.Graphic &lt;&gt; nil then<br> &nbsp; &nbsp; &nbsp;p1.Picture.Assign(TImage(Control).Picture);<br> &nbsp; &nbsp;p1.Flags := (p1.Flags and not flPictCenter) + Word(TImage(Control).Center) *<br> &nbsp; &nbsp; &nbsp;flPictCenter;<br> &nbsp; &nbsp;p1.Flags := (p1.Flags and not flStretched) + Word(TImage(Control).Stretch) *<br> &nbsp; &nbsp; &nbsp;flStretched;<br> &nbsp; &nbsp;p1.Flags := (p1.Flags and not flPictRatio) + Word(0) * flPictRatio;<br> &nbsp;end<br> &nbsp;else<br> &nbsp; &nbsp;if Control is TdxGraphicEdit then<br> &nbsp; &nbsp;begin<br> &nbsp; &nbsp; &nbsp;if TdxGraphicEdit(Control).Picture.Graphic &lt;&gt; nil then<br> &nbsp; &nbsp; &nbsp; &nbsp;p1.Picture.Assign(TdxGraphicEdit(Control).Picture);<br> &nbsp; &nbsp; &nbsp;p1.Flags := (p1.Flags and not flPictCenter) +<br> &nbsp; &nbsp; &nbsp; &nbsp;Word(TdxGraphicEdit(Control).Center) * flPictCenter;<br> &nbsp; &nbsp; &nbsp;p1.Flags := (p1.Flags and not flStretched) +<br> &nbsp; &nbsp; &nbsp; &nbsp;Word(TdxGraphicEdit(Control).Stretch) * flStretched;<br> &nbsp; &nbsp; &nbsp;p1.Flags := (p1.Flags and not flPictRatio) + Word(0) * flPictRatio;<br> &nbsp; &nbsp;end<br> &nbsp; &nbsp;else<br> &nbsp; &nbsp; &nbsp;if Control is TdxDBGraphicEdit then<br> &nbsp; &nbsp; &nbsp;begin<br> &nbsp; &nbsp; &nbsp; &nbsp;if TdxDBGraphicEdit(Control).Picture.Graphic &lt;&gt; nil then<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;p1.Picture.Assign(TdxDBGraphicEdit(Control).Picture);<br> &nbsp; &nbsp; &nbsp; &nbsp;p1.Flags := (p1.Flags and not flPictCenter) +<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Word(TdxDBGraphicEdit(Control).Center) * flPictCenter;<br> &nbsp; &nbsp; &nbsp; &nbsp;p1.Flags := (p1.Flags and not flStretched) +<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Word(TdxDBGraphicEdit(Control).Stretch) * flStretched;<br> &nbsp; &nbsp; &nbsp; &nbsp;p1.Flags := (p1.Flags and not flPictRatio) + Word(0) * flPictRatio;<br> &nbsp; &nbsp; &nbsp;end<br> &nbsp; &nbsp; &nbsp;else<br> &nbsp; &nbsp; &nbsp; &nbsp;Result := false;<br>end;<br><br>end.<br>=================================================================================<br>调用该dll的文件:<br><br>program Project2;<br><br>uses<br> &nbsp;Forms,<br> &nbsp;Unit2 in 'Unit2.pas' {Form1};<br><br>{$R *.res}<br><br>begin<br> &nbsp;Application.Initialize;<br> &nbsp;Application.CreateForm(TForm1, Form1);<br> &nbsp;Application.Run;<br>end.<br><br>------------------------------------------------------------------------------<br>unit Unit2;<br><br>interface<br><br>uses<br> &nbsp;Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,<br> &nbsp;Dialogs, StdCtrls, DB, ADODB, dxExEdtr, dxCntner, dxTL, dxDBCtrl,<br> &nbsp;dxDBGrid, dxDBTLCl, dxGrClms;<br><br>const<br> &nbsp;SHOW_REPORT = 1;<br> &nbsp;PRINT_REPORT = 2;<br> &nbsp;DESIGN_REPORT = 3;<br> &nbsp;INITI_REPORT = 4;<br><br>type<br> &nbsp;TForm1 = class(TForm)<br> &nbsp; &nbsp;Button1: TButton;<br> &nbsp; &nbsp;ADODataSet1: TADODataSet;<br> &nbsp; &nbsp;ADOConnection1: TADOConnection;<br> &nbsp; &nbsp;dxDBGrid1: TdxDBGrid;<br> &nbsp; &nbsp;DataSource1: TDataSource;<br> &nbsp; &nbsp;dxDBGrid1ID: TdxDBGridMaskColumn;<br> &nbsp; &nbsp;dxDBGrid1Date: TdxDBGridDateColumn;<br> &nbsp; &nbsp;dxDBGrid1PCName: TdxDBGridColumn;<br> &nbsp; &nbsp;dxDBGrid1Employee: TdxDBGridColumn;<br> &nbsp; &nbsp;dxDBGrid1Operate: TdxDBGridColumn;<br> &nbsp; &nbsp;procedure Button1Click(Sender: TObject);<br> &nbsp;private<br> &nbsp; &nbsp;{ Private declarations }<br> &nbsp;public<br> &nbsp; &nbsp;{ Public declarations }<br><br> &nbsp;end;<br><br>var<br> &nbsp;Form1: TForm1;<br><br> &nbsp;function WinPrint(Form1: TForm; lTitle1, lMode1: Integer; sFile1, sChart1:<br> &nbsp;string): Boolean; external 'project1.DLL';<br><br>implementation<br><br>{$R *.dfm}<br><br>procedure TForm1.Button1Click(Sender: TObject);<br>begin<br> &nbsp;winprint(self, 1, DESIGN_REPORT, '', '')<br>end;<br><br>end.
 
看了,头痛,简单地说,这是什么?
 
就是一个打印窗体的东东,依据,窗体上的控件,利用机械报表控件,打印出来.其它控件好说,只把文本转过来就可以了.<br>机械报表控件的处理全部在DLL中.<br>但是有个表格控件,要打它,你得知道数据集.问题就是这么发生的啊.
 
我没说错,你把TForm传过去,TForm什么时候包含了数据集?<br>你应该把TForm1传过去,因为TForm1才包含数据集<br><br>function WinPrint(Form1: TForm1; lTitle1, lMode1: Integer; sFile1, sChart1:<br> &nbsp;string): Boolean; external 'project1.DLL';
 
我说错了,是TForm1,不是TForm啊.<br>这不是嘛:<br>procedure TForm1.Button1Click(Sender: TObject);<br>begin<br> &nbsp;winprint(self, 1, DESIGN_REPORT, '', '')<br>end;
 
看清楚没有,函数定义是<br>*** WinPrint(Form1: TForm1;***<br>不是你的 *** WinPrint(Form1: TForm;***<br>另外你要在dll里面uses 这个TForm1的文件
 
你传过去的Form1是TForm,那怎么可能有控件在上面,只有TForm1才有控件
 
winprint(self, 1, DESIGN_REPORT, '', '')<br>这才是在调用啊,self指的是当前类TForm1啊
 
另外如果把DLL中的printunit单元加到project2中的话,执行是成功的,正是我要的结果。我只是把printunit单元放在了一个DLL中而已.
 
还不懂,真的菜,俺晕了,你的程序是<br>function WinPrint(Form1: TForm; lTitle1, lMode1: Integer; sFile1, sChart1:<br> &nbsp;string): Boolean; external 'project1.DLL';<br>winprint(self, 1, DESIGN_REPORT, '', '')<br>是按TForm1传送的吗,你的函数定义是Form1:TForm,就是说将self按TForm传送,按规格<br>TForm传送的给dll,dll怎么可以得到里面的控件<br>应该这样改<br>function WinPrint(MyForm: TForm1; lTitle1, lMode1: Integer; sFile1, sChart1:<br> &nbsp;string): Boolean; external 'project1.DLL';<br>winprint(self, 1, DESIGN_REPORT, '', '')<br>这样self才是按TForm1传送,这样dll才能在self里面找到控件,你的10分我不要了,<br>我到其它贴去灌水算了。
 
改成<br>function WinPrint(MyForm: TForm1; lTitle1, lMode1: Integer; sFile1, sChart1:<br> &nbsp;string): Boolean; external 'project1.DLL';<br>winprint(self, 1, DESIGN_REPORT, '', '')<br>也一样,不信你试试.<br>self是从Tfrom承来的,他不过引用类型而已,他指向的是其衍生类.
 
dll里面引用的类型是TForm1不是TForm,这样才能得到From1里面的控件,<br>另外dll还要uses,已经尽过力,不灌了。
 
可DLL里没有TForm1啊。
 
我晕了,这个低级问题,我已经重复答了两遍,你自己重新看一次我的回帖,如果真的完全按我说的去做,问题早就解决了。
 
我也觉着很低级啊.可是问题出在这里啊<br>------------------------------------------------------------------------------<br>为什么向DLL传递一窗体,中Dll中,该窗体中任一组件,比如说component[0]其属性值classname显示为Tbutton, 但是表达式component[0] is Tbutton 却是假值呢?<br>------------------------------------------------------------------------------<br>在这里:<br>http://www.delphibbs.com/delphibbs/dispq.asp?lid=3171742<br>------------------------------------------------------------------------------<br>我已经按你说的做了,迫切希望你试一下,给发个过来.你所说的,我也认为是那么回事,可执行起来就不是那样啊.<br>------------------------------------------------------------------------------<br>信箱:fengxiaobao@163.com
 
那个问题,是小儿科吧,至于,你要我发什么给你呢?
 

Similar threads

回复
0
查看
827
不得闲
S
回复
0
查看
962
SUNSTONE的Delphi笔记
S
S
回复
0
查看
784
SUNSTONE的Delphi笔记
S
顶部