如何实现某列的最后一行的“合计”的功能,请高手指点。
解决方案 »
- 紧跟.NET步伐,续写昨日辉煌——Delphi Prism 路线图(2009.2)
- 处女贴 没分 大家帮个忙啊 idhttp的分块下载问题
- 如何实现列出当前系统能打开某一个文件的应用程序名称
- datetimepicker怎么会无法更新日期?????????
- 南京企业纳贤 --有意愿请跟帖,留下qq 或手机号码以便联系
- 请问什么是.NET FOR DELPHI
- 字段唯一及快捷键两个问题(100分),谢谢大家
- 恳求源代码?
- 一个查询的小问题,怎么在dbgrid中显示
- 这是不是delph5的bug
- 用fastreport里该怎么放无关的字段,如:日期,操作员,以及,报表的最后,小计,等等。
- ~~~~~fastreport报表怎样传值(传递变量呀!)急死我了~~~~~兄弟们帮忙呀!~~~~~~~~~
然后赋值就可以了!
另获得的[totalpages]始终显示为0,[page#]是对的
将报表设置中的两遍报表选上即可。
frReport1.PrepareReport
zz:=FRREPORT1.EMFPages.Count;总页数
设[totalpages]结果显示为0,为什么?
frprintgrid1.ShowReport;
//下边是我修改的代码FR_PTabl中的代码,以便供需要的朋友参考
//支持每页打印Title,支持页脚处理。
procedure TfrCustomPrintDataSet.BuildReport;
var
v: TfrView;
b: TfrBandView;
Page: TfrPage;
LeftMargin: Integer;
begin
CreateDS; if FDataSet = nil then Exit; FReport.OnBeforePrint := OnEnterRect;
FReport.OnPrintColumn := OnPrintColumn_;
FReport.Preview := FPreview;
FReport.OnUserFunction := OnUserFunction;
FReport.OnBeginDoc := FOnBeginDoc;
FReport.OnEndDoc := FOnEndDoc;
FReport.OnBeginPage := FOnBeginPage;
FReport.OnEndPage := FOnEndPage; FReportDataSet.DataSet := FDataSet;
FColumnDataSet.RangeEndCount := GetFieldCount; FReportDataSet.OnCheckEOF:=FOnCheckEOF;
FReportDataSet.OnFirst:=FOnFirst;
FReportDataSet.OnNext:=FOnNext;
FReportDataSet.OnPrior:=FOnPrior; FReport.Clear;
FReport.Pages.Add;
Page := FReport.Pages[0];
with Page do
begin
pgMargins.Left := Round(FPageMargins.Left * 18 / 5);
pgMargins.Top := Round(FPageMargins.Top * 18 / 5);
pgMargins.Right := Round(FPageMargins.Right * 18 / 5);
pgMargins.Bottom := Round(FPageMargins.Bottom * 18 / 5);
ChangePaper(FpgSize, FpgWidth * 10, FpgHeight * 10, -1, FOrientation);
end; LeftMargin := Page.PrnInfo.Ofx;
if Page.pgMargins.Left <> 0 then
LeftMargin := Page.pgMargins.Left; with FFitWidth do
if Enabled and ApplyBeforeOnCustomize then
TryToFitWidth(FWidths, FColumnDataSet.RangeEndCount, Page.RightMargin-Page.LeftMargin,
Trunc((Page.RightMargin-Page.LeftMargin)/(ResizePercent / 100)), Fields, ShrinkOptions); if Assigned(FCustomizeWidths) then FCustomizeWidths(FWidths, FColumnDataSet.RangeEndCount, Page.RightMargin-Page.LeftMargin); with FFitWidth do
if Enabled and not ApplyBeforeOnCustomize then
TryToFitWidth(FWidths, FColumnDataSet.RangeEndCount, Page.RightMargin-Page.LeftMargin,
Trunc((Page.RightMargin-Page.LeftMargin)/(ResizePercent / 100)), Fields, ShrinkOptions);// Title zpg修改
{ if FTitle.Text <> '' then
begin
b := TfrBandView(frCreateObject(gtBand, ''));
b.SetBounds(0, 20, 1000, 30);
b.Flags := b.Flags or flStretched;
b.BandType := btReportTitle;
Page.Objects.Add(b);
v := frCreateObject(gtMemo, '');
v.SetBounds(0, 20, 1000, 20); b.Script.Clear; // Add Stalker
b.Script.Add('begin'); // Add Stalker
b.Script.Add(' Visible := IsPrint()'); // Add Stalker
b.Script.Add('end'); // Add Stalker v.BandAlign := baWidth;
TfrMemoView(v).Alignment:= FTitle.GetAlign + frtaMiddle;
TfrMemoView(v).Font := FTitle.Font;
v.FrameTyp := FTitle.GetFrameTyp;
v.FrameWidth := FTitle.FrameWidth;
v.FillColor := FTitle.Color;
v.Memo.Add(FTitle.Text);
Page.Objects.Add(v);
end;}// Summary
if FSummary.Text <> '' then
begin
b := TfrBandView(frCreateObject(gtBand, ''));
b.SetBounds(0, 320, 1000, 30);
b.Flags := b.Flags or flStretched;
b.BandType := btReportSummary;
Page.Objects.Add(b);
v := frCreateObject(gtMemo, '');
v.SetBounds(0, 320, 1000, 20);
v.BandAlign := baWidth;
TfrMemoView(v).Alignment:= FSummary.GetAlign + frtaMiddle;
TfrMemoView(v).Font := FSummary.Font;
v.FrameTyp := FSummary.GetFrameTyp;
v.FrameWidth := FSummary.FrameWidth;
v.FillColor := FSummary.Color;
v.Memo.Add(FSummary.Text);
Page.Objects.Add(v);
end;// Header
if frpoHeader in FPrintOptions then
begin
b := TfrBandView(frCreateObject(gtBand, ''));
b.BandType := btMasterHeader;
b.SetBounds(0, 0, 1000, 30);
b.Flags := b.Flags or flStretched;
if frpoHeaderOnEveryPage in FPrintOptions then
b.Flags := b.Flags or flBandRepeatHeader;
Page.Objects.Add(b); v := frCreateObject(gtMemo, '');
v.SetBounds(LeftMargin, 0, 20, 30);
TfrMemoView(v).Alignment := frtaCenter + frtaMiddle;
TfrMemoView(v).Font := FHeader.Font;
v.FillColor := FHeader.Color;
v.FrameTyp := FHeader.GetFrameTyp;
v.FrameWidth := FHeader.FrameWidth;
v.Flags := v.Flags or flWordWrap or flStretched;
v.Memo.Add('[Header]');
Page.Objects.Add(v);
end;// Body
b := TfrBandView(frCreateObject(gtBand, ''));
b.BandType := btMasterData;
b.Dataset := FReportDataSet.Name;
b.SetBounds(0, 130, 1000, 18);
b.Flags := b.Flags or flStretched;
Page.Objects.Add(b); b := TfrBandView(frCreateObject(gtBand, ''));
b.BandType := btCrossData;
b.Dataset := FColumnDataSet.Name;
b.SetBounds(LeftMargin, 0, 20, 1000);
Page.Objects.Add(b); v := frCreateObject(gtMemo, '');
v.SetBounds(LeftMargin, 130, 20, 18);
TfrMemoView(v).Font := FBody.Font;
v.FillColor := FBody.Color;
v.FrameTyp := FBody.GetFrameTyp;
v.FrameWidth := FBody.FrameWidth;
TfrMemoView(v).GapX := 3;
v.Flags := v.Flags or flWordWrap or flStretched;
v.Memo.Add('[Cell]');
Page.Objects.Add(v);
// Footer
// if frpoFooter in FPrintOptions then
// begin
b:=TfrBandView(frCreateObject(gtBand, ''));
b.BandType := btMasterFooter;
b.SetBounds(0, 180, 1000, 30);
Page.Objects.Add(b);{ v := frCreateObject(gtMemo, '');
v.SetBounds(LeftMargin, 160, 20, 30);
TfrMemoView(v).Alignment := frtaCenter + frtaMiddle;
TfrMemoView(v).Font := FFooter.Font;
v.FillColor := FFooter.Color;
v.FrameTyp := FFooter.GetFrameTyp;
v.FrameWidth := FFooter.FrameWidth;
v.Flags := v.Flags or flWordWrap or flStretched;
v.Memo.Add('[Footer]');
Page.Objects.Add(v); }
//放在该处的目的能紧跟Body的后边
v := frCreateObject(gtMemo, '');
v.SetBounds(0, 190, 20, 20);
v.BandAlign := baWidth;
TfrMemoView(v).Alignment :=0;{ FPageFooter.GetAlign;//靠左为了显示打印日期:[date]和打印人:XXX}
TfrMemoView(v).Font := FPageFooter.Font;
v.FillColor := FPageFooter.Color;
v.FrameTyp := FPageFooter.GetFrameTyp;
v.FrameWidth := FPageFooter.FrameWidth;
v.Memo.Add(Copy(FPageFooter.Text,1,pos('┃',FPageFooter.Text)-1)); //约定“┃”为分割线
Page.Objects.Add(v);
// end;
// Page header And Title
b := TfrBandView(frCreateObject(gtBand, ''));
b.BandType := btPageHeader;
b.SetBounds(0, 200, 1000, 50);
Page.Objects.Add(b); v := frCreateObject(gtMemo, '');
v.SetBounds(0, 200, 20, 20);
v.BandAlign := baWidth;
TfrMemoView(v).Alignment:= FTitle.GetAlign;
TfrMemoView(v).Font := FTitle.Font;
v.FrameTyp := FTitle.GetFrameTyp;
v.FrameWidth := FTitle.FrameWidth;
v.FillColor := FTitle.Color;
v.Memo.Add(FTitle.Text);
Page.Objects.Add(v); v := frCreateObject(gtMemo, '');
v.SetBounds(0, 230, 20, 20);
v.BandAlign := baWidth;
TfrMemoView(v).Alignment := FPageHeader.GetAlign;
TfrMemoView(v).Font := FPageHeader.Font;
v.FillColor := FPageHeader.Color;
v.FrameTyp := FPageHeader.GetFrameTyp;
v.FrameWidth := FPageHeader.FrameWidth;
v.Memo.Add(FPageHeader.Text);
Page.Objects.Add(v);
// Page footer
if FPageFooter.Text <> '' then
begin
b := TfrBandView(frCreateObject(gtBand, ''));
b.BandType := btPageFooter;
b.SetBounds(0, 260, 1000, 30);
Page.Objects.Add(b);
v := frCreateObject(gtMemo, '');
v.SetBounds(0, 260, 20, 20);
v.BandAlign := baWidth;
TfrMemoView(v).Alignment :=2;{FPageFooter.GetAlign;/居中为了显示第[page#]页,共[totalpages]页}
TfrMemoView(v).Font := FPageFooter.Font;
v.FillColor := FPageFooter.Color;
v.FrameTyp := FPageFooter.GetFrameTyp;
v.FrameWidth := FPageFooter.FrameWidth;
v.Memo.Add(Copy(FPageFooter.Text,pos('┃',FPageFooter.Text)+2,length(FPageFooter.Text)));//约定“┃”为分割线
Page.Objects.Add(v);
end;
end;
开始使用frprintgrid,总算让老板看的过去了
有些代码需要改的,比如报表的题目总是竖排的
功能上没有太多的改善
所以我自己还是不满意
希望能和楼主交流一下
在TfrMemoView(v).GapX := 3;后边增加一句
TfrMemoView(v).GapY := 4;
又问高手:
frprintgrid如何才能直接打印?
frPrintGrid1.Report.PrepareReport;
frPrintGrid1.Report.PrintPreparedReportDlg;