| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249 |
- 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.
|