Преглед изворни кода

报表,可由报表模板控制划线字体等格式,不受报表设置控制。

MaiXinRong пре 9 година
родитељ
комит
674b079074
2 измењених фајлова са 29 додато и 22 уклоњено
  1. 21 21
      Forms/ReportsFrm.pas
  2. 8 1
      Units/ReportManager.pas

+ 21 - 21
Forms/ReportsFrm.pas

@@ -105,7 +105,7 @@ type
 
     procedure InitPageSettings;
     procedure InitFont;
-    procedure InitPaperSettings;
+    procedure InitPaperSettings(ATemplate: TTemplateNode);
 
     function GetHintStr: string;
 
@@ -121,7 +121,7 @@ type
     procedure ResizePreviewBox;
     procedure PreviewReportCurPage;
     procedure RepaintCurPagePreview;
-    procedure LoadTemplet(const ATempletName: string);
+    procedure LoadTemplet(ATemplate: TTemplateNode);
     procedure LoadTempletAndDisplay;
 
     procedure BeforeExport;
@@ -149,7 +149,7 @@ type
     destructor Destroy; override;
 
     procedure InitFormView;
-    procedure InitReportSettings;
+    procedure InitReportSettings(ATemplate: TTemplateNode = nil);
 
     property ProjectData: TProjectData read FProjectData write SetProjectData;
     // 当前预览的页码
@@ -294,10 +294,7 @@ begin
 
   Screen.Cursor := crHourGlass;
   try
-    if vTemplateNode.IsMulti then
-      LoadTemplet(vTemplateNode.MultiFileNames[FProjectData.PhaseIndex])
-    else
-      LoadTemplet(vTemplateNode.FileName);
+    LoadTemplet(vTemplateNode);
     if PreviewComXML.TotalPages > 0 then
       PreviewTemplet
     else
@@ -746,11 +743,11 @@ begin
     LoadTempletAndDisplay;
 end;
 
-procedure TReportsForm.InitReportSettings;
+procedure TReportsForm.InitReportSettings(ATemplate: TTemplateNode);
 begin
   PreviewComXML.FillZero := chkFillZero.Checked;
   InitPageSettings;
-  InitPaperSettings;
+  InitPaperSettings(ATemplate);
 end;
 
 procedure TReportsForm.InitPageSettings;
@@ -764,7 +761,7 @@ begin
   PreviewComXML.setEdge(3, '', ReportConfig.DownEdge/10);
 end;
 
-procedure TReportsForm.InitPaperSettings;
+procedure TReportsForm.InitPaperSettings(ATemplate: TTemplateNode);
 
   procedure InitRepBorderLine;
   var
@@ -1018,10 +1015,13 @@ procedure TReportsForm.InitPaperSettings;
   end;
 
 begin
-  InitFont;           // 各类字体
-  InitRepBorderLine;  // 报表边框
-  InitRepCellLine;    // 报表表格
-  InitOtherArea;      // 活动区域
+  if not Assigned(ATemplate) or (ATemplate.SelfFormat = 0) then
+  begin
+    InitFont;           // 各类字体
+    InitRepBorderLine;  // 报表边框
+    InitRepCellLine;    // 报表表格
+    InitOtherArea;      // 活动区域
+  end;
 end;
 
 procedure TReportsForm.PreviewComXMLCrossTabLabelShow(valIDX: Integer;
@@ -1332,10 +1332,7 @@ begin
 
   Screen.Cursor := crHourGlass;
   try
-    if ATemplateNode.IsMulti then
-      LoadTemplet(ATemplateNode.MultiFileNames[FProjectData.PhaseIndex])
-    else
-      LoadTemplet(ATemplateNode.FileName);
+    LoadTemplet(ATemplateNode);
     if PreviewComXML.TotalPages > 0 then
       PrintTemplet
     {else if strRptName <> '' then
@@ -1393,13 +1390,16 @@ begin
   end;
 end;
 
-procedure TReportsForm.LoadTemplet(const ATempletName: string);
+procedure TReportsForm.LoadTemplet(ATemplate: TTemplateNode);
 var
   RptArchiverObj: TReportArchiver;
   Mem: TMemoryStream;
 begin
   RptArchiverObj := TReportArchiver.Create;
-  RptArchiverObj.FileName := ATempletName;
+  if ATemplate.IsMulti then
+    RptArchiverObj.FileName := ATemplate.MultiFileNames[FProjectData.PhaseIndex]
+  else
+    RptArchiverObj.FileName := ATemplate.FileName;
   Mem := RptArchiverObj.Extract;
   try
     // 以下代码有顺序限制,不可修改,主要保证在不修改报表模板文件的基础上可以用户定制报表格式
@@ -1407,7 +1407,7 @@ begin
     // 读取报表模板
     if not PreviewComXML.ReadReportStream(Mem) then Exit;
     // 将报表设置中的数据覆盖掉原模板的数据
-    InitReportSettings;
+    InitReportSettings(ATemplate);
     // 保存
     PreviewComXML.SaveToStream(Mem);
     // 再次读取,使报表设置中的设置生效

+ 8 - 1
Units/ReportManager.pas

@@ -34,6 +34,7 @@ type
     FInteractInfo: TInteractInfo;
     FDataPrepareFlag: Integer;
     FDataBaseFlag: Integer;
+    FSelfFormat: Integer;
 
     procedure ReadPropertyStr;
     procedure AnalyzePropertyStr;
@@ -67,6 +68,9 @@ type
     // 链接数据库
     property DataBaseFlag: Integer read FDataBaseFlag;
 
+    // 自主格式
+    property SelfFormat: Integer read FSelfFormat;
+
     property InteractInfo: TInteractInfo read FInteractInfo;
   end;
 
@@ -287,7 +291,9 @@ begin
         else if SameText(sgs.Names[I], '数据准备') then
           FDataPrepareFlag := StrToIntDef(sgs.Values[sgs.Names[I]], 0)
         else if SameText(sgs.Names[I], '数据库') then
-          FDataPrepareFlag := StrToIntDef(sgs.Values[sgs.Names[I]], 0);
+          FDataBaseFlag := StrToIntDef(sgs.Values[sgs.Names[I]], 0)
+        else if SameText(sgs.Names[I], '自主格式') then
+          FSelfFormat := StrToIntDef(sgs.Values[sgs.Names[I]], 0);
       end;
     finally
       sgs.Free;
@@ -302,6 +308,7 @@ begin
   FInteractSubFlag := 0;
   FDataPrepareFlag := 0;
   FDataBaseFlag := 0;
+  FSelfFormat := 0;
   LoadTemplateProperties;
 end;