拋磚引玉...... procedure TRES_HR_AUDIT_F.cxButton3Click(Sender: TObject); var iLoop:Integer; begin inherited; if (Trim(cxDateEdit3.Text)='') then begin MessageDlg('操作提示:查詢的出勤日期不能為空!',mtWarning,[mbOK],0); Exit; end; if (Trim(cxDateEdit3.Text)<>'') then begin Series1.Clear; Chart1.Title.Text.Text:='出勤曲線圖'; qry_chart.Close; qry_chart.SQL.Clear; qry_chart.SQL.Add(' select rq,bmmc,count(1)as cqrs,sum(datediff(mi,''00:00:00'',convert(varchar(20),gzsj))/60.0)as sshr from RES_KQRB where rq='''+ FormatDateTime('yyyy/mm/dd',cxDateEdit3.Date)+''' and gzsj is not null group by rq,bmmc'); qry_chart.Open; qry_chart.First; for iLoop:=0 to qry_chart.RecordCount -1 do begin Series1.Add(qry_chart.FieldValues['cqrs'],VarToStr(qry_chart.FieldValues['bmmc'])); qry_chart.Next; end; end; end;
给你点参考代码 Self.RMReport1.LoadFromFile(path+'tl.rmf'); (self.RMReport1.FindObject('chart1') as TRMChartView).Chart.MarginBottom:=8; se1:=TBarSeries.Create(Self); se1.Name:='series1'; se1.ParentChart:=(self.RMReport1.FindObject('chart1') as TRMChartView).Chart; (self.RMReport1.FindObject('chart1') as TRMChartView).Chart.Title.Text.Clear; s:='泰山供电部'+IntToStr(year)+'年'+inttostr(mon)+'月份城网异常故障比例图'; (self.RMReport1.FindObject('chart1') as TRMChartView).Chart.Title.Text.Add(s); se1.Marks.Style:=smsValue; se1.ShowInLegend:=False; se1.ValueFormat:='0%'; se1.Add(zrr1,'鸟害',clRed); se1.Add(zrr2,'风挂'+#13+'异物',clBlue); se1.Add(zrr3,'雷击断线'+#13+'设备损坏',clPurple); se1.Add(wll,'外力'+#13+'破坏',clSkyBlue); se1.Add(btt1,'瓷瓶击'+#13+'穿闪络',clMoneyGreen); se1.Add(btt2,'引线烧'+#13+'断断线',clNavy); se1.Add(btt3,'开关刀闸'+#13+'附属设备',clYellow); se1.Add(btt4,'电缆及'+#13+'其附件',clGreen); se1.Add(yhh,'用户设'+#13+'备故障',cl3DLight); se1.Add(ychh,'查无'+#13+'异常',clMaroon); (self.RMReport1.FindObject('chart1') as TRMChartView).Chart.AddSeries(se1); (self.RMReport1.FindObject('memo23') as TRMMemoView).Memo.Text:=s; (self.RMReport1.FindObject('memo13') as TRMMemoView).Memo.Text:=IntToStr(zrr1)+'%'; (self.RMReport1.FindObject('memo14') as TRMMemoView).Memo.Text:=IntToStr(zrr2)+'%'; (self.RMReport1.FindObject('memo15') as TRMMemoView).Memo.Text:=IntToStr(zrr3)+'%'; (self.RMReport1.FindObject('memo16') as TRMMemoView).Memo.Text:=IntToStr(wll)+'%'; (self.RMReport1.FindObject('memo17') as TRMMemoView).Memo.Text:=IntToStr(btt1)+'%'; (self.RMReport1.FindObject('memo18') as TRMMemoView).Memo.Text:=IntToStr(btt2)+'%'; (self.RMReport1.FindObject('memo19') as TRMMemoView).Memo.Text:=IntToStr(btt3)+'%'; (self.RMReport1.FindObject('memo20') as TRMMemoView).Memo.Text:=IntToStr(btt4)+'%'; (self.RMReport1.FindObject('memo21') as TRMMemoView).Memo.Text:=IntToStr(yhh)+'%'; (self.RMReport1.FindObject('memo22') as TRMMemoView).Memo.Text:=IntToStr(ychh)+'%';
procedure TRES_HR_AUDIT_F.cxButton3Click(Sender: TObject);
var
iLoop:Integer;
begin
inherited;
if (Trim(cxDateEdit3.Text)='') then
begin
MessageDlg('操作提示:查詢的出勤日期不能為空!',mtWarning,[mbOK],0);
Exit;
end;
if (Trim(cxDateEdit3.Text)<>'') then
begin
Series1.Clear;
Chart1.Title.Text.Text:='出勤曲線圖';
qry_chart.Close;
qry_chart.SQL.Clear;
qry_chart.SQL.Add(' select rq,bmmc,count(1)as cqrs,sum(datediff(mi,''00:00:00'',convert(varchar(20),gzsj))/60.0)as sshr from RES_KQRB where rq='''+ FormatDateTime('yyyy/mm/dd',cxDateEdit3.Date)+''' and gzsj is not null group by rq,bmmc');
qry_chart.Open;
qry_chart.First;
for iLoop:=0 to qry_chart.RecordCount -1 do
begin
Series1.Add(qry_chart.FieldValues['cqrs'],VarToStr(qry_chart.FieldValues['bmmc']));
qry_chart.Next;
end;
end;
end;
(self.RMReport1.FindObject('chart1') as TRMChartView).Chart.MarginBottom:=8;
se1:=TBarSeries.Create(Self);
se1.Name:='series1';
se1.ParentChart:=(self.RMReport1.FindObject('chart1') as TRMChartView).Chart;
(self.RMReport1.FindObject('chart1') as TRMChartView).Chart.Title.Text.Clear;
s:='泰山供电部'+IntToStr(year)+'年'+inttostr(mon)+'月份城网异常故障比例图';
(self.RMReport1.FindObject('chart1') as TRMChartView).Chart.Title.Text.Add(s);
se1.Marks.Style:=smsValue;
se1.ShowInLegend:=False;
se1.ValueFormat:='0%'; se1.Add(zrr1,'鸟害',clRed);
se1.Add(zrr2,'风挂'+#13+'异物',clBlue);
se1.Add(zrr3,'雷击断线'+#13+'设备损坏',clPurple);
se1.Add(wll,'外力'+#13+'破坏',clSkyBlue);
se1.Add(btt1,'瓷瓶击'+#13+'穿闪络',clMoneyGreen);
se1.Add(btt2,'引线烧'+#13+'断断线',clNavy);
se1.Add(btt3,'开关刀闸'+#13+'附属设备',clYellow);
se1.Add(btt4,'电缆及'+#13+'其附件',clGreen);
se1.Add(yhh,'用户设'+#13+'备故障',cl3DLight);
se1.Add(ychh,'查无'+#13+'异常',clMaroon);
(self.RMReport1.FindObject('chart1') as TRMChartView).Chart.AddSeries(se1);
(self.RMReport1.FindObject('memo23') as TRMMemoView).Memo.Text:=s; (self.RMReport1.FindObject('memo13') as TRMMemoView).Memo.Text:=IntToStr(zrr1)+'%';
(self.RMReport1.FindObject('memo14') as TRMMemoView).Memo.Text:=IntToStr(zrr2)+'%';
(self.RMReport1.FindObject('memo15') as TRMMemoView).Memo.Text:=IntToStr(zrr3)+'%';
(self.RMReport1.FindObject('memo16') as TRMMemoView).Memo.Text:=IntToStr(wll)+'%';
(self.RMReport1.FindObject('memo17') as TRMMemoView).Memo.Text:=IntToStr(btt1)+'%';
(self.RMReport1.FindObject('memo18') as TRMMemoView).Memo.Text:=IntToStr(btt2)+'%';
(self.RMReport1.FindObject('memo19') as TRMMemoView).Memo.Text:=IntToStr(btt3)+'%';
(self.RMReport1.FindObject('memo20') as TRMMemoView).Memo.Text:=IntToStr(btt4)+'%';
(self.RMReport1.FindObject('memo21') as TRMMemoView).Memo.Text:=IntToStr(yhh)+'%';
(self.RMReport1.FindObject('memo22') as TRMMemoView).Memo.Text:=IntToStr(ychh)+'%';
unit PrintForm; interface uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
dxDBGrid, RM_class, RM_Desgn, RM_dset, RM_dbset, dxEditor, StdCtrls,
dxCntner, dxEdLib, dxDBELib, dxTL, dxDBCtrl, ExtCtrls, dxExEdtr, RM_shape,
dxDBTL, KsSkinLabels, RM_e_csv, RM_e_txt, RM_chart, RM_FormReport, Series; const
SHOW_REPORT = 1;
PRINT_REPORT = 2;
DESIGN_REPORT = 3;
INITI_REPORT = 4; type
TfrmPrintForm = class(TForm)
rmReport: TRMReport;
RMDesigner1: TRMDesigner;
RMDBDataSet1: TRMDBDataSet;
RMTextExport1: TRMTextExport;
RMCSVExport1: TRMCSVExport;
RMChartObject1: TRMChartObject;
RMChartObject2: TRMChartObject;
private
{ Private declarations }
BandReportTitle: TRMBandView;
BandPageHeader: TRMBandView;
BandDetail: TRMBandView;
BandDetailChart: TRMBandView;
BandPageFooter: TRMBandView;
BandReportSummary: TRMBandView; lTitleY, lGridY, lGridH: Integer;
frmForm1: TForm;
Page1: TRMPage;
sReportFile, sFile: string;
lTitle, lMode: Integer;
bPrintBar, bReturn, bNewReport: Boolean;
lPrintChartType: Integer;
sChart, sPrintChartX, sPrintChartY, sChartNameX, sChartNameY: string;
procedure PrintPrepare; //准备打印
function PrintBegin: Boolean; //开始打印 procedure LoadBand; //读入页边条
procedure LoadControl(Control: TControl); //读入Control
procedure LoadTopControl(Control: TControl); //读入最上面Control
procedure LoadBottomControl(Control: TControl); //读入最下面Control
procedure LoadOldControl(Control: TControl); //读入已存在Control procedure LoadDBGrid(Grid1: TdxDBGrid); //读入DBGrid
procedure SetGridHeader(Grid1: TdxDBGrid); //设置表头
procedure SetGridBody(Grid1: TdxDBGrid); //设置表体
procedure SetGridSummary(Grid1: TdxDBGrid); //设置表尾 procedure LoadDBTree(Tree1: TdxDBTreeList); //读入DBTree
procedure SetTreeHeader(Tree1: TdxDBTreeList); //设置表头
procedure SetTreeBody(Tree1: TdxDBTreeList); //设置表体
procedure SetTreeSummary(Tree1: TdxDBTreeList); //设置表尾 function LoadReportFile: Boolean; //读报表文件
function SaveReportFile: boolean; //写报表文件 procedure SetTitle; //设置标题
function GetAlignment(Align: TAlignment): TRMAlignment;
function GetBandSub(Grid1: TCustomdxDBTreeListControl; Index: Integer):
Integer;
function ViewAssign(m1: TRMMemoView; Control: TControl): Boolean;
//为各种控件赋值
function ShapeViewAssign(s1: TRMShapeView; Control: TControl): Boolean;
//为各种Shape控件赋值
function PicViewAssign(p1: TRMPictureView; Control: TControl): Boolean;
//为各种图象控件赋值
function GetPoint(Control: TControl): TPoint;
procedure SetChart;
public
{ Public declarations }
end; function WinPrint(Form1: TForm; lTitle1, lMode1: Integer; sFile1, sChart1:
string): Boolean;
{
参数( 要打印Form;标题类型(0=空,1=中间,2=左边);打印类型(显示,打印,编辑,初始化);文件ID )
打印类型(显示=SHOW_REPORT,打印=PRINT_REPORT,编辑=DESIGN_REPORT,初始化=INITI_REPORT)
}
implementation uses SysPublic; {$R *.DFM}
const
C_LEFT = 20;
C_HEIGHT = 20; //打印窗体
function WinPrint(Form1: TForm; lTitle1, lMode1: Integer; sFile1, sChart1:
string): Boolean;
var
frmPrintForm: TfrmPrintForm;
begin
frmPrintForm := TfrmPrintForm.Create(Application);
with frmPrintForm do
begin
frmForm1 := Form1;
lMode := lMode1;
lTitle := lTitle1;
sFile := sFile1;
sChart := sChart1;
PrintPrepare;
PrintBegin;
Result := bReturn;
{Free;}
end;
end; procedure TfrmPrintForm.PrintPrepare;
var
i: Integer;
begin
lPrintChartType := -1;
sPrintChartX := ' ';
sPrintChartY := ' ';
sChartNameX := ' ';
sChartNameY := ' '; lPrintChartType := StrToInt2(GetCommaStr(sChart, 1));
sPrintChartX := GetCommaStr(sChart, 2);
sPrintChartY := GetCommaStr(sChart, 3);
if (sPrintChartX = ' ') or (sPrintChartY = ' ') then
lPrintChartType := -1; //不是图形
if lPrintChartType > = 0 then
bNewReport := True; LoadReportFile;
LoadBand;
SetTitle; with frmForm1 do
begin
for i := 0 to ComponentCount - 1 do
begin
if (TControl(Components[i]).Visible) and (Components[i] is
TCustomdxTreeList) then
begin
lGridY := GetPoint(TControl(Components[i])).Y;
lGridH := TdxDBGrid(Components[i]).RowHeight;
end;
end;
for i := 0 to ComponentCount - 1 do
if (TControl(Components[i]).Visible) and (Components[i] is TControl) then
begin
if bNewReport then
LoadTopControl(TControl(Components[i]))
else
LoadOldControl(TControl(Components[i]));
end;
for i := 0 to ComponentCount - 1 do
if (TControl(Components[i]).Visible) and (Components[i] is TdxDBGrid) then
LoadDBGrid(TdxDBGrid(Components[i]));
for i := 0 to ComponentCount - 1 do
if (TControl(Components[i]).Visible) and (Components[i] is TdxDBTreeList) then
LoadDBTree(TdxDBTreeList(Components[i]));
for i := 0 to ComponentCount - 1 do
begin
if (TControl(Components[i]).Visible) and (Components[i] is TControl) then
begin
if bNewReport then
LoadBottomControl(TControl(Components[i]))
else
LoadOldControl(TControl(Components[i]));
end;
end;
if bNewReport then
for i := 0 to ComponentCount - 1 do
begin
if (sChartNameX <> ' ') and (sChartNameY <> ' ') then
begin
SetChart;
Break;
end;
end;
end;
end;
var
lBY, lBH: Integer;
cv: TRMChartView;
begin
//饼图
BandPageHeader.Visible := False;
BandDetail.dy := 0;
BandReportSummary.Visible := False;
lBY := BandReportSummary.y + BandReportSummary.dy + C_HEIGHT;
lBH := 300;
BandDetailChart := TRMBandView(RMCreateObject(gtBand, ' '));
BandDetailChart.BandType := btMasterData;
BandDetailChart.Name := 'BandDetailChart ';
Page1.Objects.Add(BandDetailChart);
BandDetailChart.SetBounds(0, lBY, 0, lBH);
{$IFNDEF NoRmComPass}
cv := TRMChartView.Create;
cv.Name := 'ChartView ';
cv.SetBounds(C_LEFT, lBy + C_HEIGHT, 600, lBH - C_HEIGHT);
cv.AddSeries;
cv.Series[0].ChartOptions.ShowMarks := True;
cv.Series[0].ChartOptions.Colored := True;
cv.Series[0].ChartOptions.ChartType := lPrintChartType;
cv.Series[0].ChartOptions.MarksStyle := 3;
cv.Series[0].LegendObj := sChartNameX;
cv.Series[0].ValueObj := sChartNameY;
Page1.Objects.Add(cv);
{$ELSE} {$ENDIF}
end; function TfrmPrintForm.PrintBegin: Boolean;
begin
Result := True;
case lMode of
SHOW_REPORT: rmReport.ShowReport;
PRINT_REPORT: rmReport.PrintReport;
DESIGN_REPORT: rmReport.DesignReport;
INITI_REPORT: rmReport.DesignReport;
else
Result := False;
end;
if Result <> False then
SaveReportFile;
end; procedure TfrmPrintForm.LoadBand;
begin
if bNewReport then
begin
rmReport.Pages.Clear;
rmReport.Pages.Add;
Page1 := rmReport.Pages[0];
BandReportTitle := TRMBandView(RMCreateObject(gtBand, ' '));
BandReportTitle.BandType := btReportTitle;
BandReportTitle.Name := 'BandReportTitle ';
BandReportTitle.SetBounds(0, C_HEIGHT, 0, 0);
Page1.Objects.Add(BandReportTitle); BandPageHeader := TRMBandView(RMCreateObject(gtBand, ' '));
BandPageHeader.BandType := btPageHeader;
BandPageHeader.Name := 'BandPageHeader ';
Page1.Objects.Add(BandPageHeader);
BandPageHeader.SetBounds(0, C_HEIGHT * 2, 0, 0); BandDetail := TRMBandView(RMCreateObject(gtBand, ' '));
BandDetail.BandType := btMasterData;
BandDetail.Name := 'BandDetail ';
Page1.Objects.Add(BandDetail);
BandDetail.SetBounds(0, C_HEIGHT * 3, 0, 0); BandPageFooter := TRMBandView(RMCreateObject(gtBand, ' '));
BandPageFooter.BandType := btPageFooter;
BandPageFooter.Name := 'BandPageFooter ';
Page1.Objects.Add(BandPageFooter);
BandPageFooter.SetBounds(0, C_HEIGHT * 4, 0, 0); BandReportSummary := TRMBandView(RMCreateObject(gtBand, ' '));
BandReportSummary.BandType := btReportSummary;
BandReportSummary.Name := 'BandReportSummary ';
Page1.Objects.Add(BandReportSummary);
BandReportSummary.SetBounds(0, C_HEIGHT * 5, 0, 0);
end
else
begin
Page1 := rmReport.Pages[0];
BandReportTitle := TRMBandView(page1.FindObject( 'BandReportTitle '));
BandPageHeader := TRMBandView(page1.FindObject( 'BandPageHeader '));
BandDetail := TRMBandView(page1.FindObject( 'BandDetail '));
BandPageFooter := TRMBandView(page1.FindObject( 'BandPageFooter '));
BandReportSummary := TRMBandView(page1.FindObject( 'BandReportSummary '));
end;
end; function TfrmPrintForm.LoadReportFile: Boolean;
var
sDir: string;
begin
Result := True;
bNewReport := False;
sReportFile := ' ';
sDir := Trim(ExtractFilePath(Application.ExeName)) + 'Report ';
if not DirectoryExists(sDir) then
begin
if not CreateDir(sDir) then
begin
raise Exception.Create( '不能新建目录,请手工新建这目录。 ' + #13 + sDir);
Result := false;
end;
end;
if Result <> False then
begin
if lPrintChartType = -1 then
sReportFile := sDir + '\ ' + sFile + '.Rep '
else
sReportFile := sDir + '\ ' + sFile + '图形.Rep ';
end;
if (not FileExists(sReportFile)) or (lMode = INITI_REPORT) then
bNewReport := True
else
if not rmReport.LoadFromFile(sReportFile) then
bNewReport := True; rmReport.FileName := sReportFile;
end;