unit ReportAdjusterUnit; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ComCtrls, StdCtrls, Spin, ExtCtrls, Buttons, Printers, WinSpool, PrintCom, PrintComXML, PrintComTypeDefUnit, Inifiles, ImgList, IdGlobal, ScReportUtils, ConstTypeUnit{ConstTypeUnit这里开始是ScConsts}, ScProjectManager, {$IFNDEF _KTDebug} ScFileArchiver, {$ENDIF} Grids, ZJGrid, ZJCells, ZJEdits, JimCombos, Menus; const DOU_DEFAULTHEIGHT = 0.6; {$IFDEF _KTDebug} const FILEEXT = '.xml'; {$ELSE} const FILEEXT = '.srt'; {$ENDIF} const {$IFDEF _ScBudget} IsBiaoBiao = False; {$ELSE} IsBiaoBiao = True; {$ENDIF} type arr_Type = array of array[0..63] of char; TReportAdjuster = class(TForm) ReportConfigPageControl: TPageControl; PrinterPageSheet: TTabSheet; PageSizeSheet: TTabSheet; ReportSheet: TTabSheet; GroupBox1: TGroupBox; GroupBox2: TGroupBox; GroupBox3: TGroupBox; SpinEdit1: TSpinEdit; Label1: TLabel; DefaultConfigBtn: TBitBtn; OKBtn: TBitBtn; CloseBtn: TBitBtn; PageNameCBox: TComboBox; Label2: TLabel; Label3: TLabel; Label4: TLabel; PageHeightEdit: TEdit; PageWidthEdit: TEdit; Label5: TLabel; Label6: TLabel; Label7: TLabel; Label8: TLabel; UpEdgeSpinEdit: TSpinEdit; DownEdgeSpinEdit: TSpinEdit; LeftEdgeSpinEdit: TSpinEdit; RightEdgeSpinEdit: TSpinEdit; pcxSmartCostRpt: TPrintComXML; Image2: TImage; RepBorderUnderLineCHK: TCheckBox; RepCelVerLineCHK: TCheckBox; RepBorderVerLineCHK: TCheckBox; RepCelHorLineCHK: TCheckBox; AutoRetLineCHK: TCheckBox; Label10: TLabel; Label11: TLabel; BorderLineSpinEdit: TSpinEdit; Label12: TLabel; ReportsCBox: TComboBox; StyleCBox: TComboBox; Label13: TLabel; Label14: TLabel; TitleEdit: TEdit; OrientationGroup: TRadioGroup; PrintPageAmountCHK: TCheckBox; SaveFormatBtn: TBitBtn; OtherFormatBtn: TBitBtn; zgReportProperty: TZJGrid; HeadRBtn: TRadioButton; MemoBtn: TRadioButton; zgReportElements: TZJGrid; ZjShowSelectionCBox: TZjComboBox; TailRBtn: TRadioButton; SetToDefaultBtn: TBitBtn; ReportCellLineSpinEdit: TEdit; seStartPage: TSpinEdit; Label15: TLabel; Label16: TLabel; seRefPage: TSpinEdit; UpCHK: TCheckBox; UpTitleEdit: TEdit; UpLineCHK: TCheckBox; DownCHK: TCheckBox; DownStartPage: TSpinEdit; Label17: TLabel; DownLineCHK: TCheckBox; UpGroup: TRadioGroup; DownGroup: TRadioGroup; GroupBox4: TGroupBox; ReportPageImage: TImage; BoldSBtn: TSpeedButton; ItalicSBtn: TSpeedButton; UnderlineSBtn: TSpeedButton; Label9: TLabel; FontCBox: TComboBox; FontSizeCBox: TComboBox; RowHeightSpinEdit: TSpinEdit; Label18: TLabel; Label19: TLabel; editLineHeight: TEdit; PopupMenu1: TPopupMenu; N1: TMenuItem; Label20: TLabel; Label21: TLabel; PrinterCBX: TComboBox; NarrowChk: TCheckBox; procedure FormShow(Sender: TObject); procedure CloseBtnClick(Sender: TObject); procedure FormClose(Sender: TObject; var Action: TCloseAction); procedure PageNameCBoxSelect(Sender: TObject); procedure SetDefaultBtnClick(Sender: TObject); procedure DefaultConfigBtnClick(Sender: TObject); procedure ReportPageImageMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure UpEdgeSpinEditChange(Sender: TObject); procedure OKBtnClick(Sender: TObject); procedure FontCBoxChange(Sender: TObject); procedure ReportCellLineSpinEditChange(Sender: TObject); procedure BorderLineSpinEditChange(Sender: TObject); procedure RepHeadFootLineCHKClick(Sender: TObject); procedure zgReportElementsGetCellEditor(Sender: TObject; ACoord: TPoint; var AControl: TWinControl); procedure zgReportElementsEditorLoadCell(Sender: TObject; ACoord: TPoint; AControl: TWinControl); procedure zgReportElementsEditorSaveCell(Sender: TObject; ACoord: TPoint; AControl: TWinControl); procedure ReportsCBoxChange(Sender: TObject); procedure SaveFormatBtnClick(Sender: TObject); procedure SetToDefaultBtnClick(Sender: TObject); procedure StyleCBoxChange(Sender: TObject); procedure OrientationGroupClick(Sender: TObject); procedure PrintPageAmountCHKClick(Sender: TObject); procedure HeadRBtnClick(Sender: TObject); procedure FormCreate(Sender: TObject); procedure zgReportPropertyCellValueChanged(Sender: TObject); procedure TitleEditChange(Sender: TObject); procedure seStartPageChange(Sender: TObject); procedure seRefPageChange(Sender: TObject); procedure UpCHKClick(Sender: TObject); procedure DownCHKClick(Sender: TObject); procedure editLineHeightChange(Sender: TObject); procedure N1Click(Sender: TObject); procedure editLineHeightExit(Sender: TObject); procedure PrinterCBXSelect(Sender: TObject); private { Private declarations } arr_PaperSize : array of TPoint; arr_szDeviceName: array[0..64] of char; arr_szDriver : array[0..64] of char; arr_szPort : array[0..64] of char; arr_HeadIndex : array[0..7] of array[0..2] of integer; arr_FootIndex : array[0..7] of array[0..2] of integer; L_intPageElementIndex : integer; L_IniFile : TIniFile; L_ContentObjList : TList; //-------------------------------------------------------------------------- bPaperChanged : boolean; bEdgeChanged : boolean; bReportPageChanged : boolean; bCrossObj : boolean; slReports : TStringList; ExePath : string; bHeadTailChangd : boolean; intMaxItem : integer; {$IFNDEF _KTDebug} RptArchiverObj : TReportArchiver; {$ENDIF} MemFile : TMemoryStream; strModified : string; FReportManager: TScReportManager; FProject: TProject; //bHasModified : boolean; { strBillRptDir_Before : string; //清单报表目录(调价前) strBillRptDir_After : string; //清单报表目录(调价后) strBudgetRptDir : string; //预算报表目录 strCommonRptDir : string; //其他(公共)报表目录 strTmpRptBkDir : string; //报表备份零时目录 //} //-------------------------------------------------------------------------- procedure IniPrinterPage(); procedure IniReportPage(); procedure IniReportFormat(); procedure IniHeadTailElements(); procedure SetDefaultPrinter; procedure SetDefaultPageFormat; procedure SetDefaultReportFormat; procedure getAllSupportPaperNames_bk(); procedure getAllSupportPaperNames(); procedure PaintImage; procedure SetElementIndex(IDX : integer); function getCaptionString : String; procedure checkCurReport; //检测当前报表文件是否在slReports中,如果没有,则加上 //在最后确定或取消的时候来获取修改过的报表文件信息 function getHeadTailIndex(strCompareName : string) : integer; function getHeadTailObj(HeadType : integer; TypeIDX : integer) : PHeadRec; procedure LoadReports; procedure getReport(strFileName : string); procedure SaveRpt(strFileName : string); function getCurReportName() : string; //取当前选择的报表全名称 public { Public declarations } // 是否调价后 IsTender: Boolean; ProjType: TScProjType; //remark: 要注意处理,因在ScConsts.pas文件中有定义 SetupChanged : boolean; SetupReportName : string; //strConfigTxt : string; SetupReportNo : integer; ReportChanged: boolean; property PageElementIndex : integer read L_intPageElementIndex write SetElementIndex; property Project: TProject read FProject write FProject; end; {$IFNDEF _KTDebug} function chkLoadFile(strFileName : string): boolean; {$ENDIF} var ReportAdjuster: TReportAdjuster; implementation {$R *.dfm} procedure TReportAdjuster.FormShow(Sender: TObject); var FileName : String; i : integer; begin // zy ReportConfigPageControl.ActivePage := PageSizeSheet; L_IniFile := nil; bHeadTailChangd := false; FileName := ExePath + STR_CONFIG_TEXT; if FileExists(FileName) then begin L_IniFile := TIniFile.Create(FileName); CopyFileTo(ExePath + STR_CONFIG_TEXT, ExePath + STR_REVERSE_CONFIG_TEXT) end else begin //Close; end; IniPrinterPage; IniReportPage; IniReportFormat; IniHeadTailElements; if SetupReportNo >= 0 then begin for i := 0 to ReportsCBox.Items.Count - 1 do begin if SetupReportNo = Integer(ReportsCBox.Items.Objects[i]) then begin ReportsCBox.OnChange := nil; ReportsCBox.ItemIndex := i; ReportsCBox.OnChange := ReportsCBoxChange; ReportsCBoxChange(ReportsCBox); break; end; end; end; end; procedure TReportAdjuster.IniReportPage(); var i : integer; FontStr : TStrings; strAlign : string; begin //1. 设置字体 FontCBox.Items.Clear; FontStr := Screen.Fonts; for i := 0 to FontStr.Count - 1 do begin FontCBox.Items.Add(FontStr[i]); end; //---------------------------------------------------------------------------- UpCHK.OnClick := nil; UpTitleEdit.OnChange := nil; UpLineCHK.OnClick := nil; UpGroup.OnClick := nil; DownCHK.OnClick := nil; DownStartPage.OnChange := nil; DownLineCHK.OnClick := nil; DownGroup.OnClick := nil; //---------------------------------------------------------------------------- //ReportCellLineSpinEdit.Value := L_IniFile.ReadInteger('页面','表格线粗',0); ReportCellLineSpinEdit.Text := FloatToStr(L_IniFile.ReadFloat('页面','表格线粗',0)); BorderLineSpinEdit.Value := L_IniFile.ReadInteger('页面','边框线粗',0); //RepHeadFootLineCHK.Checked := (L_IniFile.ReadInteger('页面','页眉/页脚线',0) = 1); RepBorderUnderLineCHK.Checked := (L_IniFile.ReadInteger('页面','报表边框横线',0) = 1); RepCelHorLineCHK.Checked := (L_IniFile.ReadInteger('页面','报表表格横线',0) = 1); AutoRetLineCHK.Checked := (L_IniFile.ReadInteger('页面','自动换行打印',0) = 1); RepBorderVerLineCHK.Checked := (L_IniFile.ReadInteger('页面','报表边框竖线',0) = 1); RepCelVerLineCHK.Checked := (L_IniFile.ReadInteger('页面','报表表格竖线',0) = 1); NarrowChk.Checked := (L_IniFile.ReadInteger('页面','内容窄体输出',0) = 1); UpLineCHK.Checked := (L_IniFile.ReadInteger('页面','页眉横线',0) = 1); strAlign := L_IniFile.ReadString('页面','页眉_对齐','中'); if (strAlign = '左') then UpGroup.ItemIndex := 0 else if (strAlign = '右') then UpGroup.ItemIndex := 2 else UpGroup.ItemIndex := 1; UpTitleEdit.Text := L_IniFile.ReadString('页面','页眉_显示内容',''); UpCHK.Checked := (L_IniFile.ReadInteger('页面','页眉显示',0) = 1); DownLineCHK.Checked := (L_IniFile.ReadInteger('页面','页脚横线',0) = 1); strAlign := L_IniFile.ReadString('页面','页脚_对齐','中'); if (strAlign = '左') then DownGroup.ItemIndex := 0 else if (strAlign = '右') then DownGroup.ItemIndex := 2 else DownGroup.ItemIndex := 1; DownStartPage.Value := L_IniFile.ReadInteger('页面','页脚_起始页码',0); DownCHK.Checked := (L_IniFile.ReadInteger('页面','页脚显示',0) = 1); if (UpCHK.Checked) then begin UpTitleEdit.Enabled := true; UpLineCHK.Enabled := true; UpGroup.Enabled := true; end; if (DownCHK.Checked) then begin DownStartPage.Enabled := true; DownLineCHK.Enabled := true; DownGroup.Enabled := true; end; //---------------------------------------------------------------------------- UpCHK.OnClick := UpCHKClick; UpTitleEdit.OnChange := UpCHKClick; UpLineCHK.OnClick := UpCHKClick; UpGroup.OnClick := UpCHKClick; DownCHK.OnClick := DownCHKClick; DownStartPage.OnChange := DownCHKClick; DownLineCHK.OnClick := DownCHKClick; DownGroup.OnClick := DownCHKClick; //---------------------------------------------------------------------------- //2. 画框 L_intPageElementIndex := -1; SetElementIndex(-1); SetElementIndex(0); // end; procedure TReportAdjuster.IniHeadTailElements(); begin ZjShowSelectionCBox.Clear; ZjShowSelectionCBox.Style := csDropDownList; intMaxItem := 0; //ZjShowSelectionCBox.AddItem('默认项',nil); ZjShowSelectionCBox.AddItem(' ',nil); //项目级 ZjShowSelectionCBox.AddItem('建设项目名称',nil); ZjShowSelectionCBox.AddItem('单位工程名称',nil); //合同段 ZjShowSelectionCBox.AddItem('工 程 地 点',nil); ZjShowSelectionCBox.AddItem('建 设 单 位',nil); ZjShowSelectionCBox.AddItem('投 标 人',nil); ZjShowSelectionCBox.AddItem('编制',nil); ZjShowSelectionCBox.AddItem('编制人 证 号',nil); ZjShowSelectionCBox.AddItem('复核',nil); ZjShowSelectionCBox.AddItem('复核人 证 号',nil); ZjShowSelectionCBox.AddItem('编 制 范 围',nil); ZjShowSelectionCBox.AddItem('编 制 时 间',nil); //清单级 ZjShowSelectionCBox.AddItem('分项工程名称',nil); ZjShowSelectionCBox.AddItem('分项工程编号',nil); ZjShowSelectionCBox.AddItem('计 量 单 位',nil); ZjShowSelectionCBox.AddItem('数量',nil); ZjShowSelectionCBox.AddItem('单价',nil); //ZjShowSelectionCBox.AddItem('项目名称',nil); //ZjShowSelectionCBox.AddItem('项目编号',nil); //表级别(如08表) ZjShowSelectionCBox.AddItem('表 编 号',nil); ZjShowSelectionCBox.AddItem('打印时间',nil); ZjShowSelectionCBox.AddItem('工 料 机名称',nil); intMaxItem := ZjShowSelectionCBox.Items.Count; //ZjShowSelectionCBox.AddItem('单位工程',nil); //ZjShowSelectionCBox.AddItem('建设项目',nil); //ZjShowSelectionCBox.AddItem('起始页码',nil); ZjShowSelectionCBox.AddItem('总页码数',nil); ZjShowSelectionCBox.AddItem('当前页码',nil); end; procedure TReportAdjuster.IniReportFormat(); begin // zgReportProperty.ColCount := 1; zgReportProperty.RowCount := 5; zgReportProperty.Cells[0,0].Text := '内容'; zgReportProperty.Cells[0,1].Text := '标题'; zgReportProperty.Cells[0,2].Text := '宽度'; zgReportProperty.Cells[0,3].Text := '对齐'; zgReportProperty.Cells[0,4].Text := '精度'; //zgReportProperty.ColWidths[1] := 30; //getfiles //zgReportProperty.RowHeights[1] := 20; LoadReports; TitleEdit.Enabled := true; PrintPageAmountCHK.Enabled := true; zgReportElements.ColWidths[0] := 136; zgReportElements.ColWidths[1] := 136; zgReportElements.ColWidths[2] := 136; zgReportElements.ColWidths[3] := 136; zgReportElements.ColWidths[4] := 136; zgReportElements.ColWidths[5] := 136; zgReportElements.ColWidths[6] := 136; zgReportElements.ColWidths[7] := 136; { zgReportElements.Cells[0,0].Text := '左'; zgReportElements.Cells[1,0].Text := '偏左'; zgReportElements.Cells[2,0].Text := '中'; zgReportElements.Cells[3,0].Text := '偏右'; zgReportElements.Cells[4,0].Text := '右'; //} //设置事件 //zgReportProperty.OnCellValueChanged := zgReportPropertyCellValueChanged; ZjShowSelectionCBox.Top := -20; end; procedure TReportAdjuster.IniPrinterPage(); var i : integer; begin try PrinterCBX.Clear(); for i := 0 to Printer.Printers.Count - 1 do begin PrinterCBX.Items.Add(Printer.Printers[i]); end; PrinterCBX.ItemIndex := Printer.PrinterIndex; getAllSupportPaperNames; except // end; end; procedure TReportAdjuster.getAllSupportPaperNames(); begin SetLength(arr_PaperSize,2); arr_PaperSize[0] := Point(210, 297); arr_PaperSize[1] := Point(297, 420); PageNameCBox.Clear(); PageNameCBox.Items.Add('A4'); PageNameCBox.Items.Add('A3'); //PageNameCBox.ItemIndex := 0; if L_IniFile <> nil then begin LeftEdgeSpinEdit.OnChange := nil; RightEdgeSpinEdit.OnChange := nil; UpEdgeSpinEdit.OnChange := nil; DownEdgeSpinEdit.OnChange := nil; try LeftEdgeSpinEdit.Value := L_IniFile.ReadInteger('纸张','左边距',0); RightEdgeSpinEdit.Value := L_IniFile.ReadInteger('纸张','右边距',0); UpEdgeSpinEdit.Value := L_IniFile.ReadInteger('纸张','上边距',0); DownEdgeSpinEdit.Value := L_IniFile.ReadInteger('纸张','下边距',0); finally LeftEdgeSpinEdit.OnChange := UpEdgeSpinEditChange; RightEdgeSpinEdit.OnChange := UpEdgeSpinEditChange; UpEdgeSpinEdit.OnChange := UpEdgeSpinEditChange; DownEdgeSpinEdit.OnChange := UpEdgeSpinEditChange; end; end; end; procedure TReportAdjuster.getAllSupportPaperNames_bk(); var Rslt,i:integer; PaperNames: Pointer; PaperSizes: Pointer; pDevModeInput : PDeviceMode; DevHandle : THandle; intP : integer; szDeviceName: String; szDriver : String; szPort: String; //PszDeviceName: PChar; //PszDriver : PChar; //PszPort: PChar; strTemp : string; pTempPaperNames : Pointer; pTempPaperSizes : Pointer; begin szDeviceName := Printer.Printers[Printer.PrinterIndex]; intP := Pos(' on ', szDeviceName); if (intP > 0) then begin //备注: 在WIN98下打印机名称是XXX on YYY, 很讨嫌,要去掉' on '后面的字符,否则DeviceCapabilities // 函数会返回-1 szDeviceName := Trim(Copy(szDeviceName,1,intP-1)); end; szPort := ''; Rslt := DeviceCapabilities(PChar(szDeviceName),PChar(szPort),DC_PAPERNAMES,nil,nil); if (Rslt >= 1) and (Rslt <= 256) then begin GetMem(PaperNames, Rslt*64); GetMem(PaperSizes, Rslt*SizeOf(TPoint)); //PszDeviceName: PChar; SetLength(arr_PaperSize,Rslt); pTempPaperSizes := PaperSizes; pTempPaperNames := PaperNames; try DeviceCapabilities(PChar(szDeviceName), PChar(szPort), DC_PAPERNAMES, PaperNames, nil); DeviceCapabilities(PChar(szDeviceName), PChar(szPort), DC_PAPERSIZE, PaperSizes, nil); PageNameCBox.Clear(); for i := 0 to Rslt - 1 do begin strTemp := PChar(PaperNames); PageNameCBox.Items.Add( strTemp ); Inc(PChar(PaperNames), 64); arr_PaperSize[i] := TPoint(PaperSizes^); Inc(PChar(PaperSizes), SizeOf(TPoint)); end; Printer.GetPrinter(arr_szDeviceName,arr_szDriver,arr_szPort,DevHandle); //备注: 有时候真搞不懂这些参数(PChar, char数组)的区分,我我用PChar类型做参数 // 就总有问题,换了char数组就OK; 但在调用系统API函数时,却是PChar好使 try pDevModeInput := PDeviceMode(GlobalLock(DevHandle)); //pDevModeInput.dmPaperSize := 9; //pDevModeInput.dmPaperLength := 2100; //pDevModeInput.dmPaperWidth := 2970; PageNameCBox.Text := pDevModeInput.dmFormName; for i := 0 to PageNameCBox.Items.Count - 1 do begin if PageNameCBox.Items[i] = pDevModeInput.dmFormName then begin PageNameCBox.ItemIndex := i; PageNameCBoxSelect(nil); //控件不自动刷新,要手工刷新一把 break; end; end; finally GlobalUnLock(DevHandle); //GlobalFree(DevHandle); end; //} finally FreeMem(pTempPaperNames, Rslt*64); FreeMem(pTempPaperSizes, Rslt*SizeOf(TPoint)); end; end; if L_IniFile <> nil then begin LeftEdgeSpinEdit.OnChange := nil; RightEdgeSpinEdit.OnChange := nil; UpEdgeSpinEdit.OnChange := nil; DownEdgeSpinEdit.OnChange := nil; try LeftEdgeSpinEdit.Value := L_IniFile.ReadInteger('纸张','左边距',0); RightEdgeSpinEdit.Value := L_IniFile.ReadInteger('纸张','右边距',0); UpEdgeSpinEdit.Value := L_IniFile.ReadInteger('纸张','上边距',0); DownEdgeSpinEdit.Value := L_IniFile.ReadInteger('纸张','下边距',0); finally LeftEdgeSpinEdit.OnChange := UpEdgeSpinEditChange; RightEdgeSpinEdit.OnChange := UpEdgeSpinEditChange; UpEdgeSpinEdit.OnChange := UpEdgeSpinEditChange; DownEdgeSpinEdit.OnChange := UpEdgeSpinEditChange; end; end; end; procedure TReportAdjuster.FormClose(Sender: TObject; var Action: TCloseAction); begin FReportManager.Free; slReports.Free; {$IFNDEF _KTDebug} RptArchiverObj.free; {$ENDIF} if (MemFile <> nil) then MemFile.Free; SetLength(arr_PaperSize,0); L_ContentObjList.Free; end; procedure TReportAdjuster.PageNameCBoxSelect(Sender: TObject); var pDevModeInput : PDeviceMode; DevHandle : THandle; DevSetHandle : THandle; StubDevMode: TDeviceMode; begin (* //1. 设置显示 PageHeightEdit.Text := FloatToSTr(arr_PaperSize[PageNameCBox.ItemIndex].X / 10); PageWidthEdit.Text := FloatToSTr(arr_PaperSize[PageNameCBox.ItemIndex].Y / 10); //2. 设置打印机 if Sender = nil then exit; //{ Printer.GetPrinter(arr_szDeviceName,arr_szDriver,arr_szPort,DevHandle); try L_IniFile.WriteString('纸张','幅面',PageNameCBox.Text); pDevModeInput := PDeviceMode(GlobalLock(DevHandle)); StrCopy(pDevModeInput.dmFormName,PChar(PageNameCBox.Items[PageNameCBox.ItemIndex])); pDevModeInput.dmPaperLength := arr_PaperSize[PageNameCBox.ItemIndex].Y; pDevModeInput.dmPaperWidth := arr_PaperSize[PageNameCBox.ItemIndex].X; //pDevModeInput.dmPaperSize := DMPAPER_USER; //要改变项 pDevModeInput.dmFields := pDevModeInput.dmFields or DM_FORMNAME; pDevModeInput.dmFields := pDevModeInput.dmFields or DM_PAPERLENGTH; pDevModeInput.dmFields := pDevModeInput.dmFields or DM_PAPERWIDTH; pDevModeInput.dmFields := pDevModeInput.dmFields or DM_PAPERSIZE; DocumentProperties(0, Printer.Handle, arr_szDeviceName, pDevModeInput^, pDevModeInput^, DM_OUT_BUFFER); finally GlobalUnLock(DevHandle); //GlobalFree(DevHandle); end; //} //*) PageHeightEdit.Text := FloatToSTr(arr_PaperSize[PageNameCBox.ItemIndex].X / 10); PageWidthEdit.Text := FloatToSTr(arr_PaperSize[PageNameCBox.ItemIndex].Y / 10); //2. 设置打印机 if Sender = nil then exit; //{ Printer.GetPrinter(arr_szDeviceName,arr_szDriver,arr_szPort,DevHandle); try L_IniFile.WriteString('纸张','幅面',PageNameCBox.Text); pDevModeInput := PDeviceMode(GlobalLock(DevHandle)); StrCopy(pDevModeInput.dmFormName,PChar(PageNameCBox.Items[PageNameCBox.ItemIndex])); //pDevModeInput.dmPaperLength := arr_PaperSize[PageNameCBox.ItemIndex].Y; //pDevModeInput.dmPaperWidth := arr_PaperSize[PageNameCBox.ItemIndex].X; if (PageNameCBox.ItemIndex = 0) then begin pDevModeInput.dmPaperSize := DMPAPER_A4; end else if (PageNameCBox.ItemIndex = 1) then begin pDevModeInput.dmPaperSize := DMPAPER_A3; end; //要改变项 pDevModeInput.dmFields := pDevModeInput.dmFields or DM_FORMNAME; //pDevModeInput.dmFields := pDevModeInput.dmFields or DM_PAPERLENGTH; //pDevModeInput.dmFields := pDevModeInput.dmFields or DM_PAPERWIDTH; pDevModeInput.dmFields := pDevModeInput.dmFields or DM_PAPERSIZE; DocumentProperties(0, Printer.Handle, arr_szDeviceName, pDevModeInput^, pDevModeInput^, DM_OUT_BUFFER); finally GlobalUnLock(DevHandle); //GlobalFree(DevHandle); end; end; procedure TReportAdjuster.SetDefaultBtnClick(Sender: TObject); begin case ReportConfigPageControl.TabIndex of 0 : SetDefaultPrinter; 1 : SetDefaultPageFormat; 2 : SetDefaultReportFormat; end; end; procedure TReportAdjuster.SetDefaultPrinter; begin // end; procedure TReportAdjuster.SetDefaultPageFormat; begin // end; procedure TReportAdjuster.SetDefaultReportFormat; begin // end; procedure TReportAdjuster.PaintImage; var FontRec : TFontRec; DrawRect : TRect; begin //1. 画底色 if L_intPageElementIndex = -1 then begin ReportPageImage.Canvas.Brush.Color := clInactiveCaption; ReportPageImage.Canvas.Rectangle(0,0,ReportPageImage.Width,ReportPageImage.Height); ReportPageImage.Canvas.Brush.Color := clBtnface; end; //2. 画字 IniFontRec(FontRec); FontRec.FontColor := clWhite; FontRec.FontName := ReportAdjuster.Font.Name; FontRec.FontHeight := Round(ReportAdjuster.Font.Size * ReportAdjuster.Font.PixelsPerInch / 72); //2.a DrawRect := Rect(0,0,78,25); if L_intPageElementIndex = 0 then begin FontRec.FontBold := 600; end else begin FontRec.FontBold := 400; end; InDrawText('表标题',DrawRect,FontRec,4,False,ReportPageImage.Canvas,False,1,Rect(0,0,0,0)); //2.b DrawRect := Rect(79,0,157,25); if L_intPageElementIndex = 1 then begin FontRec.FontBold := 600; end else begin FontRec.FontBold := 400; end; InDrawText('列标题',DrawRect,FontRec,4,False,ReportPageImage.Canvas,False,1,Rect(0,0,0,0)); //2.c DrawRect := Rect(158,0,236,25); if L_intPageElementIndex = 2 then begin FontRec.FontBold := 600; end else begin FontRec.FontBold := 400; end; InDrawText('表正文',DrawRect,FontRec,4,False,ReportPageImage.Canvas,False,1,Rect(0,0,0,0)); //2.d DrawRect := Rect(237,0,315,25); if L_intPageElementIndex = 3 then begin FontRec.FontBold := 600; end else begin FontRec.FontBold := 400; end; InDrawText('表合计',DrawRect,FontRec,4,False,ReportPageImage.Canvas,False,1,Rect(0,0,0,0)); //2.e DrawRect := Rect(316,0,394,25); if L_intPageElementIndex = 4 then begin FontRec.FontBold := 600; end else begin FontRec.FontBold := 400; end; InDrawText('表眉/表脚',DrawRect,FontRec,4,False,ReportPageImage.Canvas,False,1,Rect(0,0,0,0)); //2.f DrawRect := Rect(395,0,473,25); if L_intPageElementIndex = 5 then begin FontRec.FontBold := 600; end else begin FontRec.FontBold := 400; end; InDrawText('页眉/页脚',DrawRect,FontRec,4,False,ReportPageImage.Canvas,False,1,Rect(0,0,0,0)); end; procedure TReportAdjuster.ReportPageImageMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin PageElementIndex := X div 79; end; procedure TReportAdjuster.SetElementIndex(IDX : integer); var strFontName : String; intFontSize : integer; begin if ((L_intPageElementIndex >= 0) and (L_intPageElementIndex <= 5)) then begin ReportPageImage.Canvas.Brush.Color := clInactiveCaption; ReportPageImage.Canvas.Pen.Color := clInactiveCaption; ReportPageImage.Canvas.Rectangle(L_intPageElementIndex * 79 ,0 , (L_intPageElementIndex + 1) * 79, ReportPageImage.Height); ReportPageImage.Canvas.Pen.Color := clBlack; end; if ((IDX >= 0) and (IDX <= 5)) and (IDX <> L_intPageElementIndex) then begin L_intPageElementIndex := IDX; ReportPageImage.Canvas.Brush.Color := clGradientActiveCaption; ReportPageImage.Canvas.Pen.Color := clInactiveCaption; ReportPageImage.Canvas.Rectangle(L_intPageElementIndex * 79 ,0 , (L_intPageElementIndex + 1) * 79, ReportPageImage.Height); ReportPageImage.Canvas.Pen.Color := clBlack; //获取相关信息 case L_intPageElementIndex of 0 : begin //表标题 FontCBox.Text := L_IniFile.ReadString('页面','表标题_字体','宋体'); FontSizeCBox.Text := L_IniFile.ReadString('页面','表标题_字体大小','9'); BoldSBtn.Down := (L_IniFile.ReadInteger('页面','表标题_字体粗',0) = 1 ); ItalicSBtn.Down := (L_IniFile.ReadInteger('页面','表标题_字体斜',0) = 1 ); UnderlineSBtn.Down := (L_IniFile.ReadInteger('页面','表标题_字体下滑线',0) = 1 ); RowHeightSpinEdit.Value := L_IniFile.ReadInteger('页面','表标题_行高',1) end; 1 : begin //列标题 FontCBox.Text := L_IniFile.ReadString('页面','列标题_字体','宋体'); FontSizeCBox.Text := L_IniFile.ReadString('页面','列标题_字体大小','9'); BoldSBtn.Down := (L_IniFile.ReadInteger('页面','列标题_字体粗',0) = 1 ); ItalicSBtn.Down := (L_IniFile.ReadInteger('页面','列标题_字体斜',0) = 1 ); UnderlineSBtn.Down := (L_IniFile.ReadInteger('页面','列标题_字体下滑线',0) = 1 ); RowHeightSpinEdit.Value := L_IniFile.ReadInteger('页面','列标题_行高',1) end; 2 : begin //表正文 FontCBox.Text := L_IniFile.ReadString('页面','表正文_字体','宋体'); FontSizeCBox.Text := L_IniFile.ReadString('页面','表正文_字体大小','9'); BoldSBtn.Down := (L_IniFile.ReadInteger('页面','表正文_字体粗',0) = 1 ); ItalicSBtn.Down := (L_IniFile.ReadInteger('页面','表正文_字体斜',0) = 1 ); UnderlineSBtn.Down := (L_IniFile.ReadInteger('页面','表正文_字体下滑线',0) = 1 ); RowHeightSpinEdit.Value := L_IniFile.ReadInteger('页面','表正文_行高',1) end; 3 : begin //表合计 FontCBox.Text := L_IniFile.ReadString('页面','表合计_字体','宋体'); FontSizeCBox.Text := L_IniFile.ReadString('页面','表合计_字体大小','9'); BoldSBtn.Down := (L_IniFile.ReadInteger('页面','表合计_字体粗',0) = 1 ); ItalicSBtn.Down := (L_IniFile.ReadInteger('页面','表合计_字体斜',0) = 1 ); UnderlineSBtn.Down := (L_IniFile.ReadInteger('页面','表合计_字体下滑线',0) = 1 ); RowHeightSpinEdit.Value := L_IniFile.ReadInteger('页面','表合计_行高',1) end; 4 : begin //表眉/表脚 FontCBox.Text := L_IniFile.ReadString('页面','表眉/表脚_字体','宋体'); FontSizeCBox.Text := L_IniFile.ReadString('页面','表眉/表脚_字体大小','9'); BoldSBtn.Down := (L_IniFile.ReadInteger('页面','表眉/表脚_字体粗',0) = 1 ); ItalicSBtn.Down := (L_IniFile.ReadInteger('页面','表眉/表脚_字体斜',0) = 1 ); UnderlineSBtn.Down := (L_IniFile.ReadInteger('页面','表眉/表脚_字体下滑线',0) = 1 ); RowHeightSpinEdit.Value := L_IniFile.ReadInteger('页面','表眉/表脚_行高',1) end; 5 : begin //页眉/页脚 FontCBox.Text := L_IniFile.ReadString('页面','页眉/页脚_字体','宋体'); FontSizeCBox.Text := L_IniFile.ReadString('页面','页眉/页脚_字体大小','9'); BoldSBtn.Down := (L_IniFile.ReadInteger('页面','页眉/页脚_字体粗',0) = 1 ); ItalicSBtn.Down := (L_IniFile.ReadInteger('页面','页眉/页脚_字体斜',0) = 1 ); UnderlineSBtn.Down := (L_IniFile.ReadInteger('页面','页眉/页脚_字体下滑线',0) = 1 ); RowHeightSpinEdit.Value := L_IniFile.ReadInteger('页面','页眉/页脚_行高',1) end; end; end; PaintImage; end; procedure TReportAdjuster.UpEdgeSpinEditChange(Sender: TObject); begin if L_IniFile <> nil then begin L_IniFile.WriteInteger('纸张','左边距',LeftEdgeSpinEdit.Value); L_IniFile.WriteInteger('纸张','右边距',RightEdgeSpinEdit.Value); L_IniFile.WriteInteger('纸张','上边距',UpEdgeSpinEdit.Value); L_IniFile.WriteInteger('纸张','下边距',DownEdgeSpinEdit.Value); ReportChanged := true; end; end; procedure TReportAdjuster.OKBtnClick(Sender: TObject); var i : integer; begin //1. 把本次改动的配置放在保留配置文件中 DeleteFile(ExePath + STR_REVERSE_CONFIG_TEXT); CopyFileTo(ExePath + STR_CONFIG_TEXT, ExePath + STR_REVERSE_CONFIG_TEXT); //2. 报表保存 for i := 0 to slReports.Count - 1 do begin DeleteFile(ExePath + 'BillsEditorReports\Reserved\'+ slReports[i] + FILEEXT); CopyFileTo(ExePath + 'BillsEditorReports\'+ slReports[i] + FILEEXT, ExePath + 'BillsEditorReports\Reserved\'+ slReports[i] + FILEEXT); end; //3. ReportChanged := True; SetupChanged := true; if bHeadTailChangd then begin // end; Close; end; procedure TReportAdjuster.CloseBtnClick(Sender: TObject); var i : integer; begin //1. 还原以前的配置(系统打印机除外) DeleteFile(ExePath + STR_CONFIG_TEXT); CopyFileTo(ExePath + STR_REVERSE_CONFIG_TEXT, ExePath + STR_CONFIG_TEXT); //2. 报表还原 for i := 0 to slReports.Count - 1 do begin DeleteFile(ExePath + 'BillsEditorReports\'+ slReports[i] + FILEEXT); CopyFileTo(ExePath + 'BillsEditorReports\Reserved\'+ slReports[i] + FILEEXT, ExePath + 'BillsEditorReports\'+ slReports[i] + FILEEXT); end; //3. SetupChanged := false; ReportChanged := false; Close; end; procedure TReportAdjuster.SetToDefaultBtnClick(Sender: TObject); begin //设置为默认值 end; procedure TReportAdjuster.DefaultConfigBtnClick(Sender: TObject); var ReportName : string; begin case ReportConfigPageControl.ActivePageIndex of 0,1 : begin //还原默认设置 DeleteFile(ExePath + STR_CONFIG_TEXT); CopyFileTo(ExePath + '报表打印机初始默认设置.INI', ExePath + STR_CONFIG_TEXT); IniPrinterPage; IniReportPage; //FormShow(self); end; 2 : begin //(* if ReportsCBox.ItemIndex >= 0 then begin FReportManager.RecordNo := Integer(ReportsCBox.Items.Objects[ReportsCBox.ItemIndex]); ReportName := ExtractFileName(FReportManager.FieldValue['FileName']); DeleteFile(ExePath + 'BillsEditorReports\'+ ReportName); CopyFileTo(ExePath + 'BillsEditorReports\Reserved\'+ ReportName, ExePath + 'BillsEditorReports\'+ ReportName); ReportsCBoxChange(nil); end; //*) end; end; end; procedure TReportAdjuster.FontCBoxChange(Sender: TObject); var strCap : String; intBold, intItalic, intUnderline : integer; begin if L_IniFile <> nil then begin strCap := getCaptionString; intBold := 0; intItalic := 0; intUnderline := 0; if BoldSBtn.Down then intBold := 1; if ItalicSBtn.Down then intItalic := 1; if UnderlineSBtn.Down then intUnderline := 1; L_IniFile.WriteString('页面', strCap + '_字体',FontCBox.Text); L_IniFile.WriteString('页面', strCap + '_字体大小',FontSizeCBox.Text); L_IniFile.WriteInteger('页面',strCap + '_字体粗',intBold); L_IniFile.WriteInteger('页面',strCap + '_字体斜',intItalic); L_IniFile.WriteInteger('页面',strCap + '_字体下滑线',intUnderline); L_IniFile.WriteInteger('页面',strCap + '_行高',RowHeightSpinEdit.Value); end; end; function TReportAdjuster.getCaptionString : String; begin Result := ''; case L_intPageElementIndex of 0 : Result := '表标题'; 1 : Result := '列标题'; 2 : Result := '表正文'; 3 : Result := '表合计'; 4 : Result := '表眉/表脚'; 5 : Result := '页眉/页脚'; end; end; procedure TReportAdjuster.checkCurReport; var i : integer; bHas : boolean; ReportName : string; begin bHas := false; ReportName := getCurReportName(); //(* for i := 0 to slReports.Count - 1 do begin if ReportName = slReports[i] then begin bHas := true; break; end; end; if not(bHas) then begin slReports.Add(ReportName); if ReportName = SetupReportName then begin ReportChanged := true; end; end; //*) end; function TReportAdjuster.getHeadTailIndex(strCompareName : string) : integer; var i : integer; begin Result := 0; //0是空白 for i := 1 to ZjShowSelectionCBox.Items.Count - 1 do begin if strCompareName = ZjShowSelectionCBox.Items[i] then begin Result := i; break; end; end; end; function TReportAdjuster.getHeadTailObj(HeadType : integer; TypeIDX : integer): PHeadRec; begin //根据表头尾对象及ID设置属性 Result := pcxSmartCostRpt.newHeadTailObj(HeadType); if (Result <> nil) and (TypeIDX > 0) then begin Result.Name := ZjShowSelectionCBox.Items[TypeIDX]; Result.Align := 3; if TypeIDX <> 17 then Result.Prefix := ZjShowSelectionCBox.Items[TypeIDX] + ': ' else Result.Prefix := ''; // Result.Field := pcxSmartCostRpt.getFieldByID(1000 + TypeIDX); if Result.Field = nil then Result.Param := pcxSmartCostRpt.getParamByID(1000 + TypeIDX); //备注: 1. 建设项目名称(对应FieldID=1001) 2. 单位工程名称(对应FieldID=1002) // 3. 工程地点(对应FieldID=1003) 4. 建设单位(对应FieldID=1004) // 5. 投标人(对应FieldID=1005) 6. 编制(对应FieldID=1006) // 7. 编制人证号(对应FieldID=1007) 8. 复核(对应FieldID=1008) // 9. 复核人证号(对应FieldID=1009) 10.编制范围(对应FieldID=1010) // 11.编制时间(年月日)(对应FieldID=1011) // 以上是项目级 // 12.分项工程名称(对应FieldID=1012) 13.分项工程编号(对应FieldID=1013) // 14.计量单位(对应FieldID=1014) 15. 数量(对应FieldID=1015) // 16.单价(对应FieldID=1016) // 以上是清单级 // 17.表编号(对应FieldID=1017) // 18.打印时间(对应FieldID=1018) // 这里假设所有的相关参数都已经存在(预先写好了的!),名称与ID确定, // 如果没有的话,说明类型不一样,不能选择 end; end; procedure TReportAdjuster.ReportCellLineSpinEditChange(Sender: TObject); begin if (L_IniFile <> nil) then begin if TestReal(ReportCellLineSpinEdit.Text) then begin //L_IniFile.WriteInteger('页面', '表格线粗',ReportCellLineSpinEdit.Value); L_IniFile.WriteFloat('页面', '表格线粗',StrToFloat(ReportCellLineSpinEdit.Text)); end else begin ReportCellLineSpinEdit.Text := '0.75'; end; end; end; procedure TReportAdjuster.BorderLineSpinEditChange(Sender: TObject); begin if (L_IniFile <> nil) then begin if TestReal(ReportCellLineSpinEdit.Text) then begin L_IniFile.WriteFloat('页面', '表格线粗', StrToFloat(ReportCellLineSpinEdit.Text)); L_IniFile.WriteInteger('页面', '边框线粗',BorderLineSpinEdit.Value); end; end; end; procedure TReportAdjuster.RepHeadFootLineCHKClick(Sender: TObject); begin if L_IniFile <> nil then begin if TCheckBox(Sender).Checked then L_IniFile.WriteInteger('页面', TCheckBox(Sender).Caption,1) else L_IniFile.WriteInteger('页面', TCheckBox(Sender).Caption,0) end; end; procedure TReportAdjuster.zgReportElementsGetCellEditor(Sender: TObject; ACoord: TPoint; var AControl: TWinControl); begin if TZjGrid(Sender).Items[ACoord].ClassType = TZjComboCell then begin AControl := ZjShowSelectionCBox; end; end; procedure TReportAdjuster.zgReportElementsEditorLoadCell(Sender: TObject; ACoord: TPoint; AControl: TWinControl); begin ZjShowSelectionCBox.ItemIndex := getHeadTailIndex(zgReportElements.Cells[ACoord.X,ACoord.Y].Text);; if ZjShowSelectionCBox.ItemIndex <= 0 then begin ZjShowSelectionCBox.Items[0] := zgReportElements.Cells[ACoord.X,ACoord.Y].Text; ZjShowSelectionCBox.ItemIndex := 0; end; end; procedure TReportAdjuster.zgReportElementsEditorSaveCell(Sender: TObject; ACoord: TPoint; AControl: TWinControl); var ObjList : TList; ObjType : integer; i,j : integer; idx : integer; intMaxHeadTailID : integer; HeadTailObj : PHeadRec; PageObj : PPageRec; douRowHeight : double; intRowSteps : integer; begin //在修改之前先获取旧ITEM信息 if HeadRBtn.Checked then begin idx := arr_HeadIndex[ACoord.X][ACoord.Y - 1]; arr_HeadIndex[ACoord.X][ACoord.Y - 1] := ZjShowSelectionCBox.ItemIndex; ObjType := 0; end else begin idx := arr_FootIndex[ACoord.X][ACoord.Y - 1]; arr_FootIndex[ACoord.X][ACoord.Y - 1] := ZjShowSelectionCBox.ItemIndex; ObjType := 1; end; if idx <> ZjShowSelectionCBox.ItemIndex then begin //bHeadTailChangd := true; //checkCurReport; //{ intMaxHeadTailID := 0; //1. 清除旧的表头尾对象 if (idx < intMaxItem) then begin ObjList := TList.Create; try if HeadRBtn.Checked then pcxSmartCostRpt.getAllHeadObjs(ObjList) else pcxSmartCostRpt.getAllTailObjs(ObjList); for i := 0 to ObjList.Count - 1 do begin if (intMaxHeadTailID < PHeadRec(ObjList[i]).ID) then intMaxHeadTailID := PHeadRec(ObjList[i]).ID + 1; if PHeadRec(ObjList[i]).Name = ZjShowSelectionCBox.Items[idx] then begin pcxSmartCostRpt.delHeadTailObj(ObjType, ObjList[i]); //break; //备注: 这里以名称为制约因素,并且是清空所有的同名对象 end; end; finally ObjList.Free; end; end else begin ObjList := TList.Create; try pcxSmartCostRpt.getAllPageObjs(ObjList); for i := 0 to ObjList.Count - 1 do begin if PPageRec(ObjList[i]).Name = ZjShowSelectionCBox.Items[idx] then begin //pcxSmartCostRpt.delPageObj(ObjList[i]); PPageRec(ObjList[i]).Visible := false; pcxSmartCostRpt.setPageObj(PPageRec(ObjList[i])); break; end; end; finally ObjList.Free; end; end; //2. 创建新的表头尾对象 if ZjShowSelectionCBox.ItemIndex > 0 then begin if (ZjShowSelectionCBox.ItemIndex < intMaxItem) then begin //增加表头尾对象 HeadTailObj := getHeadTailObj(ObjType,ZjShowSelectionCBox.ItemIndex); //设置相关属性 if HeadTailObj <> nil then begin HeadtailObj.ExArea.ExLeft := ACoord.X * (100/zgReportElements.ColCount); //HeadtailObj.ExArea.ExRight:= HeadTailObj.ExArea.ExLeft + 100/zgReportElements.ColCount; HeadtailObj.ExArea.ExRight:= HeadTailObj.ExArea.ExLeft + 200/zgReportElements.ColCount; if HeadtailObj.ExArea.ExRight > 100 then HeadtailObj.ExArea.ExRight := 100; HeadtailObj.ExArea.ExTop := ACoord.Y; HeadtailObj.ExArea.ExBottom := 1; end; if (HeadTailObj.Field <> nil) or (HeadTailObj.Param <> nil) then pcxSmartCostRpt.setHeadTailObj(ObjType, HeadTailObj) else //提示并释放对象 begin Application.MessageBox('您选取了不符合本表类型的选项,请重新再选一个。','注意',0); ZjShowSelectionCBox.ItemIndex := 0; zgReportElements.Cells[ACoord.X,ACoord.Y].Text := ''; //Dispose(HeadTailObj); pcxSmartCostRpt.delHeadTailObj(ObjType,HeadTailObj); end; end else begin PageObj := nil; ObjList := TList.Create; try pcxSmartCostRpt.getAllPageObjs(ObjList); for i := 0 to ObjList.Count - 1 do begin if PPageRec(ObjList[i]).Name = ZjShowSelectionCBox.Items[ZjShowSelectionCBox.ItemIndex] then begin PageObj := ObjList[i]; PPageRec(ObjList[i]).Visible := true; PageObj.PageType := ZjShowSelectionCBox.ItemIndex - intMaxItem; break; end; end; finally ObjList.Free; end; if (PageObj = nil) then PageObj := pcxSmartCostRpt.newPageObj(ZjShowSelectionCBox.ItemIndex - intMaxItem); //设置相关属性 PageObj.Name := ZjShowSelectionCBox.Items[ZjShowSelectionCBox.ItemIndex]; case ObjType of 0 : PageObj.AreaName := '表头'; 1 : PageObj.AreaName := '表尾'; end; PageObj.Align := 3; PageObj.AreaType := false; PageObj.ExArea.ExLeft := ACoord.X * (100/zgReportElements.ColCount); PageObj.ExArea.ExRight:= PageObj.ExArea.ExLeft + 100/zgReportElements.ColCount; if PageObj.ExArea.ExRight > 100 then PageObj.ExArea.ExRight := 100; PageObj.ExArea.ExTop := ACoord.Y; PageObj.ExArea.ExBottom := 1; // PageObj.FontRec.FontName := L_IniFile.ReadString('页面','表眉/表脚_字体','宋体'); PageObj.FontRec.FontHeight := Round(L_IniFile.ReadInteger('页面','表眉/表脚_字体大小',12)*4/3); PageObj.FontRec.FontBold := 400 + L_IniFile.ReadInteger('页面','表眉/表脚_字体粗',0)*200; PageObj.FontRec.FontItalic := L_IniFile.ReadInteger('页面','表眉/表脚_字体斜',0); PageObj.FontRec.FontUnderLine := L_IniFile.ReadInteger('页面','表眉/表脚_字体下滑线',0); // if (ZjShowSelectionCBox.ItemIndex = intMaxItem) then begin PageObj.PrefixContent := '共'; PageObj.SufixContent := '页'; end else if (ZjShowSelectionCBox.ItemIndex = (intMaxItem + 1)) then begin PageObj.PrefixContent := '第'; PageObj.SufixContent := '页'; PageObj.PageDist := seStartPage.Value - 1; end; //储存 pcxSmartCostRpt.setPageObj(PageObj); end; end; //3. 重新设置表头,尾的高度及层数 douRowHeight := 0; intRowSteps := 1; for i := 3 downto 1 do begin for j := 0 to 7 do begin if Trim(zgReportElements.Cells[j,i].Text) <> '' then begin douRowHeight := DOU_DEFAULTHEIGHT * i; intRowSteps := i; break; end; end; if douRowHeight > 0.5 then break; end; pcxSmartCostRpt.setNewHeadTailAreaProperties(ObjType, douRowHeight, intRowSteps); //4. 保存 SaveRpt(getCurReportName()); //} end; end; procedure TReportAdjuster.ReportsCBoxChange(Sender: TObject); var TitleRec : PTitleRec; strPath : String; strFileName : String; intPos : integer; FileHandle : THandle; FindFileRec : TWIN32FindData; RepObjList : TList; i,j : integer; ContentObj : PContentRec; CrossContentObj : PCrossContentRec; ColumnObj : PColumnRec; ObjList : TList; PageObj : PPageRec; Param : PParamRec; //ReportNameMod : string; begin //(* if ReportsCBox.ItemIndex >= 0 then begin //bHasModified := false; //事件设置 zgReportProperty.OnCellValueChanged := nil; TitleEdit.OnChange := nil; getReport(getCurReportName()); { ReportNameMod := ExePath + 'SmartCostReports\' + ReportsCBox.Items[ReportsCBox.ItemIndex] + strModified + FILEEXT; if FileExists(ReportNameMod) then bHasModified := true; if bHasModified then getReport(ReportNameMod); //} //1. 显示Title TitleRec := pcxSmartCostRpt.getTitleByID(1); if TitleRec <> nil then TitleEdit.Text := TitleRec.Content else TitleEdit.Text := EmptyStr; if (TitleRec.Field <> nil) or (TitleRec.Param <> nil) then TitleEdit.ReadOnly := true else TitleEdit.ReadOnly := false; //2. 查找格式 (* StyleCBox.Clear; StyleCBox.Items.Add('当前'); strPath := ExePath + 'SmartCostReports\Formats\' + ReportsCBox.Items[ReportsCBox.ItemIndex]; if ForceDirectories(strPath) then begin FileHandle := FindFirstFile(PChar(strPath + '\*' + FILEEXT),FindFileRec); if FileHandle <> INVALID_HANDLE_VALUE then begin strFileName := ExtractFileName(FindFileRec.cFileName); intPos := Pos(FILEEXT, strFileName); if intPos > 0 then begin strFileName := Copy(strFileName, 1 , intPos - 1 ); end; StyleCBox.Items.Add(strFileName); while FindNextFile(FileHandle,FindFileRec) do begin strFileName := ExtractFileName(FindFileRec.cFileName); intPos := Pos(FILEEXT, strFileName); if intPos > 0 then begin strFileName := Copy(strFileName, 1 , intPos - 1 ); end; StyleCBox.Items.Add(strFileName); end; end; end; StyleCBox.ItemIndex := 0; //*) //3. 报表方向 OrientationGroup.OnClick := nil; if (pcxSmartCostRpt.ReportOrientation = '横') then OrientationGroup.ItemIndex := 1 else OrientationGroup.ItemIndex := 0; OrientationGroup.OnClick := OrientationGroupClick; //4. editLineHeight.OnChange := nil; if (TestReal(pcxSmartCostRpt.FlowContentOrgHeight)) then begin editLineHeight.Text := FloatToStr(StrToFloat(pcxSmartCostRpt.FlowContentOrgHeight)*10); editLineHeight.Enabled := true; editLineHeight.OnChange := editLineHeightChange; end else begin editLineHeight.Enabled := false; end; //5. 检测其他报表元素项 RepObjList := TList.Create; try //a. 本页小计 pcxSmartCostRpt.getAllSumObjs(0,RepObjList); if RepObjList.Count > 0 then begin PrintPageAmountCHK.Enabled := true; PrintPageAmountCHK.OnClick := nil; if PSumRec(RepObjList[0]).Visible then PrintPageAmountCHK.Checked := true else PrintPageAmountCHK.Checked := false; PrintPageAmountCHK.OnClick := PrintPageAmountCHKClick; end else begin PrintPageAmountCHK.Enabled := false; end; //b. 表栏头 bCrossObj := false; pcxSmartCostRpt.getAllFlowShowContentObjs(L_ContentObjList); if (L_ContentObjList.Count = 0) then begin pcxSmartCostRpt.getAllCrossContentObjs(L_ContentObjList); bCrossObj := true; end; zgReportProperty.ColCount := L_ContentObjList.Count + 1; if not(bCrossObj) then begin for i := 0 to L_ContentObjList.Count - 1 do begin ContentObj := L_ContentObjList[i]; ColumnObj := ContentObj.Column; if ColumnObj <> nil then begin zgReportProperty.Cells[i + 1, 0].Text := ColumnObj.Name; zgReportProperty.Cells[i + 1, 1].Text := ColumnObj.Content; //宽度目前是百份比 zgReportProperty.Cells[i + 1, 2].Text := FloatToStr(ColumnObj.ExArea.ExRight - ColumnObj.ExArea.ExLeft); zgReportProperty.Cells[i + 1, 3].Text := GetNameByAlign(ContentObj.Align); //精度 zgReportProperty.Cells[i + 1, 4].Text := IntToStr(ContentObj.ShowInfoRec.Precision); end; end; end else begin for i := 0 to L_ContentObjList.Count - 1 do begin CrossContentObj := L_ContentObjList[i]; ColumnObj := CrossContentObj.CrossContent.Column; if ColumnObj <> nil then begin zgReportProperty.Cells[i + 1, 0].Text := ColumnObj.Name; zgReportProperty.Cells[i + 1, 1].Text := ColumnObj.Content; //宽度目前是百份比 zgReportProperty.Cells[i + 1, 2].Text := FloatToStr(ColumnObj.ExArea.ExRight - ColumnObj.ExArea.ExLeft); zgReportProperty.Cells[i + 1, 3].Text := GetNameByAlign(CrossContentObj.CrossContent.Align); //精度 zgReportProperty.Cells[i + 1, 4].Text := IntToStr(CrossContentObj.CrossContent.ShowInfoRec.Precision); end; end; end; finally RepObjList.Free; end; //6. 打开或设置其他 HeadRBtn.Enabled := true; HeadRBtn.Checked := false; TailRBtn.Enabled := true; TailRBtn.Checked := false; seStartPage.Enabled := true; ObjList := TList.Create; try pcxSmartCostRpt.getAllPageObjs(ObjList); for i := 0 to ObjList.Count - 1 do begin PageObj := ObjList[i]; if PageObj.PageType = 1 then begin seStartPage.Value := PageObj.PageDist + 1; pcxSmartCostRpt.setPageObj(PageObj); //保存 //SaveRpt(getCurReportName()); break; end; end; finally ObjList.Free; end; zgReportProperty.OnCellValueChanged := zgReportPropertyCellValueChanged; TitleEdit.OnChange := TitleEditChange; for i := 0 to 7 do begin for j := 0 to 2 do begin arr_HeadIndex[i][j] := 0; arr_FootIndex[i][j] := 0; end; end; Param := pcxSmartCostRpt.getParamByID(3001); if Param <> nil then begin seRefPage.OnChange := nil; seRefPage.Enabled := true; seRefPage.Value := Param.Value; seRefPage.OnChange := seRefPageChange; end else begin seRefPage.Enabled := false; end; HeadRBtn.Checked := true; end; //*) end; procedure TReportAdjuster.SaveFormatBtnClick(Sender: TObject); var strFormat : String; begin //保存格式 (* strFormat := InputBox('格式保存','请输入要保存的格式名称',''); if strFormat <> EmptyStr then begin //1. 检测是否有重复的格式 strFormat := ExePath + 'SmartCostReports\Formats\' + ReportsCBox.Items[ReportsCBox.ItemIndex] + '\' + strFormat + FILEEXT; if FileExists(strFormat) then begin if Application.MessageBox('','',MB_YESNO) <> IDYES then exit; end; CopyFileTo(ExePath +'SmartCostReports\'+ ReportsCBox.Items[ReportsCBox.ItemIndex] + FILEEXT, strFormat); end; //*) end; procedure TReportAdjuster.StyleCBoxChange(Sender: TObject); var strFormat : String; begin //选择新格式 end; procedure TReportAdjuster.OrientationGroupClick(Sender: TObject); var strOri : string; begin case OrientationGroup.ItemIndex of 0 : strOri := '纵'; 1 : strOri := '横'; end; pcxSmartCostRpt.ReportOrientation := strOri; SaveRpt(getCurReportName()); end; procedure TReportAdjuster.PrintPageAmountCHKClick(Sender: TObject); var SumObjList : TList; douHeight : double; intSumSteps : integer; SumObj : PSumRec; i : integer; begin case PrintPageAmountCHK.Checked of true : begin SumObjList := TList.Create ; try //1. 设置所有页小计项VISIBLE为TRUE pcxSmartCostRpt.getAllSumObjs(0, SumObjList); for i := 0 to SumObjList.Count - 1 do begin SumObj := PSumRec(SumObjList[i]); SumObj.Visible := true; pcxSmartCostRpt.setSumObj(SumObj); end; //如果有页小计的话,就有,没有就说明不需要,不然如何去确认合计字段? if SumObjList.Count > 0 then begin intSumSteps := pcxSmartCostRpt.SumSteps; Inc(intSumSteps); douHeight := pcxSmartCostRpt.SumOriginalHeight; if (douHeight = 0.0) then Dec(intSumSteps); douHeight := douHeight + DOU_DEFAULTHEIGHT; //要减掉页小计的高度,约定是DOU_DEFAULTHEIGHT,单位是厘米, pcxSmartCostRpt.setNewSumAreaProperties(douHeight,intSumSteps); //3. 整理其他合计项 pcxSmartCostRpt.getAllSumObjs(1, SumObjList); //设置总计项 for i := 0 to SumObjList.Count - 1 do begin SumObj := PSumRec(SumObjList[i]); SumObj.ExArea.ExTop := SumObj.ExArea.ExTop + 1; pcxSmartCostRpt.setSumObj(SumObj); end; pcxSmartCostRpt.getAllSumObjs(2, SumObjList); //设置章总计项 for i := 0 to SumObjList.Count - 1 do begin SumObj := PSumRec(SumObjList[i]); SumObj.ExArea.ExTop := SumObj.ExArea.ExTop + 1; pcxSmartCostRpt.setSumObj(SumObj); end; //4. 保存 SaveRpt(getCurReportName()); end; finally sumObjList.Free; end; end; false: begin SumObjList := TList.Create ; try //1. 设置所有页小计项VISIBLE为FALSE //pcxSmartCostRpt.delSumObjs(0); pcxSmartCostRpt.getAllSumObjs(0, SumObjList); for i := 0 to SumObjList.Count - 1 do begin SumObj := PSumRec(SumObjList[i]); SumObj.Visible := false; pcxSmartCostRpt.setSumObj(SumObj); end; //2. 整理合计框高度 if SumObjList.Count > 0 then begin douHeight := pcxSmartCostRpt.SumOriginalHeight; douHeight := douHeight - DOU_DEFAULTHEIGHT; //要减掉页小计的高度,约定是DOU_DEFAULTHEIGHT,单位是厘米, if douHeight < 0 then douHeight := 0; intSumSteps := pcxSmartCostRpt.SumSteps; Dec(intSumSteps); if intSumSteps < 1 then intSumSteps := 1; pcxSmartCostRpt.setNewSumAreaProperties(douHeight,intSumSteps); //3. 整理其他合计项 pcxSmartCostRpt.getAllSumObjs(1, SumObjList); //设置总计项 for i := 0 to SumObjList.Count - 1 do begin SumObj := PSumRec(SumObjList[i]); SumObj.ExArea.ExTop := SumObj.ExArea.ExTop - 1; if SumObj.ExArea.ExTop < 0 then SumObj.ExArea.ExTop := 1; pcxSmartCostRpt.setSumObj(SumObj); end; pcxSmartCostRpt.getAllSumObjs(2, SumObjList); //设置章总计项 for i := 0 to SumObjList.Count - 1 do begin SumObj := PSumRec(SumObjList[i]); SumObj.ExArea.ExTop := SumObj.ExArea.ExTop - 1; if SumObj.ExArea.ExTop < 0 then SumObj.ExArea.ExTop := 1; pcxSmartCostRpt.setSumObj(SumObj); end; //4. 保存 SaveRpt(getCurReportName()); end; finally SumObjList.free; end; end; end; end; procedure TReportAdjuster.HeadRBtnClick(Sender: TObject); var i : integer; ObjList : TList; PageObjList : TList; HeadTailObj : PHeadRec; PageObj : PPageRec; Row, Col : integer; strAreaName : string; intType : integer; begin ObjList := TList.Create; PageObjList := TList.Create; try pcxSmartCostRpt.getAllPageObjs(PageObjList); case TRadioButton(Sender).tag of 0 : begin pcxSmartCostRpt.getAllHeadObjs(ObjList); strAreaName := '表头'; intType := 0; end; 1 : begin pcxSmartCostRpt.getAllTailObjs(ObjList); strAreaName := '表尾'; intType := 1; end; end; for i := PageObjList.Count - 1 downto 0 do begin PageObj := PageObjList[i]; if (PageObj.AreaName <> strAreaName) then begin PageObjList.Delete(i); end; end; zgReportElements.Clear; //1. 表头表尾项 for i := 0 to zgReportElements.ColCount - 1 do begin zgReportElements.CellClass.Cols[i] := TZjComboCell; end; for i := 0 to ObjList.Count - 1 do begin HeadTailObj := ObjList[i]; Row := Round(HeadTailObj.ExArea.ExTop); if HeadTailObj.ExArea.ExLeft < 2.5 then begin //左边 Col := 0; end else if HeadTailObj.ExArea.ExLeft < 15 then begin //中间 Col := 1; end else if HeadTailObj.ExArea.ExLeft < 27.5 then begin //右边 Col := 2; end else if HeadTailObj.ExArea.ExLeft < 40 then begin Col := 3; end else if HeadTailObj.ExArea.ExLeft < 52.5 then begin Col := 4; end else if HeadTailObj.ExArea.ExLeft < 65 then begin Col := 5; end else if HeadTailObj.ExArea.ExLeft < 77.5 then begin Col := 6; end else begin Col := 7 end; zgReportElements.Cells[Col,Row].Text := HeadTailObj.Name; case intType of 0 : arr_HeadIndex[Col][Row - 1] := getHeadTailIndex(HeadTailObj.Name); 1 : arr_FootIndex[Col][Row - 1] := getHeadTailIndex(HeadTailObj.Name); end; end; //2. 页码项 for i := 0 to PageObjList.Count - 1 do begin PageObj := PageObjList[i]; if not(PageObj.Visible) then continue; if PageObj.PageType = 1 then begin seStartPage.OnChange := nil; seStartPage.Value := PageObj.PageDist + 1; seStartPage.OnChange := seStartPageChange; seStartPage.Enabled := true; end; Row := Round(PageObj.ExArea.ExTop); if PageObj.ExArea.ExLeft < 2.5 then begin //左边 Col := 0; end else if PageObj.ExArea.ExLeft < 15.5 then begin //中间 Col := 1; end else if PageObj.ExArea.ExLeft < 27.5 then begin //右边 Col := 2; end else if PageObj.ExArea.ExLeft < 40 then begin Col := 3; end else if PageObj.ExArea.ExLeft < 52.5 then begin Col := 4; end else if PageObj.ExArea.ExLeft < 65 then begin Col := 5; end else if PageObj.ExArea.ExLeft < 77.5 then begin Col := 6; end else begin Col := 7; end; //备注: 上面的判断方式是只考虑三层的情况,目前也就限定了三层的情况 zgReportElements.Cells[Col,Row].Text := PageObj.Name; case intType of 0 : arr_HeadIndex[Col][Row - 1] := getHeadTailIndex(PageObj.Name); 1 : arr_FootIndex[Col][Row - 1] := getHeadTailIndex(PageObj.Name); end; end; finally ObjList.Free; PageObjList.Free; end; end; procedure TReportAdjuster.FormCreate(Sender: TObject); var i,j : integer; begin IsTender := False; FReportManager := TScReportManager.Create; //strConfigTxt := '报表打印机设置.INI'; {$IFNDEF _KTDebug} RptArchiverObj := TReportArchiver.Create; {$ENDIF} MemFile := nil; strModified := '(调价后)'; SetupChanged := false; SetupReportName := ''; SetupReportNo := -1; ReportChanged := false; L_ContentObjList := TList.Create; slReports := TStringList.Create; ExePath := ExtractFilePath(Application.ExeName); end; procedure TReportAdjuster.zgReportPropertyCellValueChanged( Sender: TObject); var ContentObj : PContentRec; CrossContentObj : PCrossContentRec; i : integer; douRight : double; Row, Col : integer; begin //单元格内容变化 Row := zgReportProperty.CurRow; Col := zgReportProperty.CurCol; if not(bCrossObj) then begin ContentObj := L_ContentObjList[Col - 1]; if ContentObj.Column <> nil then begin try case Row of 1 : //标题 begin ContentObj.Column.Content := zgReportProperty.Cells[Col,Row].Text; pcxSmartCostRpt.setColumnHeadTailObj(0,ContentObj.Column); end; 2 : //宽度 begin //这个宽度会影响到其他表栏 douRight := ContentObj.Column.ExArea.ExLeft; for i := Col - 1 to L_ContentObjList.Count - 1 do begin ContentObj := L_ContentObjList[i]; ContentObj.Column.ExArea.ExLeft := douRight; douRight := ContentObj.Column.ExArea.ExLeft + StrToFloat(zgReportProperty.Cells[i + 1,Row].Text); ContentObj.Column.ExArea.ExRight:= douRight; pcxSmartCostRpt.setColumnHeadTailObj(0,ContentObj.Column); end; end; 3 : //对齐 begin ContentObj.Align := getAlignByName(zgReportProperty.Cells[Col,Row].Text); pcxSmartCostRpt.setFlowContentObj(ContentObj); end; 4 : //精度 begin ContentObj.ShowInfoRec.Precision := StrToInt(zgReportProperty.Cells[Col,Row].Text); pcxSmartCostRpt.setFlowContentObj(ContentObj); end; end; //4. 保存 SaveRpt(getCurReportName()); except //数据错误 end; end; end else begin CrossContentObj := L_ContentObjList[Col - 1]; if CrossContentObj.CrossContent.Column <> nil then begin try case Row of 1 : //标题 begin CrossContentObj.CrossContent.Column.Content := zgReportProperty.Cells[Col,Row].Text; pcxSmartCostRpt.setColumnHeadTailObj(0,CrossContentObj.CrossContent.Column); end; 2 : //宽度 begin //这个宽度会影响到其他表栏 douRight := CrossContentObj.CrossContent.Column.ExArea.ExLeft; for i := Col - 1 to L_ContentObjList.Count - 1 do begin CrossContentObj := L_ContentObjList[i]; CrossContentObj.CrossContent.Column.ExArea.ExLeft := douRight; douRight := CrossContentObj.CrossContent.Column.ExArea.ExLeft + StrToFloat(zgReportProperty.Cells[i + 1,Row].Text); CrossContentObj.CrossContent.Column.ExArea.ExRight:= douRight; pcxSmartCostRpt.setColumnHeadTailObj(0,CrossContentObj.CrossContent.Column); end; end; 3 : //对齐 begin CrossContentObj.CrossContent.Align := getAlignByName(zgReportProperty.Cells[Col,Row].Text); pcxSmartCostRpt.setCrossContentObj(CrossContentObj); end; 4 : //精度 begin CrossContentObj.CrossContent.ShowInfoRec.Precision := StrToInt(zgReportProperty.Cells[Col,Row].Text); pcxSmartCostRpt.setCrossContentObj(CrossContentObj); end; end; //4. 保存 SaveRpt(getCurReportName()); except //数据错误 end; end; end; end; procedure TReportAdjuster.TitleEditChange(Sender: TObject); var TitleRec : PTitleRec; begin //改变表题名称 TitleRec := pcxSmartCostRpt.getTitleByID(1); TitleRec.Content := TitleEdit.Text; pcxSmartCostRpt.setTitleObj(TitleRec); SaveRpt(getCurReportName()); end; procedure TReportAdjuster.seStartPageChange(Sender: TObject); var ObjList : TList; i : integer; PageObj : PPageRec; begin ObjList := TList.Create; try pcxSmartCostRpt.getAllPageObjs(ObjList); for i := 0 to ObjList.Count - 1 do begin PageObj := ObjList[i]; if PageObj.PageType = 1 then begin PageObj.PageDist := seStartPage.Value - 1; pcxSmartCostRpt.setPageObj(PageObj); //保存 SaveRpt(getCurReportName()); break; end; end; finally ObjList.Free; end; end; procedure TReportAdjuster.seRefPageChange(Sender: TObject); var Param : PParamRec; begin Param := pcxSmartCostRpt.getParamByID(3001); if Param <> nil then begin Param.Value := seRefPage.Value; pcxSmartCostRpt.setIdpParamObj(Param); //保存 SaveRpt(getCurReportName()); end; end; procedure TReportAdjuster.getReport(strFileName : string); begin {$IFNDEF _KTDebug} RptArchiverObj.FileName := strFileName; MemFile := RptArchiverObj.Extract; {$ENDIF} if (MemFile = nil) then begin MemFile := TMemoryStream.Create; MemFile.LoadFromFile(strFileName); end else begin MemFile.Position := 0; end; try pcxSmartCostRpt.ReadReportStream(MemFile) finally MemFile.free; MemFile := nil; end; end; procedure TReportAdjuster.SaveRpt(strFileName : string); var L_MemFile : TMemoryStream; begin L_MemFile := TMemoryStream.Create; try pcxSmartCostRpt.SaveToStream(L_MemFile); {$IFNDEF _KTDebug} //RptArchiverObj.FileName := ExePath +'SmartCostReports\'+ strFileName; RptArchiverObj.FileName := strFileName; //调整后给的参数是一个完整的名称 RptArchiverObj.Archive(L_MemFile); {$ELSE} L_MemFile.Position := 0; //L_MemFile.SaveToFile(ExePath +'SmartCostReports\'+ strFileName); L_MemFile.SaveToFile(strFileName); {$ENDIF} checkCurReport; finally L_MemFile.free; end; end; function TReportAdjuster.getCurReportName() : string; begin Result := ''; if ReportsCBox.ItemIndex >=0 then begin FReportManager.RecordNo := Integer(ReportsCBox.Items.Objects[ReportsCBox.ItemIndex]); Result := FReportManager.FieldValue['FileName']; end; end; procedure TReportAdjuster.LoadReports; // 2012.3.1 HXY注销这个Const变量 const ReportVerNames: array[TScProjType] of string = ('招投标版', '预算版', '概算版', '可行性估算版', '建议估算版', '三级清单预算', '决算'); begin FReportManager.LoadFromSRT(ExePath + 'BillsEditorReports\*' + FILEEXT, '主版本=招投标版'); ReportsCBox.Items.Clear; // lenglshumei 2011-1-12 广东版调价前后 // {$IF DEFINED(_ScGuangDong) OR DEFINED(_ScBills)} // if not IsTender then // FReportManager.SetRange(['调价前'], ['是']) // else // FReportManager.SetRange(['调价前'], ['否']); // {$IFEND} FReportManager.First; while not FReportManager.Eof do begin ReportsCBox.AddItem(FReportManager.FieldValue['名称'], Pointer(FReportManager.RecordNo)); FReportManager.Next; end; ReportsCBox.Sorted := true; //*) end; {$IFNDEF _KTDebug} function chkLoadFile(strFileName : string): boolean; begin Result := true; end; {$ENDIF} procedure TReportAdjuster.UpCHKClick(Sender: TObject); begin if L_IniFile <> nil then begin if UpCHK.Checked then begin L_IniFile.WriteInteger('页面', UpCHK.Caption,1); UpTitleEdit.Enabled := true; UpLineCHK.Enabled := true; UpGroup.Enabled := true; // if (UpLineCHK.Checked) then L_IniFile.WriteInteger('页面', UpLineCHK.Caption,1) else L_IniFile.WriteInteger('页面', UpLineCHK.Caption,0); L_IniFile.WriteString('页面', '页眉_显示内容',UpTitleEdit.Text); case UpGroup.ItemIndex of 0 : L_IniFile.WriteString('页面', '页眉_对齐','左'); 1 : L_IniFile.WriteString('页面', '页眉_对齐','中'); 2 : L_IniFile.WriteString('页面', '页眉_对齐','右'); end; end else begin L_IniFile.WriteInteger('页面', UpCHK.Caption,0); UpTitleEdit.Enabled := false; UpLineCHK.Enabled := false; UpGroup.Enabled := false; end; ReportChanged := true; end; end; procedure TReportAdjuster.DownCHKClick(Sender: TObject); begin if L_IniFile <> nil then begin if DownCHK.Checked then begin L_IniFile.WriteInteger('页面', DownCHK.Caption,1); DownStartPage.Enabled := true; DownLineCHK.Enabled := true; DownGroup.Enabled := true; // if (DownLineCHK.Checked) then L_IniFile.WriteInteger('页面', DownLineCHK.Caption,1) else L_IniFile.WriteInteger('页面', DownLineCHK.Caption,0); L_IniFile.WriteInteger('页面', '页脚_起始页码',DownStartPage.Value); case DownGroup.ItemIndex of 0 : L_IniFile.WriteString('页面', '页脚_对齐','左'); 1 : L_IniFile.WriteString('页面', '页脚_对齐','中'); 2 : L_IniFile.WriteString('页面', '页脚_对齐','右'); end; end else begin L_IniFile.WriteInteger('页面', DownCHK.Caption,0); DownStartPage.Enabled := false; DownLineCHK.Enabled := false; DownGroup.Enabled := false; end; ReportChanged := true; end; end; procedure TReportAdjuster.editLineHeightChange(Sender: TObject); begin // end; procedure TReportAdjuster.N1Click(Sender: TObject); var strOldName : string; strNewName : string; ObjList : TList; ObjType : integer; idx : integer; intMaxHeadTailID : integer; HeadTailObj : PHeadRec; PageObj : PPageRec; douRowHeight : double; intRowSteps : integer; begin //修改显示名称 //(* if HeadRBtn.Checked then begin ObjType := 0; end else begin ObjType := 1; end; //*) // strOldName := zgReportElements.Cells[zgReportElements.CurCol,zgReportElements.CurRow].Text; //if (strOldName <> EmptyStr) then begin HeadTailObj := pcxSmartCostRpt.getHeadTailObjByName(strOldName,ObjType); if (HeadTailObj <> nil) then begin strNewName := InputBox('纵横创新','请输入新的显示名称:',strOldName); if (strNewName <> EmptyStr) and (strNewName <> strOldName) then begin zgReportElements.Cells[zgReportElements.CurCol,zgReportElements.CurRow].Text := strNewName; //(* idx := arr_HeadIndex[zgReportElements.CurCol][zgReportElements.CurRow - 1]; if idx <= 0 then begin ZjShowSelectionCBox.Items[0] := strNewName; ZjShowSelectionCBox.ItemIndex := 0; end; //*) HeadTailObj.Name := strNewName; HeadTailObj.Prefix := strNewName + ': '; pcxSmartCostRpt.setHeadTailObj(ObjType,HeadTailObj); SaveRpt(getCurReportName()); end; end; end; end; procedure TReportAdjuster.editLineHeightExit(Sender: TObject); var dLineHeight : double; begin if (TestReal(editLineHeight.Text)) then begin dLineHeight := StrToFloat(editLineHeight.Text); if (dLineHeight < 1) or (dLineHeight > 1000) then begin ShowMessage('请输入1~1000范围内的数值!'); editLineHeight.Text := '6'; exit; end; pcxSmartCostRpt.FlowContentOrgHeight := FloatToStr(dLineHeight/10); SaveRpt(getCurReportName()); end else begin ShowMessage('请输入数值!'); editLineHeight.Text := '6'; end; end; procedure TReportAdjuster.PrinterCBXSelect(Sender: TObject); var szDeviceName : String; begin Printer.PrinterIndex := PrinterCBX.ItemIndex; szDeviceName := Printer.Printers[Printer.PrinterIndex]; SetDefaultPrinterEx(szDeviceName); getAllSupportPaperNames; end; end.