ReportAdjusterUnit.pas 70 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249
  1. unit ReportAdjusterUnit;
  2. interface
  3. uses
  4. Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  5. Dialogs, ComCtrls, StdCtrls, Spin, ExtCtrls, Buttons, Printers, WinSpool,
  6. PrintCom, PrintComXML, PrintComTypeDefUnit, Inifiles, ImgList, IdGlobal,
  7. ScReportUtils, ConstTypeUnit{ConstTypeUnit这里开始是ScConsts}, ScProjectManager,
  8. {$IFNDEF _KTDebug}
  9. ScFileArchiver,
  10. {$ENDIF}
  11. Grids, ZJGrid, ZJCells, ZJEdits, JimCombos, Menus;
  12. const DOU_DEFAULTHEIGHT = 0.6;
  13. {$IFDEF _KTDebug}
  14. const FILEEXT = '.xml';
  15. {$ELSE}
  16. const FILEEXT = '.srt';
  17. {$ENDIF}
  18. const
  19. {$IFDEF _ScBudget}
  20. IsBiaoBiao = False;
  21. {$ELSE}
  22. IsBiaoBiao = True;
  23. {$ENDIF}
  24. type
  25. arr_Type = array of array[0..63] of char;
  26. TReportAdjuster = class(TForm)
  27. ReportConfigPageControl: TPageControl;
  28. PrinterPageSheet: TTabSheet;
  29. PageSizeSheet: TTabSheet;
  30. ReportSheet: TTabSheet;
  31. GroupBox1: TGroupBox;
  32. GroupBox2: TGroupBox;
  33. GroupBox3: TGroupBox;
  34. SpinEdit1: TSpinEdit;
  35. Label1: TLabel;
  36. DefaultConfigBtn: TBitBtn;
  37. OKBtn: TBitBtn;
  38. CloseBtn: TBitBtn;
  39. PageNameCBox: TComboBox;
  40. Label2: TLabel;
  41. Label3: TLabel;
  42. Label4: TLabel;
  43. PageHeightEdit: TEdit;
  44. PageWidthEdit: TEdit;
  45. Label5: TLabel;
  46. Label6: TLabel;
  47. Label7: TLabel;
  48. Label8: TLabel;
  49. UpEdgeSpinEdit: TSpinEdit;
  50. DownEdgeSpinEdit: TSpinEdit;
  51. LeftEdgeSpinEdit: TSpinEdit;
  52. RightEdgeSpinEdit: TSpinEdit;
  53. pcxSmartCostRpt: TPrintComXML;
  54. Image2: TImage;
  55. RepBorderUnderLineCHK: TCheckBox;
  56. RepCelVerLineCHK: TCheckBox;
  57. RepBorderVerLineCHK: TCheckBox;
  58. RepCelHorLineCHK: TCheckBox;
  59. AutoRetLineCHK: TCheckBox;
  60. Label10: TLabel;
  61. Label11: TLabel;
  62. BorderLineSpinEdit: TSpinEdit;
  63. Label12: TLabel;
  64. ReportsCBox: TComboBox;
  65. StyleCBox: TComboBox;
  66. Label13: TLabel;
  67. Label14: TLabel;
  68. TitleEdit: TEdit;
  69. OrientationGroup: TRadioGroup;
  70. PrintPageAmountCHK: TCheckBox;
  71. SaveFormatBtn: TBitBtn;
  72. OtherFormatBtn: TBitBtn;
  73. zgReportProperty: TZJGrid;
  74. HeadRBtn: TRadioButton;
  75. MemoBtn: TRadioButton;
  76. zgReportElements: TZJGrid;
  77. ZjShowSelectionCBox: TZjComboBox;
  78. TailRBtn: TRadioButton;
  79. SetToDefaultBtn: TBitBtn;
  80. ReportCellLineSpinEdit: TEdit;
  81. seStartPage: TSpinEdit;
  82. Label15: TLabel;
  83. Label16: TLabel;
  84. seRefPage: TSpinEdit;
  85. UpCHK: TCheckBox;
  86. UpTitleEdit: TEdit;
  87. UpLineCHK: TCheckBox;
  88. DownCHK: TCheckBox;
  89. DownStartPage: TSpinEdit;
  90. Label17: TLabel;
  91. DownLineCHK: TCheckBox;
  92. UpGroup: TRadioGroup;
  93. DownGroup: TRadioGroup;
  94. GroupBox4: TGroupBox;
  95. ReportPageImage: TImage;
  96. BoldSBtn: TSpeedButton;
  97. ItalicSBtn: TSpeedButton;
  98. UnderlineSBtn: TSpeedButton;
  99. Label9: TLabel;
  100. FontCBox: TComboBox;
  101. FontSizeCBox: TComboBox;
  102. RowHeightSpinEdit: TSpinEdit;
  103. Label18: TLabel;
  104. Label19: TLabel;
  105. editLineHeight: TEdit;
  106. PopupMenu1: TPopupMenu;
  107. N1: TMenuItem;
  108. Label20: TLabel;
  109. Label21: TLabel;
  110. PrinterCBX: TComboBox;
  111. NarrowChk: TCheckBox;
  112. procedure FormShow(Sender: TObject);
  113. procedure CloseBtnClick(Sender: TObject);
  114. procedure FormClose(Sender: TObject; var Action: TCloseAction);
  115. procedure PageNameCBoxSelect(Sender: TObject);
  116. procedure SetDefaultBtnClick(Sender: TObject);
  117. procedure DefaultConfigBtnClick(Sender: TObject);
  118. procedure ReportPageImageMouseDown(Sender: TObject;
  119. Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
  120. procedure UpEdgeSpinEditChange(Sender: TObject);
  121. procedure OKBtnClick(Sender: TObject);
  122. procedure FontCBoxChange(Sender: TObject);
  123. procedure ReportCellLineSpinEditChange(Sender: TObject);
  124. procedure BorderLineSpinEditChange(Sender: TObject);
  125. procedure RepHeadFootLineCHKClick(Sender: TObject);
  126. procedure zgReportElementsGetCellEditor(Sender: TObject;
  127. ACoord: TPoint; var AControl: TWinControl);
  128. procedure zgReportElementsEditorLoadCell(Sender: TObject;
  129. ACoord: TPoint; AControl: TWinControl);
  130. procedure zgReportElementsEditorSaveCell(Sender: TObject;
  131. ACoord: TPoint; AControl: TWinControl);
  132. procedure ReportsCBoxChange(Sender: TObject);
  133. procedure SaveFormatBtnClick(Sender: TObject);
  134. procedure SetToDefaultBtnClick(Sender: TObject);
  135. procedure StyleCBoxChange(Sender: TObject);
  136. procedure OrientationGroupClick(Sender: TObject);
  137. procedure PrintPageAmountCHKClick(Sender: TObject);
  138. procedure HeadRBtnClick(Sender: TObject);
  139. procedure FormCreate(Sender: TObject);
  140. procedure zgReportPropertyCellValueChanged(Sender: TObject);
  141. procedure TitleEditChange(Sender: TObject);
  142. procedure seStartPageChange(Sender: TObject);
  143. procedure seRefPageChange(Sender: TObject);
  144. procedure UpCHKClick(Sender: TObject);
  145. procedure DownCHKClick(Sender: TObject);
  146. procedure editLineHeightChange(Sender: TObject);
  147. procedure N1Click(Sender: TObject);
  148. procedure editLineHeightExit(Sender: TObject);
  149. procedure PrinterCBXSelect(Sender: TObject);
  150. private
  151. { Private declarations }
  152. arr_PaperSize : array of TPoint;
  153. arr_szDeviceName: array[0..64] of char;
  154. arr_szDriver : array[0..64] of char;
  155. arr_szPort : array[0..64] of char;
  156. arr_HeadIndex : array[0..7] of array[0..2] of integer;
  157. arr_FootIndex : array[0..7] of array[0..2] of integer;
  158. L_intPageElementIndex : integer;
  159. L_IniFile : TIniFile;
  160. L_ContentObjList : TList;
  161. //--------------------------------------------------------------------------
  162. bPaperChanged : boolean;
  163. bEdgeChanged : boolean;
  164. bReportPageChanged : boolean;
  165. bCrossObj : boolean;
  166. slReports : TStringList;
  167. ExePath : string;
  168. bHeadTailChangd : boolean;
  169. intMaxItem : integer;
  170. {$IFNDEF _KTDebug}
  171. RptArchiverObj : TReportArchiver;
  172. {$ENDIF}
  173. MemFile : TMemoryStream;
  174. strModified : string;
  175. FReportManager: TScReportManager;
  176. FProject: TProject;
  177. //bHasModified : boolean;
  178. {
  179. strBillRptDir_Before : string; //清单报表目录(调价前)
  180. strBillRptDir_After : string; //清单报表目录(调价后)
  181. strBudgetRptDir : string; //预算报表目录
  182. strCommonRptDir : string; //其他(公共)报表目录
  183. strTmpRptBkDir : string; //报表备份零时目录
  184. //}
  185. //--------------------------------------------------------------------------
  186. procedure IniPrinterPage();
  187. procedure IniReportPage();
  188. procedure IniReportFormat();
  189. procedure IniHeadTailElements();
  190. procedure SetDefaultPrinter;
  191. procedure SetDefaultPageFormat;
  192. procedure SetDefaultReportFormat;
  193. procedure getAllSupportPaperNames_bk();
  194. procedure getAllSupportPaperNames();
  195. procedure PaintImage;
  196. procedure SetElementIndex(IDX : integer);
  197. function getCaptionString : String;
  198. procedure checkCurReport; //检测当前报表文件是否在slReports中,如果没有,则加上
  199. //在最后确定或取消的时候来获取修改过的报表文件信息
  200. function getHeadTailIndex(strCompareName : string) : integer;
  201. function getHeadTailObj(HeadType : integer; TypeIDX : integer) : PHeadRec;
  202. procedure LoadReports;
  203. procedure getReport(strFileName : string);
  204. procedure SaveRpt(strFileName : string);
  205. function getCurReportName() : string; //取当前选择的报表全名称
  206. public
  207. { Public declarations }
  208. // 是否调价后
  209. IsTender: Boolean;
  210. ProjType: TScProjType;
  211. //remark: 要注意处理,因在ScConsts.pas文件中有定义
  212. SetupChanged : boolean;
  213. SetupReportName : string;
  214. //strConfigTxt : string;
  215. SetupReportNo : integer;
  216. ReportChanged: boolean;
  217. property PageElementIndex : integer read L_intPageElementIndex write SetElementIndex;
  218. property Project: TProject read FProject write FProject;
  219. end;
  220. {$IFNDEF _KTDebug}
  221. function chkLoadFile(strFileName : string): boolean;
  222. {$ENDIF}
  223. var
  224. ReportAdjuster: TReportAdjuster;
  225. implementation
  226. {$R *.dfm}
  227. procedure TReportAdjuster.FormShow(Sender: TObject);
  228. var
  229. FileName : String;
  230. i : integer;
  231. begin
  232. // zy
  233. ReportConfigPageControl.ActivePage := PageSizeSheet;
  234. L_IniFile := nil;
  235. bHeadTailChangd := false;
  236. FileName := ExePath + STR_CONFIG_TEXT;
  237. if FileExists(FileName) then
  238. begin
  239. L_IniFile := TIniFile.Create(FileName);
  240. CopyFileTo(ExePath + STR_CONFIG_TEXT,
  241. ExePath + STR_REVERSE_CONFIG_TEXT)
  242. end else
  243. begin
  244. //Close;
  245. end;
  246. IniPrinterPage;
  247. IniReportPage;
  248. IniReportFormat;
  249. IniHeadTailElements;
  250. if SetupReportNo >= 0 then
  251. begin
  252. for i := 0 to ReportsCBox.Items.Count - 1 do
  253. begin
  254. if SetupReportNo = Integer(ReportsCBox.Items.Objects[i]) then
  255. begin
  256. ReportsCBox.OnChange := nil;
  257. ReportsCBox.ItemIndex := i;
  258. ReportsCBox.OnChange := ReportsCBoxChange;
  259. ReportsCBoxChange(ReportsCBox);
  260. break;
  261. end;
  262. end;
  263. end;
  264. end;
  265. procedure TReportAdjuster.IniReportPage();
  266. var i : integer;
  267. FontStr : TStrings;
  268. strAlign : string;
  269. begin
  270. //1. 设置字体
  271. FontCBox.Items.Clear;
  272. FontStr := Screen.Fonts;
  273. for i := 0 to FontStr.Count - 1 do
  274. begin
  275. FontCBox.Items.Add(FontStr[i]);
  276. end;
  277. //----------------------------------------------------------------------------
  278. UpCHK.OnClick := nil;
  279. UpTitleEdit.OnChange := nil;
  280. UpLineCHK.OnClick := nil;
  281. UpGroup.OnClick := nil;
  282. DownCHK.OnClick := nil;
  283. DownStartPage.OnChange := nil;
  284. DownLineCHK.OnClick := nil;
  285. DownGroup.OnClick := nil;
  286. //----------------------------------------------------------------------------
  287. //ReportCellLineSpinEdit.Value := L_IniFile.ReadInteger('页面','表格线粗',0);
  288. ReportCellLineSpinEdit.Text := FloatToStr(L_IniFile.ReadFloat('页面','表格线粗',0));
  289. BorderLineSpinEdit.Value := L_IniFile.ReadInteger('页面','边框线粗',0);
  290. //RepHeadFootLineCHK.Checked := (L_IniFile.ReadInteger('页面','页眉/页脚线',0) = 1);
  291. RepBorderUnderLineCHK.Checked := (L_IniFile.ReadInteger('页面','报表边框横线',0) = 1);
  292. RepCelHorLineCHK.Checked := (L_IniFile.ReadInteger('页面','报表表格横线',0) = 1);
  293. AutoRetLineCHK.Checked := (L_IniFile.ReadInteger('页面','自动换行打印',0) = 1);
  294. RepBorderVerLineCHK.Checked := (L_IniFile.ReadInteger('页面','报表边框竖线',0) = 1);
  295. RepCelVerLineCHK.Checked := (L_IniFile.ReadInteger('页面','报表表格竖线',0) = 1);
  296. NarrowChk.Checked := (L_IniFile.ReadInteger('页面','内容窄体输出',0) = 1);
  297. UpLineCHK.Checked := (L_IniFile.ReadInteger('页面','页眉横线',0) = 1);
  298. strAlign := L_IniFile.ReadString('页面','页眉_对齐','中');
  299. if (strAlign = '左') then
  300. UpGroup.ItemIndex := 0
  301. else if (strAlign = '右') then
  302. UpGroup.ItemIndex := 2
  303. else
  304. UpGroup.ItemIndex := 1;
  305. UpTitleEdit.Text := L_IniFile.ReadString('页面','页眉_显示内容','');
  306. UpCHK.Checked := (L_IniFile.ReadInteger('页面','页眉显示',0) = 1);
  307. DownLineCHK.Checked := (L_IniFile.ReadInteger('页面','页脚横线',0) = 1);
  308. strAlign := L_IniFile.ReadString('页面','页脚_对齐','中');
  309. if (strAlign = '左') then
  310. DownGroup.ItemIndex := 0
  311. else if (strAlign = '右') then
  312. DownGroup.ItemIndex := 2
  313. else
  314. DownGroup.ItemIndex := 1;
  315. DownStartPage.Value := L_IniFile.ReadInteger('页面','页脚_起始页码',0);
  316. DownCHK.Checked := (L_IniFile.ReadInteger('页面','页脚显示',0) = 1);
  317. if (UpCHK.Checked) then
  318. begin
  319. UpTitleEdit.Enabled := true;
  320. UpLineCHK.Enabled := true;
  321. UpGroup.Enabled := true;
  322. end;
  323. if (DownCHK.Checked) then
  324. begin
  325. DownStartPage.Enabled := true;
  326. DownLineCHK.Enabled := true;
  327. DownGroup.Enabled := true;
  328. end;
  329. //----------------------------------------------------------------------------
  330. UpCHK.OnClick := UpCHKClick;
  331. UpTitleEdit.OnChange := UpCHKClick;
  332. UpLineCHK.OnClick := UpCHKClick;
  333. UpGroup.OnClick := UpCHKClick;
  334. DownCHK.OnClick := DownCHKClick;
  335. DownStartPage.OnChange := DownCHKClick;
  336. DownLineCHK.OnClick := DownCHKClick;
  337. DownGroup.OnClick := DownCHKClick;
  338. //----------------------------------------------------------------------------
  339. //2. 画框
  340. L_intPageElementIndex := -1;
  341. SetElementIndex(-1);
  342. SetElementIndex(0);
  343. //
  344. end;
  345. procedure TReportAdjuster.IniHeadTailElements();
  346. begin
  347. ZjShowSelectionCBox.Clear;
  348. ZjShowSelectionCBox.Style := csDropDownList;
  349. intMaxItem := 0;
  350. //ZjShowSelectionCBox.AddItem('默认项',nil);
  351. ZjShowSelectionCBox.AddItem(' ',nil);
  352. //项目级
  353. ZjShowSelectionCBox.AddItem('建设项目名称',nil);
  354. ZjShowSelectionCBox.AddItem('单位工程名称',nil); //合同段
  355. ZjShowSelectionCBox.AddItem('工 程 地 点',nil);
  356. ZjShowSelectionCBox.AddItem('建 设 单 位',nil);
  357. ZjShowSelectionCBox.AddItem('投 标 人',nil);
  358. ZjShowSelectionCBox.AddItem('编制',nil);
  359. ZjShowSelectionCBox.AddItem('编制人 证 号',nil);
  360. ZjShowSelectionCBox.AddItem('复核',nil);
  361. ZjShowSelectionCBox.AddItem('复核人 证 号',nil);
  362. ZjShowSelectionCBox.AddItem('编 制 范 围',nil);
  363. ZjShowSelectionCBox.AddItem('编 制 时 间',nil);
  364. //清单级
  365. ZjShowSelectionCBox.AddItem('分项工程名称',nil);
  366. ZjShowSelectionCBox.AddItem('分项工程编号',nil);
  367. ZjShowSelectionCBox.AddItem('计 量 单 位',nil);
  368. ZjShowSelectionCBox.AddItem('数量',nil);
  369. ZjShowSelectionCBox.AddItem('单价',nil);
  370. //ZjShowSelectionCBox.AddItem('项目名称',nil);
  371. //ZjShowSelectionCBox.AddItem('项目编号',nil);
  372. //表级别(如08表)
  373. ZjShowSelectionCBox.AddItem('表 编 号',nil);
  374. ZjShowSelectionCBox.AddItem('打印时间',nil);
  375. ZjShowSelectionCBox.AddItem('工 料 机名称',nil);
  376. intMaxItem := ZjShowSelectionCBox.Items.Count;
  377. //ZjShowSelectionCBox.AddItem('单位工程',nil);
  378. //ZjShowSelectionCBox.AddItem('建设项目',nil);
  379. //ZjShowSelectionCBox.AddItem('起始页码',nil);
  380. ZjShowSelectionCBox.AddItem('总页码数',nil);
  381. ZjShowSelectionCBox.AddItem('当前页码',nil);
  382. end;
  383. procedure TReportAdjuster.IniReportFormat();
  384. begin
  385. //
  386. zgReportProperty.ColCount := 1;
  387. zgReportProperty.RowCount := 5;
  388. zgReportProperty.Cells[0,0].Text := '内容';
  389. zgReportProperty.Cells[0,1].Text := '标题';
  390. zgReportProperty.Cells[0,2].Text := '宽度';
  391. zgReportProperty.Cells[0,3].Text := '对齐';
  392. zgReportProperty.Cells[0,4].Text := '精度';
  393. //zgReportProperty.ColWidths[1] := 30;
  394. //getfiles
  395. //zgReportProperty.RowHeights[1] := 20;
  396. LoadReports;
  397. TitleEdit.Enabled := true;
  398. PrintPageAmountCHK.Enabled := true;
  399. zgReportElements.ColWidths[0] := 136;
  400. zgReportElements.ColWidths[1] := 136;
  401. zgReportElements.ColWidths[2] := 136;
  402. zgReportElements.ColWidths[3] := 136;
  403. zgReportElements.ColWidths[4] := 136;
  404. zgReportElements.ColWidths[5] := 136;
  405. zgReportElements.ColWidths[6] := 136;
  406. zgReportElements.ColWidths[7] := 136;
  407. {
  408. zgReportElements.Cells[0,0].Text := '左';
  409. zgReportElements.Cells[1,0].Text := '偏左';
  410. zgReportElements.Cells[2,0].Text := '中';
  411. zgReportElements.Cells[3,0].Text := '偏右';
  412. zgReportElements.Cells[4,0].Text := '右';
  413. //}
  414. //设置事件
  415. //zgReportProperty.OnCellValueChanged := zgReportPropertyCellValueChanged;
  416. ZjShowSelectionCBox.Top := -20;
  417. end;
  418. procedure TReportAdjuster.IniPrinterPage();
  419. var i : integer;
  420. begin
  421. try
  422. PrinterCBX.Clear();
  423. for i := 0 to Printer.Printers.Count - 1 do
  424. begin
  425. PrinterCBX.Items.Add(Printer.Printers[i]);
  426. end;
  427. PrinterCBX.ItemIndex := Printer.PrinterIndex;
  428. getAllSupportPaperNames;
  429. except
  430. //
  431. end;
  432. end;
  433. procedure TReportAdjuster.getAllSupportPaperNames();
  434. begin
  435. SetLength(arr_PaperSize,2);
  436. arr_PaperSize[0] := Point(210, 297);
  437. arr_PaperSize[1] := Point(297, 420);
  438. PageNameCBox.Clear();
  439. PageNameCBox.Items.Add('A4');
  440. PageNameCBox.Items.Add('A3');
  441. //PageNameCBox.ItemIndex := 0;
  442. if L_IniFile <> nil then
  443. begin
  444. LeftEdgeSpinEdit.OnChange := nil;
  445. RightEdgeSpinEdit.OnChange := nil;
  446. UpEdgeSpinEdit.OnChange := nil;
  447. DownEdgeSpinEdit.OnChange := nil;
  448. try
  449. LeftEdgeSpinEdit.Value := L_IniFile.ReadInteger('纸张','左边距',0);
  450. RightEdgeSpinEdit.Value := L_IniFile.ReadInteger('纸张','右边距',0);
  451. UpEdgeSpinEdit.Value := L_IniFile.ReadInteger('纸张','上边距',0);
  452. DownEdgeSpinEdit.Value := L_IniFile.ReadInteger('纸张','下边距',0);
  453. finally
  454. LeftEdgeSpinEdit.OnChange := UpEdgeSpinEditChange;
  455. RightEdgeSpinEdit.OnChange := UpEdgeSpinEditChange;
  456. UpEdgeSpinEdit.OnChange := UpEdgeSpinEditChange;
  457. DownEdgeSpinEdit.OnChange := UpEdgeSpinEditChange;
  458. end;
  459. end;
  460. end;
  461. procedure TReportAdjuster.getAllSupportPaperNames_bk();
  462. var Rslt,i:integer;
  463. PaperNames: Pointer;
  464. PaperSizes: Pointer;
  465. pDevModeInput : PDeviceMode;
  466. DevHandle : THandle;
  467. intP : integer;
  468. szDeviceName: String;
  469. szDriver : String;
  470. szPort: String;
  471. //PszDeviceName: PChar;
  472. //PszDriver : PChar;
  473. //PszPort: PChar;
  474. strTemp : string;
  475. pTempPaperNames : Pointer;
  476. pTempPaperSizes : Pointer;
  477. begin
  478. szDeviceName := Printer.Printers[Printer.PrinterIndex];
  479. intP := Pos(' on ', szDeviceName);
  480. if (intP > 0) then
  481. begin
  482. //备注: 在WIN98下打印机名称是XXX on YYY, 很讨嫌,要去掉' on '后面的字符,否则DeviceCapabilities
  483. // 函数会返回-1
  484. szDeviceName := Trim(Copy(szDeviceName,1,intP-1));
  485. end;
  486. szPort := '';
  487. Rslt := DeviceCapabilities(PChar(szDeviceName),PChar(szPort),DC_PAPERNAMES,nil,nil);
  488. if (Rslt >= 1) and (Rslt <= 256) then
  489. begin
  490. GetMem(PaperNames, Rslt*64);
  491. GetMem(PaperSizes, Rslt*SizeOf(TPoint));
  492. //PszDeviceName: PChar;
  493. SetLength(arr_PaperSize,Rslt);
  494. pTempPaperSizes := PaperSizes;
  495. pTempPaperNames := PaperNames;
  496. try
  497. DeviceCapabilities(PChar(szDeviceName), PChar(szPort), DC_PAPERNAMES, PaperNames, nil);
  498. DeviceCapabilities(PChar(szDeviceName), PChar(szPort), DC_PAPERSIZE, PaperSizes, nil);
  499. PageNameCBox.Clear();
  500. for i := 0 to Rslt - 1 do
  501. begin
  502. strTemp := PChar(PaperNames);
  503. PageNameCBox.Items.Add( strTemp );
  504. Inc(PChar(PaperNames), 64);
  505. arr_PaperSize[i] := TPoint(PaperSizes^);
  506. Inc(PChar(PaperSizes), SizeOf(TPoint));
  507. end;
  508. Printer.GetPrinter(arr_szDeviceName,arr_szDriver,arr_szPort,DevHandle);
  509. //备注: 有时候真搞不懂这些参数(PChar, char数组)的区分,我我用PChar类型做参数
  510. // 就总有问题,换了char数组就OK; 但在调用系统API函数时,却是PChar好使
  511. try
  512. pDevModeInput := PDeviceMode(GlobalLock(DevHandle));
  513. //pDevModeInput.dmPaperSize := 9;
  514. //pDevModeInput.dmPaperLength := 2100;
  515. //pDevModeInput.dmPaperWidth := 2970;
  516. PageNameCBox.Text := pDevModeInput.dmFormName;
  517. for i := 0 to PageNameCBox.Items.Count - 1 do
  518. begin
  519. if PageNameCBox.Items[i] = pDevModeInput.dmFormName then
  520. begin
  521. PageNameCBox.ItemIndex := i;
  522. PageNameCBoxSelect(nil); //控件不自动刷新,要手工刷新一把
  523. break;
  524. end;
  525. end;
  526. finally
  527. GlobalUnLock(DevHandle);
  528. //GlobalFree(DevHandle);
  529. end;
  530. //}
  531. finally
  532. FreeMem(pTempPaperNames, Rslt*64);
  533. FreeMem(pTempPaperSizes, Rslt*SizeOf(TPoint));
  534. end;
  535. end;
  536. if L_IniFile <> nil then
  537. begin
  538. LeftEdgeSpinEdit.OnChange := nil;
  539. RightEdgeSpinEdit.OnChange := nil;
  540. UpEdgeSpinEdit.OnChange := nil;
  541. DownEdgeSpinEdit.OnChange := nil;
  542. try
  543. LeftEdgeSpinEdit.Value := L_IniFile.ReadInteger('纸张','左边距',0);
  544. RightEdgeSpinEdit.Value := L_IniFile.ReadInteger('纸张','右边距',0);
  545. UpEdgeSpinEdit.Value := L_IniFile.ReadInteger('纸张','上边距',0);
  546. DownEdgeSpinEdit.Value := L_IniFile.ReadInteger('纸张','下边距',0);
  547. finally
  548. LeftEdgeSpinEdit.OnChange := UpEdgeSpinEditChange;
  549. RightEdgeSpinEdit.OnChange := UpEdgeSpinEditChange;
  550. UpEdgeSpinEdit.OnChange := UpEdgeSpinEditChange;
  551. DownEdgeSpinEdit.OnChange := UpEdgeSpinEditChange;
  552. end;
  553. end;
  554. end;
  555. procedure TReportAdjuster.FormClose(Sender: TObject;
  556. var Action: TCloseAction);
  557. begin
  558. FReportManager.Free;
  559. slReports.Free;
  560. {$IFNDEF _KTDebug}
  561. RptArchiverObj.free;
  562. {$ENDIF}
  563. if (MemFile <> nil) then
  564. MemFile.Free;
  565. SetLength(arr_PaperSize,0);
  566. L_ContentObjList.Free;
  567. end;
  568. procedure TReportAdjuster.PageNameCBoxSelect(Sender: TObject);
  569. var pDevModeInput : PDeviceMode;
  570. DevHandle : THandle;
  571. DevSetHandle : THandle;
  572. StubDevMode: TDeviceMode;
  573. begin
  574. (*
  575. //1. 设置显示
  576. PageHeightEdit.Text := FloatToSTr(arr_PaperSize[PageNameCBox.ItemIndex].X / 10);
  577. PageWidthEdit.Text := FloatToSTr(arr_PaperSize[PageNameCBox.ItemIndex].Y / 10);
  578. //2. 设置打印机
  579. if Sender = nil then exit;
  580. //{
  581. Printer.GetPrinter(arr_szDeviceName,arr_szDriver,arr_szPort,DevHandle);
  582. try
  583. L_IniFile.WriteString('纸张','幅面',PageNameCBox.Text);
  584. pDevModeInput := PDeviceMode(GlobalLock(DevHandle));
  585. StrCopy(pDevModeInput.dmFormName,PChar(PageNameCBox.Items[PageNameCBox.ItemIndex]));
  586. pDevModeInput.dmPaperLength := arr_PaperSize[PageNameCBox.ItemIndex].Y;
  587. pDevModeInput.dmPaperWidth := arr_PaperSize[PageNameCBox.ItemIndex].X;
  588. //pDevModeInput.dmPaperSize := DMPAPER_USER;
  589. //要改变项
  590. pDevModeInput.dmFields := pDevModeInput.dmFields or DM_FORMNAME;
  591. pDevModeInput.dmFields := pDevModeInput.dmFields or DM_PAPERLENGTH;
  592. pDevModeInput.dmFields := pDevModeInput.dmFields or DM_PAPERWIDTH;
  593. pDevModeInput.dmFields := pDevModeInput.dmFields or DM_PAPERSIZE;
  594. DocumentProperties(0, Printer.Handle, arr_szDeviceName, pDevModeInput^,
  595. pDevModeInput^, DM_OUT_BUFFER);
  596. finally
  597. GlobalUnLock(DevHandle);
  598. //GlobalFree(DevHandle);
  599. end;
  600. //}
  601. //*)
  602. PageHeightEdit.Text := FloatToSTr(arr_PaperSize[PageNameCBox.ItemIndex].X / 10);
  603. PageWidthEdit.Text := FloatToSTr(arr_PaperSize[PageNameCBox.ItemIndex].Y / 10);
  604. //2. 设置打印机
  605. if Sender = nil then exit;
  606. //{
  607. Printer.GetPrinter(arr_szDeviceName,arr_szDriver,arr_szPort,DevHandle);
  608. try
  609. L_IniFile.WriteString('纸张','幅面',PageNameCBox.Text);
  610. pDevModeInput := PDeviceMode(GlobalLock(DevHandle));
  611. StrCopy(pDevModeInput.dmFormName,PChar(PageNameCBox.Items[PageNameCBox.ItemIndex]));
  612. //pDevModeInput.dmPaperLength := arr_PaperSize[PageNameCBox.ItemIndex].Y;
  613. //pDevModeInput.dmPaperWidth := arr_PaperSize[PageNameCBox.ItemIndex].X;
  614. if (PageNameCBox.ItemIndex = 0) then
  615. begin
  616. pDevModeInput.dmPaperSize := DMPAPER_A4;
  617. end else if (PageNameCBox.ItemIndex = 1) then
  618. begin
  619. pDevModeInput.dmPaperSize := DMPAPER_A3;
  620. end;
  621. //要改变项
  622. pDevModeInput.dmFields := pDevModeInput.dmFields or DM_FORMNAME;
  623. //pDevModeInput.dmFields := pDevModeInput.dmFields or DM_PAPERLENGTH;
  624. //pDevModeInput.dmFields := pDevModeInput.dmFields or DM_PAPERWIDTH;
  625. pDevModeInput.dmFields := pDevModeInput.dmFields or DM_PAPERSIZE;
  626. DocumentProperties(0, Printer.Handle, arr_szDeviceName, pDevModeInput^,
  627. pDevModeInput^, DM_OUT_BUFFER);
  628. finally
  629. GlobalUnLock(DevHandle);
  630. //GlobalFree(DevHandle);
  631. end;
  632. end;
  633. procedure TReportAdjuster.SetDefaultBtnClick(Sender: TObject);
  634. begin
  635. case ReportConfigPageControl.TabIndex of
  636. 0 : SetDefaultPrinter;
  637. 1 : SetDefaultPageFormat;
  638. 2 : SetDefaultReportFormat;
  639. end;
  640. end;
  641. procedure TReportAdjuster.SetDefaultPrinter;
  642. begin
  643. //
  644. end;
  645. procedure TReportAdjuster.SetDefaultPageFormat;
  646. begin
  647. //
  648. end;
  649. procedure TReportAdjuster.SetDefaultReportFormat;
  650. begin
  651. //
  652. end;
  653. procedure TReportAdjuster.PaintImage;
  654. var FontRec : TFontRec;
  655. DrawRect : TRect;
  656. begin
  657. //1. 画底色
  658. if L_intPageElementIndex = -1 then
  659. begin
  660. ReportPageImage.Canvas.Brush.Color := clInactiveCaption;
  661. ReportPageImage.Canvas.Rectangle(0,0,ReportPageImage.Width,ReportPageImage.Height);
  662. ReportPageImage.Canvas.Brush.Color := clBtnface;
  663. end;
  664. //2. 画字
  665. IniFontRec(FontRec);
  666. FontRec.FontColor := clWhite;
  667. FontRec.FontName := ReportAdjuster.Font.Name;
  668. FontRec.FontHeight := Round(ReportAdjuster.Font.Size * ReportAdjuster.Font.PixelsPerInch / 72);
  669. //2.a
  670. DrawRect := Rect(0,0,78,25);
  671. if L_intPageElementIndex = 0 then
  672. begin
  673. FontRec.FontBold := 600;
  674. end else
  675. begin
  676. FontRec.FontBold := 400;
  677. end;
  678. InDrawText('表标题',DrawRect,FontRec,4,False,ReportPageImage.Canvas,False,1,Rect(0,0,0,0));
  679. //2.b
  680. DrawRect := Rect(79,0,157,25);
  681. if L_intPageElementIndex = 1 then
  682. begin
  683. FontRec.FontBold := 600;
  684. end else
  685. begin
  686. FontRec.FontBold := 400;
  687. end;
  688. InDrawText('列标题',DrawRect,FontRec,4,False,ReportPageImage.Canvas,False,1,Rect(0,0,0,0));
  689. //2.c
  690. DrawRect := Rect(158,0,236,25);
  691. if L_intPageElementIndex = 2 then
  692. begin
  693. FontRec.FontBold := 600;
  694. end else
  695. begin
  696. FontRec.FontBold := 400;
  697. end;
  698. InDrawText('表正文',DrawRect,FontRec,4,False,ReportPageImage.Canvas,False,1,Rect(0,0,0,0));
  699. //2.d
  700. DrawRect := Rect(237,0,315,25);
  701. if L_intPageElementIndex = 3 then
  702. begin
  703. FontRec.FontBold := 600;
  704. end else
  705. begin
  706. FontRec.FontBold := 400;
  707. end;
  708. InDrawText('表合计',DrawRect,FontRec,4,False,ReportPageImage.Canvas,False,1,Rect(0,0,0,0));
  709. //2.e
  710. DrawRect := Rect(316,0,394,25);
  711. if L_intPageElementIndex = 4 then
  712. begin
  713. FontRec.FontBold := 600;
  714. end else
  715. begin
  716. FontRec.FontBold := 400;
  717. end;
  718. InDrawText('表眉/表脚',DrawRect,FontRec,4,False,ReportPageImage.Canvas,False,1,Rect(0,0,0,0));
  719. //2.f
  720. DrawRect := Rect(395,0,473,25);
  721. if L_intPageElementIndex = 5 then
  722. begin
  723. FontRec.FontBold := 600;
  724. end else
  725. begin
  726. FontRec.FontBold := 400;
  727. end;
  728. InDrawText('页眉/页脚',DrawRect,FontRec,4,False,ReportPageImage.Canvas,False,1,Rect(0,0,0,0));
  729. end;
  730. procedure TReportAdjuster.ReportPageImageMouseDown(Sender: TObject;
  731. Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
  732. begin
  733. PageElementIndex := X div 79;
  734. end;
  735. procedure TReportAdjuster.SetElementIndex(IDX : integer);
  736. var strFontName : String;
  737. intFontSize : integer;
  738. begin
  739. if ((L_intPageElementIndex >= 0) and (L_intPageElementIndex <= 5)) then
  740. begin
  741. ReportPageImage.Canvas.Brush.Color := clInactiveCaption;
  742. ReportPageImage.Canvas.Pen.Color := clInactiveCaption;
  743. ReportPageImage.Canvas.Rectangle(L_intPageElementIndex * 79 ,0 ,
  744. (L_intPageElementIndex + 1) * 79, ReportPageImage.Height);
  745. ReportPageImage.Canvas.Pen.Color := clBlack;
  746. end;
  747. if ((IDX >= 0) and (IDX <= 5)) and (IDX <> L_intPageElementIndex) then
  748. begin
  749. L_intPageElementIndex := IDX;
  750. ReportPageImage.Canvas.Brush.Color := clGradientActiveCaption;
  751. ReportPageImage.Canvas.Pen.Color := clInactiveCaption;
  752. ReportPageImage.Canvas.Rectangle(L_intPageElementIndex * 79 ,0 ,
  753. (L_intPageElementIndex + 1) * 79, ReportPageImage.Height);
  754. ReportPageImage.Canvas.Pen.Color := clBlack;
  755. //获取相关信息
  756. case L_intPageElementIndex of
  757. 0 :
  758. begin //表标题
  759. FontCBox.Text := L_IniFile.ReadString('页面','表标题_字体','宋体');
  760. FontSizeCBox.Text := L_IniFile.ReadString('页面','表标题_字体大小','9');
  761. BoldSBtn.Down := (L_IniFile.ReadInteger('页面','表标题_字体粗',0) = 1 );
  762. ItalicSBtn.Down := (L_IniFile.ReadInteger('页面','表标题_字体斜',0) = 1 );
  763. UnderlineSBtn.Down := (L_IniFile.ReadInteger('页面','表标题_字体下滑线',0) = 1 );
  764. RowHeightSpinEdit.Value := L_IniFile.ReadInteger('页面','表标题_行高',1)
  765. end;
  766. 1 :
  767. begin //列标题
  768. FontCBox.Text := L_IniFile.ReadString('页面','列标题_字体','宋体');
  769. FontSizeCBox.Text := L_IniFile.ReadString('页面','列标题_字体大小','9');
  770. BoldSBtn.Down := (L_IniFile.ReadInteger('页面','列标题_字体粗',0) = 1 );
  771. ItalicSBtn.Down := (L_IniFile.ReadInteger('页面','列标题_字体斜',0) = 1 );
  772. UnderlineSBtn.Down := (L_IniFile.ReadInteger('页面','列标题_字体下滑线',0) = 1 );
  773. RowHeightSpinEdit.Value := L_IniFile.ReadInteger('页面','列标题_行高',1)
  774. end;
  775. 2 :
  776. begin //表正文
  777. FontCBox.Text := L_IniFile.ReadString('页面','表正文_字体','宋体');
  778. FontSizeCBox.Text := L_IniFile.ReadString('页面','表正文_字体大小','9');
  779. BoldSBtn.Down := (L_IniFile.ReadInteger('页面','表正文_字体粗',0) = 1 );
  780. ItalicSBtn.Down := (L_IniFile.ReadInteger('页面','表正文_字体斜',0) = 1 );
  781. UnderlineSBtn.Down := (L_IniFile.ReadInteger('页面','表正文_字体下滑线',0) = 1 );
  782. RowHeightSpinEdit.Value := L_IniFile.ReadInteger('页面','表正文_行高',1)
  783. end;
  784. 3 :
  785. begin //表合计
  786. FontCBox.Text := L_IniFile.ReadString('页面','表合计_字体','宋体');
  787. FontSizeCBox.Text := L_IniFile.ReadString('页面','表合计_字体大小','9');
  788. BoldSBtn.Down := (L_IniFile.ReadInteger('页面','表合计_字体粗',0) = 1 );
  789. ItalicSBtn.Down := (L_IniFile.ReadInteger('页面','表合计_字体斜',0) = 1 );
  790. UnderlineSBtn.Down := (L_IniFile.ReadInteger('页面','表合计_字体下滑线',0) = 1 );
  791. RowHeightSpinEdit.Value := L_IniFile.ReadInteger('页面','表合计_行高',1)
  792. end;
  793. 4 :
  794. begin //表眉/表脚
  795. FontCBox.Text := L_IniFile.ReadString('页面','表眉/表脚_字体','宋体');
  796. FontSizeCBox.Text := L_IniFile.ReadString('页面','表眉/表脚_字体大小','9');
  797. BoldSBtn.Down := (L_IniFile.ReadInteger('页面','表眉/表脚_字体粗',0) = 1 );
  798. ItalicSBtn.Down := (L_IniFile.ReadInteger('页面','表眉/表脚_字体斜',0) = 1 );
  799. UnderlineSBtn.Down := (L_IniFile.ReadInteger('页面','表眉/表脚_字体下滑线',0) = 1 );
  800. RowHeightSpinEdit.Value := L_IniFile.ReadInteger('页面','表眉/表脚_行高',1)
  801. end;
  802. 5 :
  803. begin //页眉/页脚
  804. FontCBox.Text := L_IniFile.ReadString('页面','页眉/页脚_字体','宋体');
  805. FontSizeCBox.Text := L_IniFile.ReadString('页面','页眉/页脚_字体大小','9');
  806. BoldSBtn.Down := (L_IniFile.ReadInteger('页面','页眉/页脚_字体粗',0) = 1 );
  807. ItalicSBtn.Down := (L_IniFile.ReadInteger('页面','页眉/页脚_字体斜',0) = 1 );
  808. UnderlineSBtn.Down := (L_IniFile.ReadInteger('页面','页眉/页脚_字体下滑线',0) = 1 );
  809. RowHeightSpinEdit.Value := L_IniFile.ReadInteger('页面','页眉/页脚_行高',1)
  810. end;
  811. end;
  812. end;
  813. PaintImage;
  814. end;
  815. procedure TReportAdjuster.UpEdgeSpinEditChange(Sender: TObject);
  816. begin
  817. if L_IniFile <> nil then
  818. begin
  819. L_IniFile.WriteInteger('纸张','左边距',LeftEdgeSpinEdit.Value);
  820. L_IniFile.WriteInteger('纸张','右边距',RightEdgeSpinEdit.Value);
  821. L_IniFile.WriteInteger('纸张','上边距',UpEdgeSpinEdit.Value);
  822. L_IniFile.WriteInteger('纸张','下边距',DownEdgeSpinEdit.Value);
  823. ReportChanged := true;
  824. end;
  825. end;
  826. procedure TReportAdjuster.OKBtnClick(Sender: TObject);
  827. var i : integer;
  828. begin
  829. //1. 把本次改动的配置放在保留配置文件中
  830. DeleteFile(ExePath + STR_REVERSE_CONFIG_TEXT);
  831. CopyFileTo(ExePath + STR_CONFIG_TEXT,
  832. ExePath + STR_REVERSE_CONFIG_TEXT);
  833. //2. 报表保存
  834. for i := 0 to slReports.Count - 1 do
  835. begin
  836. DeleteFile(ExePath + 'BillsEditorReports\Reserved\'+
  837. slReports[i] + FILEEXT);
  838. CopyFileTo(ExePath + 'BillsEditorReports\'+
  839. slReports[i] + FILEEXT,
  840. ExePath + 'BillsEditorReports\Reserved\'+
  841. slReports[i] + FILEEXT);
  842. end;
  843. //3.
  844. ReportChanged := True;
  845. SetupChanged := true;
  846. if bHeadTailChangd then
  847. begin
  848. //
  849. end;
  850. Close;
  851. end;
  852. procedure TReportAdjuster.CloseBtnClick(Sender: TObject);
  853. var i : integer;
  854. begin
  855. //1. 还原以前的配置(系统打印机除外)
  856. DeleteFile(ExePath + STR_CONFIG_TEXT);
  857. CopyFileTo(ExePath + STR_REVERSE_CONFIG_TEXT,
  858. ExePath + STR_CONFIG_TEXT);
  859. //2. 报表还原
  860. for i := 0 to slReports.Count - 1 do
  861. begin
  862. DeleteFile(ExePath + 'BillsEditorReports\'+
  863. slReports[i] + FILEEXT);
  864. CopyFileTo(ExePath + 'BillsEditorReports\Reserved\'+
  865. slReports[i] + FILEEXT,
  866. ExePath + 'BillsEditorReports\'+
  867. slReports[i] + FILEEXT);
  868. end;
  869. //3.
  870. SetupChanged := false;
  871. ReportChanged := false;
  872. Close;
  873. end;
  874. procedure TReportAdjuster.SetToDefaultBtnClick(Sender: TObject);
  875. begin
  876. //设置为默认值
  877. end;
  878. procedure TReportAdjuster.DefaultConfigBtnClick(Sender: TObject);
  879. var
  880. ReportName : string;
  881. begin
  882. case ReportConfigPageControl.ActivePageIndex of
  883. 0,1 :
  884. begin
  885. //还原默认设置
  886. DeleteFile(ExePath + STR_CONFIG_TEXT);
  887. CopyFileTo(ExePath + '报表打印机初始默认设置.INI',
  888. ExePath + STR_CONFIG_TEXT);
  889. IniPrinterPage;
  890. IniReportPage;
  891. //FormShow(self);
  892. end;
  893. 2 :
  894. begin
  895. //(*
  896. if ReportsCBox.ItemIndex >= 0 then
  897. begin
  898. FReportManager.RecordNo := Integer(ReportsCBox.Items.Objects[ReportsCBox.ItemIndex]);
  899. ReportName := ExtractFileName(FReportManager.FieldValue['FileName']);
  900. DeleteFile(ExePath + 'BillsEditorReports\'+ ReportName);
  901. CopyFileTo(ExePath + 'BillsEditorReports\Reserved\'+ ReportName,
  902. ExePath + 'BillsEditorReports\'+ ReportName);
  903. ReportsCBoxChange(nil);
  904. end;
  905. //*)
  906. end;
  907. end;
  908. end;
  909. procedure TReportAdjuster.FontCBoxChange(Sender: TObject);
  910. var strCap : String;
  911. intBold, intItalic, intUnderline : integer;
  912. begin
  913. if L_IniFile <> nil then
  914. begin
  915. strCap := getCaptionString;
  916. intBold := 0;
  917. intItalic := 0;
  918. intUnderline := 0;
  919. if BoldSBtn.Down then intBold := 1;
  920. if ItalicSBtn.Down then intItalic := 1;
  921. if UnderlineSBtn.Down then intUnderline := 1;
  922. L_IniFile.WriteString('页面', strCap + '_字体',FontCBox.Text);
  923. L_IniFile.WriteString('页面', strCap + '_字体大小',FontSizeCBox.Text);
  924. L_IniFile.WriteInteger('页面',strCap + '_字体粗',intBold);
  925. L_IniFile.WriteInteger('页面',strCap + '_字体斜',intItalic);
  926. L_IniFile.WriteInteger('页面',strCap + '_字体下滑线',intUnderline);
  927. L_IniFile.WriteInteger('页面',strCap + '_行高',RowHeightSpinEdit.Value);
  928. end;
  929. end;
  930. function TReportAdjuster.getCaptionString : String;
  931. begin
  932. Result := '';
  933. case L_intPageElementIndex of
  934. 0 : Result := '表标题';
  935. 1 : Result := '列标题';
  936. 2 : Result := '表正文';
  937. 3 : Result := '表合计';
  938. 4 : Result := '表眉/表脚';
  939. 5 : Result := '页眉/页脚';
  940. end;
  941. end;
  942. procedure TReportAdjuster.checkCurReport;
  943. var
  944. i : integer;
  945. bHas : boolean;
  946. ReportName : string;
  947. begin
  948. bHas := false;
  949. ReportName := getCurReportName();
  950. //(*
  951. for i := 0 to slReports.Count - 1 do
  952. begin
  953. if ReportName = slReports[i] then
  954. begin
  955. bHas := true;
  956. break;
  957. end;
  958. end;
  959. if not(bHas) then
  960. begin
  961. slReports.Add(ReportName);
  962. if ReportName = SetupReportName then
  963. begin
  964. ReportChanged := true;
  965. end;
  966. end;
  967. //*)
  968. end;
  969. function TReportAdjuster.getHeadTailIndex(strCompareName : string) : integer;
  970. var i : integer;
  971. begin
  972. Result := 0; //0是空白
  973. for i := 1 to ZjShowSelectionCBox.Items.Count - 1 do
  974. begin
  975. if strCompareName = ZjShowSelectionCBox.Items[i] then
  976. begin
  977. Result := i;
  978. break;
  979. end;
  980. end;
  981. end;
  982. function TReportAdjuster.getHeadTailObj(HeadType : integer; TypeIDX : integer): PHeadRec;
  983. begin
  984. //根据表头尾对象及ID设置属性
  985. Result := pcxSmartCostRpt.newHeadTailObj(HeadType);
  986. if (Result <> nil) and (TypeIDX > 0) then
  987. begin
  988. Result.Name := ZjShowSelectionCBox.Items[TypeIDX];
  989. Result.Align := 3;
  990. if TypeIDX <> 17 then
  991. Result.Prefix := ZjShowSelectionCBox.Items[TypeIDX] + ': '
  992. else Result.Prefix := '';
  993. //
  994. Result.Field := pcxSmartCostRpt.getFieldByID(1000 + TypeIDX);
  995. if Result.Field = nil then
  996. Result.Param := pcxSmartCostRpt.getParamByID(1000 + TypeIDX);
  997. //备注: 1. 建设项目名称(对应FieldID=1001) 2. 单位工程名称(对应FieldID=1002)
  998. // 3. 工程地点(对应FieldID=1003) 4. 建设单位(对应FieldID=1004)
  999. // 5. 投标人(对应FieldID=1005) 6. 编制(对应FieldID=1006)
  1000. // 7. 编制人证号(对应FieldID=1007) 8. 复核(对应FieldID=1008)
  1001. // 9. 复核人证号(对应FieldID=1009) 10.编制范围(对应FieldID=1010)
  1002. // 11.编制时间(年月日)(对应FieldID=1011)
  1003. // 以上是项目级
  1004. // 12.分项工程名称(对应FieldID=1012) 13.分项工程编号(对应FieldID=1013)
  1005. // 14.计量单位(对应FieldID=1014) 15. 数量(对应FieldID=1015)
  1006. // 16.单价(对应FieldID=1016)
  1007. // 以上是清单级
  1008. // 17.表编号(对应FieldID=1017)
  1009. // 18.打印时间(对应FieldID=1018)
  1010. // 这里假设所有的相关参数都已经存在(预先写好了的!),名称与ID确定,
  1011. // 如果没有的话,说明类型不一样,不能选择
  1012. end;
  1013. end;
  1014. procedure TReportAdjuster.ReportCellLineSpinEditChange(Sender: TObject);
  1015. begin
  1016. if (L_IniFile <> nil) then
  1017. begin
  1018. if TestReal(ReportCellLineSpinEdit.Text) then
  1019. begin
  1020. //L_IniFile.WriteInteger('页面', '表格线粗',ReportCellLineSpinEdit.Value);
  1021. L_IniFile.WriteFloat('页面', '表格线粗',StrToFloat(ReportCellLineSpinEdit.Text));
  1022. end else
  1023. begin
  1024. ReportCellLineSpinEdit.Text := '0.75';
  1025. end;
  1026. end;
  1027. end;
  1028. procedure TReportAdjuster.BorderLineSpinEditChange(Sender: TObject);
  1029. begin
  1030. if (L_IniFile <> nil) then
  1031. begin
  1032. if TestReal(ReportCellLineSpinEdit.Text) then
  1033. begin
  1034. L_IniFile.WriteFloat('页面', '表格线粗', StrToFloat(ReportCellLineSpinEdit.Text));
  1035. L_IniFile.WriteInteger('页面', '边框线粗',BorderLineSpinEdit.Value);
  1036. end;
  1037. end;
  1038. end;
  1039. procedure TReportAdjuster.RepHeadFootLineCHKClick(Sender: TObject);
  1040. begin
  1041. if L_IniFile <> nil then
  1042. begin
  1043. if TCheckBox(Sender).Checked then
  1044. L_IniFile.WriteInteger('页面', TCheckBox(Sender).Caption,1)
  1045. else
  1046. L_IniFile.WriteInteger('页面', TCheckBox(Sender).Caption,0)
  1047. end;
  1048. end;
  1049. procedure TReportAdjuster.zgReportElementsGetCellEditor(Sender: TObject;
  1050. ACoord: TPoint; var AControl: TWinControl);
  1051. begin
  1052. if TZjGrid(Sender).Items[ACoord].ClassType = TZjComboCell then
  1053. begin
  1054. AControl := ZjShowSelectionCBox;
  1055. end;
  1056. end;
  1057. procedure TReportAdjuster.zgReportElementsEditorLoadCell(Sender: TObject;
  1058. ACoord: TPoint; AControl: TWinControl);
  1059. begin
  1060. ZjShowSelectionCBox.ItemIndex := getHeadTailIndex(zgReportElements.Cells[ACoord.X,ACoord.Y].Text);;
  1061. if ZjShowSelectionCBox.ItemIndex <= 0 then
  1062. begin
  1063. ZjShowSelectionCBox.Items[0] := zgReportElements.Cells[ACoord.X,ACoord.Y].Text;
  1064. ZjShowSelectionCBox.ItemIndex := 0;
  1065. end;
  1066. end;
  1067. procedure TReportAdjuster.zgReportElementsEditorSaveCell(Sender: TObject;
  1068. ACoord: TPoint; AControl: TWinControl);
  1069. var ObjList : TList;
  1070. ObjType : integer;
  1071. i,j : integer;
  1072. idx : integer;
  1073. intMaxHeadTailID : integer;
  1074. HeadTailObj : PHeadRec;
  1075. PageObj : PPageRec;
  1076. douRowHeight : double;
  1077. intRowSteps : integer;
  1078. begin
  1079. //在修改之前先获取旧ITEM信息
  1080. if HeadRBtn.Checked then
  1081. begin
  1082. idx := arr_HeadIndex[ACoord.X][ACoord.Y - 1];
  1083. arr_HeadIndex[ACoord.X][ACoord.Y - 1] := ZjShowSelectionCBox.ItemIndex;
  1084. ObjType := 0;
  1085. end else
  1086. begin
  1087. idx := arr_FootIndex[ACoord.X][ACoord.Y - 1];
  1088. arr_FootIndex[ACoord.X][ACoord.Y - 1] := ZjShowSelectionCBox.ItemIndex;
  1089. ObjType := 1;
  1090. end;
  1091. if idx <> ZjShowSelectionCBox.ItemIndex then
  1092. begin
  1093. //bHeadTailChangd := true;
  1094. //checkCurReport;
  1095. //{
  1096. intMaxHeadTailID := 0;
  1097. //1. 清除旧的表头尾对象
  1098. if (idx < intMaxItem) then
  1099. begin
  1100. ObjList := TList.Create;
  1101. try
  1102. if HeadRBtn.Checked then
  1103. pcxSmartCostRpt.getAllHeadObjs(ObjList)
  1104. else
  1105. pcxSmartCostRpt.getAllTailObjs(ObjList);
  1106. for i := 0 to ObjList.Count - 1 do
  1107. begin
  1108. if (intMaxHeadTailID < PHeadRec(ObjList[i]).ID) then
  1109. intMaxHeadTailID := PHeadRec(ObjList[i]).ID + 1;
  1110. if PHeadRec(ObjList[i]).Name = ZjShowSelectionCBox.Items[idx] then
  1111. begin
  1112. pcxSmartCostRpt.delHeadTailObj(ObjType, ObjList[i]);
  1113. //break;
  1114. //备注: 这里以名称为制约因素,并且是清空所有的同名对象
  1115. end;
  1116. end;
  1117. finally
  1118. ObjList.Free;
  1119. end;
  1120. end else
  1121. begin
  1122. ObjList := TList.Create;
  1123. try
  1124. pcxSmartCostRpt.getAllPageObjs(ObjList);
  1125. for i := 0 to ObjList.Count - 1 do
  1126. begin
  1127. if PPageRec(ObjList[i]).Name = ZjShowSelectionCBox.Items[idx] then
  1128. begin
  1129. //pcxSmartCostRpt.delPageObj(ObjList[i]);
  1130. PPageRec(ObjList[i]).Visible := false;
  1131. pcxSmartCostRpt.setPageObj(PPageRec(ObjList[i]));
  1132. break;
  1133. end;
  1134. end;
  1135. finally
  1136. ObjList.Free;
  1137. end;
  1138. end;
  1139. //2. 创建新的表头尾对象
  1140. if ZjShowSelectionCBox.ItemIndex > 0 then
  1141. begin
  1142. if (ZjShowSelectionCBox.ItemIndex < intMaxItem) then
  1143. begin
  1144. //增加表头尾对象
  1145. HeadTailObj := getHeadTailObj(ObjType,ZjShowSelectionCBox.ItemIndex);
  1146. //设置相关属性
  1147. if HeadTailObj <> nil then
  1148. begin
  1149. HeadtailObj.ExArea.ExLeft := ACoord.X * (100/zgReportElements.ColCount);
  1150. //HeadtailObj.ExArea.ExRight:= HeadTailObj.ExArea.ExLeft + 100/zgReportElements.ColCount;
  1151. HeadtailObj.ExArea.ExRight:= HeadTailObj.ExArea.ExLeft + 200/zgReportElements.ColCount;
  1152. if HeadtailObj.ExArea.ExRight > 100 then
  1153. HeadtailObj.ExArea.ExRight := 100;
  1154. HeadtailObj.ExArea.ExTop := ACoord.Y;
  1155. HeadtailObj.ExArea.ExBottom := 1;
  1156. end;
  1157. if (HeadTailObj.Field <> nil) or (HeadTailObj.Param <> nil) then
  1158. pcxSmartCostRpt.setHeadTailObj(ObjType, HeadTailObj)
  1159. else //提示并释放对象
  1160. begin
  1161. Application.MessageBox('您选取了不符合本表类型的选项,请重新再选一个。','注意',0);
  1162. ZjShowSelectionCBox.ItemIndex := 0;
  1163. zgReportElements.Cells[ACoord.X,ACoord.Y].Text := '';
  1164. //Dispose(HeadTailObj);
  1165. pcxSmartCostRpt.delHeadTailObj(ObjType,HeadTailObj);
  1166. end;
  1167. end else
  1168. begin
  1169. PageObj := nil;
  1170. ObjList := TList.Create;
  1171. try
  1172. pcxSmartCostRpt.getAllPageObjs(ObjList);
  1173. for i := 0 to ObjList.Count - 1 do
  1174. begin
  1175. if PPageRec(ObjList[i]).Name = ZjShowSelectionCBox.Items[ZjShowSelectionCBox.ItemIndex] then
  1176. begin
  1177. PageObj := ObjList[i];
  1178. PPageRec(ObjList[i]).Visible := true;
  1179. PageObj.PageType := ZjShowSelectionCBox.ItemIndex - intMaxItem;
  1180. break;
  1181. end;
  1182. end;
  1183. finally
  1184. ObjList.Free;
  1185. end;
  1186. if (PageObj = nil) then
  1187. PageObj := pcxSmartCostRpt.newPageObj(ZjShowSelectionCBox.ItemIndex - intMaxItem);
  1188. //设置相关属性
  1189. PageObj.Name := ZjShowSelectionCBox.Items[ZjShowSelectionCBox.ItemIndex];
  1190. case ObjType of
  1191. 0 : PageObj.AreaName := '表头';
  1192. 1 : PageObj.AreaName := '表尾';
  1193. end;
  1194. PageObj.Align := 3;
  1195. PageObj.AreaType := false;
  1196. PageObj.ExArea.ExLeft := ACoord.X * (100/zgReportElements.ColCount);
  1197. PageObj.ExArea.ExRight:= PageObj.ExArea.ExLeft + 100/zgReportElements.ColCount;
  1198. if PageObj.ExArea.ExRight > 100 then
  1199. PageObj.ExArea.ExRight := 100;
  1200. PageObj.ExArea.ExTop := ACoord.Y;
  1201. PageObj.ExArea.ExBottom := 1;
  1202. //
  1203. PageObj.FontRec.FontName := L_IniFile.ReadString('页面','表眉/表脚_字体','宋体');
  1204. PageObj.FontRec.FontHeight := Round(L_IniFile.ReadInteger('页面','表眉/表脚_字体大小',12)*4/3);
  1205. PageObj.FontRec.FontBold := 400 + L_IniFile.ReadInteger('页面','表眉/表脚_字体粗',0)*200;
  1206. PageObj.FontRec.FontItalic := L_IniFile.ReadInteger('页面','表眉/表脚_字体斜',0);
  1207. PageObj.FontRec.FontUnderLine := L_IniFile.ReadInteger('页面','表眉/表脚_字体下滑线',0);
  1208. //
  1209. if (ZjShowSelectionCBox.ItemIndex = intMaxItem) then
  1210. begin
  1211. PageObj.PrefixContent := '共';
  1212. PageObj.SufixContent := '页';
  1213. end else
  1214. if (ZjShowSelectionCBox.ItemIndex = (intMaxItem + 1)) then
  1215. begin
  1216. PageObj.PrefixContent := '第';
  1217. PageObj.SufixContent := '页';
  1218. PageObj.PageDist := seStartPage.Value - 1;
  1219. end;
  1220. //储存
  1221. pcxSmartCostRpt.setPageObj(PageObj);
  1222. end;
  1223. end;
  1224. //3. 重新设置表头,尾的高度及层数
  1225. douRowHeight := 0;
  1226. intRowSteps := 1;
  1227. for i := 3 downto 1 do
  1228. begin
  1229. for j := 0 to 7 do
  1230. begin
  1231. if Trim(zgReportElements.Cells[j,i].Text) <> '' then
  1232. begin
  1233. douRowHeight := DOU_DEFAULTHEIGHT * i;
  1234. intRowSteps := i;
  1235. break;
  1236. end;
  1237. end;
  1238. if douRowHeight > 0.5 then
  1239. break;
  1240. end;
  1241. pcxSmartCostRpt.setNewHeadTailAreaProperties(ObjType, douRowHeight, intRowSteps);
  1242. //4. 保存
  1243. SaveRpt(getCurReportName());
  1244. //}
  1245. end;
  1246. end;
  1247. procedure TReportAdjuster.ReportsCBoxChange(Sender: TObject);
  1248. var TitleRec : PTitleRec;
  1249. strPath : String;
  1250. strFileName : String;
  1251. intPos : integer;
  1252. FileHandle : THandle;
  1253. FindFileRec : TWIN32FindData;
  1254. RepObjList : TList;
  1255. i,j : integer;
  1256. ContentObj : PContentRec;
  1257. CrossContentObj : PCrossContentRec;
  1258. ColumnObj : PColumnRec;
  1259. ObjList : TList;
  1260. PageObj : PPageRec;
  1261. Param : PParamRec;
  1262. //ReportNameMod : string;
  1263. begin
  1264. //(*
  1265. if ReportsCBox.ItemIndex >= 0 then
  1266. begin
  1267. //bHasModified := false;
  1268. //事件设置
  1269. zgReportProperty.OnCellValueChanged := nil;
  1270. TitleEdit.OnChange := nil;
  1271. getReport(getCurReportName());
  1272. {
  1273. ReportNameMod := ExePath + 'SmartCostReports\' +
  1274. ReportsCBox.Items[ReportsCBox.ItemIndex] + strModified + FILEEXT;
  1275. if FileExists(ReportNameMod) then
  1276. bHasModified := true;
  1277. if bHasModified then
  1278. getReport(ReportNameMod);
  1279. //}
  1280. //1. 显示Title
  1281. TitleRec := pcxSmartCostRpt.getTitleByID(1);
  1282. if TitleRec <> nil then
  1283. TitleEdit.Text := TitleRec.Content
  1284. else
  1285. TitleEdit.Text := EmptyStr;
  1286. if (TitleRec.Field <> nil) or (TitleRec.Param <> nil) then
  1287. TitleEdit.ReadOnly := true
  1288. else
  1289. TitleEdit.ReadOnly := false;
  1290. //2. 查找格式
  1291. (*
  1292. StyleCBox.Clear;
  1293. StyleCBox.Items.Add('当前');
  1294. strPath := ExePath + 'SmartCostReports\Formats\' + ReportsCBox.Items[ReportsCBox.ItemIndex];
  1295. if ForceDirectories(strPath) then
  1296. begin
  1297. FileHandle := FindFirstFile(PChar(strPath + '\*' + FILEEXT),FindFileRec);
  1298. if FileHandle <> INVALID_HANDLE_VALUE then
  1299. begin
  1300. strFileName := ExtractFileName(FindFileRec.cFileName);
  1301. intPos := Pos(FILEEXT, strFileName);
  1302. if intPos > 0 then
  1303. begin
  1304. strFileName := Copy(strFileName, 1 , intPos - 1 );
  1305. end;
  1306. StyleCBox.Items.Add(strFileName);
  1307. while FindNextFile(FileHandle,FindFileRec) do
  1308. begin
  1309. strFileName := ExtractFileName(FindFileRec.cFileName);
  1310. intPos := Pos(FILEEXT, strFileName);
  1311. if intPos > 0 then
  1312. begin
  1313. strFileName := Copy(strFileName, 1 , intPos - 1 );
  1314. end;
  1315. StyleCBox.Items.Add(strFileName);
  1316. end;
  1317. end;
  1318. end;
  1319. StyleCBox.ItemIndex := 0;
  1320. //*)
  1321. //3. 报表方向
  1322. OrientationGroup.OnClick := nil;
  1323. if (pcxSmartCostRpt.ReportOrientation = '横') then
  1324. OrientationGroup.ItemIndex := 1
  1325. else
  1326. OrientationGroup.ItemIndex := 0;
  1327. OrientationGroup.OnClick := OrientationGroupClick;
  1328. //4.
  1329. editLineHeight.OnChange := nil;
  1330. if (TestReal(pcxSmartCostRpt.FlowContentOrgHeight)) then
  1331. begin
  1332. editLineHeight.Text := FloatToStr(StrToFloat(pcxSmartCostRpt.FlowContentOrgHeight)*10);
  1333. editLineHeight.Enabled := true;
  1334. editLineHeight.OnChange := editLineHeightChange;
  1335. end else
  1336. begin
  1337. editLineHeight.Enabled := false;
  1338. end;
  1339. //5. 检测其他报表元素项
  1340. RepObjList := TList.Create;
  1341. try
  1342. //a. 本页小计
  1343. pcxSmartCostRpt.getAllSumObjs(0,RepObjList);
  1344. if RepObjList.Count > 0 then
  1345. begin
  1346. PrintPageAmountCHK.Enabled := true;
  1347. PrintPageAmountCHK.OnClick := nil;
  1348. if PSumRec(RepObjList[0]).Visible then
  1349. PrintPageAmountCHK.Checked := true
  1350. else
  1351. PrintPageAmountCHK.Checked := false;
  1352. PrintPageAmountCHK.OnClick := PrintPageAmountCHKClick;
  1353. end else
  1354. begin
  1355. PrintPageAmountCHK.Enabled := false;
  1356. end;
  1357. //b. 表栏头
  1358. bCrossObj := false;
  1359. pcxSmartCostRpt.getAllFlowShowContentObjs(L_ContentObjList);
  1360. if (L_ContentObjList.Count = 0) then
  1361. begin
  1362. pcxSmartCostRpt.getAllCrossContentObjs(L_ContentObjList);
  1363. bCrossObj := true;
  1364. end;
  1365. zgReportProperty.ColCount := L_ContentObjList.Count + 1;
  1366. if not(bCrossObj) then
  1367. begin
  1368. for i := 0 to L_ContentObjList.Count - 1 do
  1369. begin
  1370. ContentObj := L_ContentObjList[i];
  1371. ColumnObj := ContentObj.Column;
  1372. if ColumnObj <> nil then
  1373. begin
  1374. zgReportProperty.Cells[i + 1, 0].Text := ColumnObj.Name;
  1375. zgReportProperty.Cells[i + 1, 1].Text := ColumnObj.Content;
  1376. //宽度目前是百份比
  1377. zgReportProperty.Cells[i + 1, 2].Text := FloatToStr(ColumnObj.ExArea.ExRight - ColumnObj.ExArea.ExLeft);
  1378. zgReportProperty.Cells[i + 1, 3].Text := GetNameByAlign(ContentObj.Align);
  1379. //精度
  1380. zgReportProperty.Cells[i + 1, 4].Text := IntToStr(ContentObj.ShowInfoRec.Precision);
  1381. end;
  1382. end;
  1383. end else
  1384. begin
  1385. for i := 0 to L_ContentObjList.Count - 1 do
  1386. begin
  1387. CrossContentObj := L_ContentObjList[i];
  1388. ColumnObj := CrossContentObj.CrossContent.Column;
  1389. if ColumnObj <> nil then
  1390. begin
  1391. zgReportProperty.Cells[i + 1, 0].Text := ColumnObj.Name;
  1392. zgReportProperty.Cells[i + 1, 1].Text := ColumnObj.Content;
  1393. //宽度目前是百份比
  1394. zgReportProperty.Cells[i + 1, 2].Text := FloatToStr(ColumnObj.ExArea.ExRight - ColumnObj.ExArea.ExLeft);
  1395. zgReportProperty.Cells[i + 1, 3].Text := GetNameByAlign(CrossContentObj.CrossContent.Align);
  1396. //精度
  1397. zgReportProperty.Cells[i + 1, 4].Text := IntToStr(CrossContentObj.CrossContent.ShowInfoRec.Precision);
  1398. end;
  1399. end;
  1400. end;
  1401. finally
  1402. RepObjList.Free;
  1403. end;
  1404. //6. 打开或设置其他
  1405. HeadRBtn.Enabled := true;
  1406. HeadRBtn.Checked := false;
  1407. TailRBtn.Enabled := true;
  1408. TailRBtn.Checked := false;
  1409. seStartPage.Enabled := true;
  1410. ObjList := TList.Create;
  1411. try
  1412. pcxSmartCostRpt.getAllPageObjs(ObjList);
  1413. for i := 0 to ObjList.Count - 1 do
  1414. begin
  1415. PageObj := ObjList[i];
  1416. if PageObj.PageType = 1 then
  1417. begin
  1418. seStartPage.Value := PageObj.PageDist + 1;
  1419. pcxSmartCostRpt.setPageObj(PageObj);
  1420. //保存
  1421. //SaveRpt(getCurReportName());
  1422. break;
  1423. end;
  1424. end;
  1425. finally
  1426. ObjList.Free;
  1427. end;
  1428. zgReportProperty.OnCellValueChanged := zgReportPropertyCellValueChanged;
  1429. TitleEdit.OnChange := TitleEditChange;
  1430. for i := 0 to 7 do
  1431. begin
  1432. for j := 0 to 2 do
  1433. begin
  1434. arr_HeadIndex[i][j] := 0;
  1435. arr_FootIndex[i][j] := 0;
  1436. end;
  1437. end;
  1438. Param := pcxSmartCostRpt.getParamByID(3001);
  1439. if Param <> nil then
  1440. begin
  1441. seRefPage.OnChange := nil;
  1442. seRefPage.Enabled := true;
  1443. seRefPage.Value := Param.Value;
  1444. seRefPage.OnChange := seRefPageChange;
  1445. end else
  1446. begin
  1447. seRefPage.Enabled := false;
  1448. end;
  1449. HeadRBtn.Checked := true;
  1450. end;
  1451. //*)
  1452. end;
  1453. procedure TReportAdjuster.SaveFormatBtnClick(Sender: TObject);
  1454. var strFormat : String;
  1455. begin
  1456. //保存格式
  1457. (*
  1458. strFormat := InputBox('格式保存','请输入要保存的格式名称','');
  1459. if strFormat <> EmptyStr then
  1460. begin
  1461. //1. 检测是否有重复的格式
  1462. strFormat := ExePath + 'SmartCostReports\Formats\' +
  1463. ReportsCBox.Items[ReportsCBox.ItemIndex] + '\' +
  1464. strFormat + FILEEXT;
  1465. if FileExists(strFormat) then
  1466. begin
  1467. if Application.MessageBox('','',MB_YESNO) <> IDYES then
  1468. exit;
  1469. end;
  1470. CopyFileTo(ExePath +'SmartCostReports\'+
  1471. ReportsCBox.Items[ReportsCBox.ItemIndex] + FILEEXT,
  1472. strFormat);
  1473. end;
  1474. //*)
  1475. end;
  1476. procedure TReportAdjuster.StyleCBoxChange(Sender: TObject);
  1477. var strFormat : String;
  1478. begin
  1479. //选择新格式
  1480. end;
  1481. procedure TReportAdjuster.OrientationGroupClick(Sender: TObject);
  1482. var strOri : string;
  1483. begin
  1484. case OrientationGroup.ItemIndex of
  1485. 0 : strOri := '纵';
  1486. 1 : strOri := '横';
  1487. end;
  1488. pcxSmartCostRpt.ReportOrientation := strOri;
  1489. SaveRpt(getCurReportName());
  1490. end;
  1491. procedure TReportAdjuster.PrintPageAmountCHKClick(Sender: TObject);
  1492. var SumObjList : TList;
  1493. douHeight : double;
  1494. intSumSteps : integer;
  1495. SumObj : PSumRec;
  1496. i : integer;
  1497. begin
  1498. case PrintPageAmountCHK.Checked of
  1499. true :
  1500. begin
  1501. SumObjList := TList.Create ;
  1502. try
  1503. //1. 设置所有页小计项VISIBLE为TRUE
  1504. pcxSmartCostRpt.getAllSumObjs(0, SumObjList);
  1505. for i := 0 to SumObjList.Count - 1 do
  1506. begin
  1507. SumObj := PSumRec(SumObjList[i]);
  1508. SumObj.Visible := true;
  1509. pcxSmartCostRpt.setSumObj(SumObj);
  1510. end;
  1511. //如果有页小计的话,就有,没有就说明不需要,不然如何去确认合计字段?
  1512. if SumObjList.Count > 0 then
  1513. begin
  1514. intSumSteps := pcxSmartCostRpt.SumSteps;
  1515. Inc(intSumSteps);
  1516. douHeight := pcxSmartCostRpt.SumOriginalHeight;
  1517. if (douHeight = 0.0) then
  1518. Dec(intSumSteps);
  1519. douHeight := douHeight + DOU_DEFAULTHEIGHT; //要减掉页小计的高度,约定是DOU_DEFAULTHEIGHT,单位是厘米,
  1520. pcxSmartCostRpt.setNewSumAreaProperties(douHeight,intSumSteps);
  1521. //3. 整理其他合计项
  1522. pcxSmartCostRpt.getAllSumObjs(1, SumObjList);
  1523. //设置总计项
  1524. for i := 0 to SumObjList.Count - 1 do
  1525. begin
  1526. SumObj := PSumRec(SumObjList[i]);
  1527. SumObj.ExArea.ExTop := SumObj.ExArea.ExTop + 1;
  1528. pcxSmartCostRpt.setSumObj(SumObj);
  1529. end;
  1530. pcxSmartCostRpt.getAllSumObjs(2, SumObjList);
  1531. //设置章总计项
  1532. for i := 0 to SumObjList.Count - 1 do
  1533. begin
  1534. SumObj := PSumRec(SumObjList[i]);
  1535. SumObj.ExArea.ExTop := SumObj.ExArea.ExTop + 1;
  1536. pcxSmartCostRpt.setSumObj(SumObj);
  1537. end;
  1538. //4. 保存
  1539. SaveRpt(getCurReportName());
  1540. end;
  1541. finally
  1542. sumObjList.Free;
  1543. end;
  1544. end;
  1545. false:
  1546. begin
  1547. SumObjList := TList.Create ;
  1548. try
  1549. //1. 设置所有页小计项VISIBLE为FALSE
  1550. //pcxSmartCostRpt.delSumObjs(0);
  1551. pcxSmartCostRpt.getAllSumObjs(0, SumObjList);
  1552. for i := 0 to SumObjList.Count - 1 do
  1553. begin
  1554. SumObj := PSumRec(SumObjList[i]);
  1555. SumObj.Visible := false;
  1556. pcxSmartCostRpt.setSumObj(SumObj);
  1557. end;
  1558. //2. 整理合计框高度
  1559. if SumObjList.Count > 0 then
  1560. begin
  1561. douHeight := pcxSmartCostRpt.SumOriginalHeight;
  1562. douHeight := douHeight - DOU_DEFAULTHEIGHT; //要减掉页小计的高度,约定是DOU_DEFAULTHEIGHT,单位是厘米,
  1563. if douHeight < 0 then douHeight := 0;
  1564. intSumSteps := pcxSmartCostRpt.SumSteps;
  1565. Dec(intSumSteps);
  1566. if intSumSteps < 1 then intSumSteps := 1;
  1567. pcxSmartCostRpt.setNewSumAreaProperties(douHeight,intSumSteps);
  1568. //3. 整理其他合计项
  1569. pcxSmartCostRpt.getAllSumObjs(1, SumObjList);
  1570. //设置总计项
  1571. for i := 0 to SumObjList.Count - 1 do
  1572. begin
  1573. SumObj := PSumRec(SumObjList[i]);
  1574. SumObj.ExArea.ExTop := SumObj.ExArea.ExTop - 1;
  1575. if SumObj.ExArea.ExTop < 0 then
  1576. SumObj.ExArea.ExTop := 1;
  1577. pcxSmartCostRpt.setSumObj(SumObj);
  1578. end;
  1579. pcxSmartCostRpt.getAllSumObjs(2, SumObjList);
  1580. //设置章总计项
  1581. for i := 0 to SumObjList.Count - 1 do
  1582. begin
  1583. SumObj := PSumRec(SumObjList[i]);
  1584. SumObj.ExArea.ExTop := SumObj.ExArea.ExTop - 1;
  1585. if SumObj.ExArea.ExTop < 0 then
  1586. SumObj.ExArea.ExTop := 1;
  1587. pcxSmartCostRpt.setSumObj(SumObj);
  1588. end;
  1589. //4. 保存
  1590. SaveRpt(getCurReportName());
  1591. end;
  1592. finally
  1593. SumObjList.free;
  1594. end;
  1595. end;
  1596. end;
  1597. end;
  1598. procedure TReportAdjuster.HeadRBtnClick(Sender: TObject);
  1599. var i : integer;
  1600. ObjList : TList;
  1601. PageObjList : TList;
  1602. HeadTailObj : PHeadRec;
  1603. PageObj : PPageRec;
  1604. Row, Col : integer;
  1605. strAreaName : string;
  1606. intType : integer;
  1607. begin
  1608. ObjList := TList.Create;
  1609. PageObjList := TList.Create;
  1610. try
  1611. pcxSmartCostRpt.getAllPageObjs(PageObjList);
  1612. case TRadioButton(Sender).tag of
  1613. 0 :
  1614. begin
  1615. pcxSmartCostRpt.getAllHeadObjs(ObjList);
  1616. strAreaName := '表头';
  1617. intType := 0;
  1618. end;
  1619. 1 :
  1620. begin
  1621. pcxSmartCostRpt.getAllTailObjs(ObjList);
  1622. strAreaName := '表尾';
  1623. intType := 1;
  1624. end;
  1625. end;
  1626. for i := PageObjList.Count - 1 downto 0 do
  1627. begin
  1628. PageObj := PageObjList[i];
  1629. if (PageObj.AreaName <> strAreaName) then
  1630. begin
  1631. PageObjList.Delete(i);
  1632. end;
  1633. end;
  1634. zgReportElements.Clear;
  1635. //1. 表头表尾项
  1636. for i := 0 to zgReportElements.ColCount - 1 do
  1637. begin
  1638. zgReportElements.CellClass.Cols[i] := TZjComboCell;
  1639. end;
  1640. for i := 0 to ObjList.Count - 1 do
  1641. begin
  1642. HeadTailObj := ObjList[i];
  1643. Row := Round(HeadTailObj.ExArea.ExTop);
  1644. if HeadTailObj.ExArea.ExLeft < 2.5 then
  1645. begin //左边
  1646. Col := 0;
  1647. end else
  1648. if HeadTailObj.ExArea.ExLeft < 15 then
  1649. begin //中间
  1650. Col := 1;
  1651. end else
  1652. if HeadTailObj.ExArea.ExLeft < 27.5 then
  1653. begin //右边
  1654. Col := 2;
  1655. end else
  1656. if HeadTailObj.ExArea.ExLeft < 40 then
  1657. begin
  1658. Col := 3;
  1659. end else
  1660. if HeadTailObj.ExArea.ExLeft < 52.5 then
  1661. begin
  1662. Col := 4;
  1663. end else
  1664. if HeadTailObj.ExArea.ExLeft < 65 then
  1665. begin
  1666. Col := 5;
  1667. end else
  1668. if HeadTailObj.ExArea.ExLeft < 77.5 then
  1669. begin
  1670. Col := 6;
  1671. end else
  1672. begin
  1673. Col := 7
  1674. end;
  1675. zgReportElements.Cells[Col,Row].Text := HeadTailObj.Name;
  1676. case intType of
  1677. 0 : arr_HeadIndex[Col][Row - 1] := getHeadTailIndex(HeadTailObj.Name);
  1678. 1 : arr_FootIndex[Col][Row - 1] := getHeadTailIndex(HeadTailObj.Name);
  1679. end;
  1680. end;
  1681. //2. 页码项
  1682. for i := 0 to PageObjList.Count - 1 do
  1683. begin
  1684. PageObj := PageObjList[i];
  1685. if not(PageObj.Visible) then
  1686. continue;
  1687. if PageObj.PageType = 1 then
  1688. begin
  1689. seStartPage.OnChange := nil;
  1690. seStartPage.Value := PageObj.PageDist + 1;
  1691. seStartPage.OnChange := seStartPageChange;
  1692. seStartPage.Enabled := true;
  1693. end;
  1694. Row := Round(PageObj.ExArea.ExTop);
  1695. if PageObj.ExArea.ExLeft < 2.5 then
  1696. begin //左边
  1697. Col := 0;
  1698. end else
  1699. if PageObj.ExArea.ExLeft < 15.5 then
  1700. begin //中间
  1701. Col := 1;
  1702. end else
  1703. if PageObj.ExArea.ExLeft < 27.5 then
  1704. begin //右边
  1705. Col := 2;
  1706. end else
  1707. if PageObj.ExArea.ExLeft < 40 then
  1708. begin
  1709. Col := 3;
  1710. end else
  1711. if PageObj.ExArea.ExLeft < 52.5 then
  1712. begin
  1713. Col := 4;
  1714. end else
  1715. if PageObj.ExArea.ExLeft < 65 then
  1716. begin
  1717. Col := 5;
  1718. end else
  1719. if PageObj.ExArea.ExLeft < 77.5 then
  1720. begin
  1721. Col := 6;
  1722. end else
  1723. begin
  1724. Col := 7;
  1725. end;
  1726. //备注: 上面的判断方式是只考虑三层的情况,目前也就限定了三层的情况
  1727. zgReportElements.Cells[Col,Row].Text := PageObj.Name;
  1728. case intType of
  1729. 0 : arr_HeadIndex[Col][Row - 1] := getHeadTailIndex(PageObj.Name);
  1730. 1 : arr_FootIndex[Col][Row - 1] := getHeadTailIndex(PageObj.Name);
  1731. end;
  1732. end;
  1733. finally
  1734. ObjList.Free;
  1735. PageObjList.Free;
  1736. end;
  1737. end;
  1738. procedure TReportAdjuster.FormCreate(Sender: TObject);
  1739. var i,j : integer;
  1740. begin
  1741. IsTender := False;
  1742. FReportManager := TScReportManager.Create;
  1743. //strConfigTxt := '报表打印机设置.INI';
  1744. {$IFNDEF _KTDebug}
  1745. RptArchiverObj := TReportArchiver.Create;
  1746. {$ENDIF}
  1747. MemFile := nil;
  1748. strModified := '(调价后)';
  1749. SetupChanged := false;
  1750. SetupReportName := '';
  1751. SetupReportNo := -1;
  1752. ReportChanged := false;
  1753. L_ContentObjList := TList.Create;
  1754. slReports := TStringList.Create;
  1755. ExePath := ExtractFilePath(Application.ExeName);
  1756. end;
  1757. procedure TReportAdjuster.zgReportPropertyCellValueChanged(
  1758. Sender: TObject);
  1759. var ContentObj : PContentRec;
  1760. CrossContentObj : PCrossContentRec;
  1761. i : integer;
  1762. douRight : double;
  1763. Row, Col : integer;
  1764. begin
  1765. //单元格内容变化
  1766. Row := zgReportProperty.CurRow;
  1767. Col := zgReportProperty.CurCol;
  1768. if not(bCrossObj) then
  1769. begin
  1770. ContentObj := L_ContentObjList[Col - 1];
  1771. if ContentObj.Column <> nil then
  1772. begin
  1773. try
  1774. case Row of
  1775. 1 : //标题
  1776. begin
  1777. ContentObj.Column.Content := zgReportProperty.Cells[Col,Row].Text;
  1778. pcxSmartCostRpt.setColumnHeadTailObj(0,ContentObj.Column);
  1779. end;
  1780. 2 : //宽度
  1781. begin
  1782. //这个宽度会影响到其他表栏
  1783. douRight := ContentObj.Column.ExArea.ExLeft;
  1784. for i := Col - 1 to L_ContentObjList.Count - 1 do
  1785. begin
  1786. ContentObj := L_ContentObjList[i];
  1787. ContentObj.Column.ExArea.ExLeft := douRight;
  1788. douRight := ContentObj.Column.ExArea.ExLeft + StrToFloat(zgReportProperty.Cells[i + 1,Row].Text);
  1789. ContentObj.Column.ExArea.ExRight:= douRight;
  1790. pcxSmartCostRpt.setColumnHeadTailObj(0,ContentObj.Column);
  1791. end;
  1792. end;
  1793. 3 : //对齐
  1794. begin
  1795. ContentObj.Align := getAlignByName(zgReportProperty.Cells[Col,Row].Text);
  1796. pcxSmartCostRpt.setFlowContentObj(ContentObj);
  1797. end;
  1798. 4 : //精度
  1799. begin
  1800. ContentObj.ShowInfoRec.Precision := StrToInt(zgReportProperty.Cells[Col,Row].Text);
  1801. pcxSmartCostRpt.setFlowContentObj(ContentObj);
  1802. end;
  1803. end;
  1804. //4. 保存
  1805. SaveRpt(getCurReportName());
  1806. except
  1807. //数据错误
  1808. end;
  1809. end;
  1810. end else
  1811. begin
  1812. CrossContentObj := L_ContentObjList[Col - 1];
  1813. if CrossContentObj.CrossContent.Column <> nil then
  1814. begin
  1815. try
  1816. case Row of
  1817. 1 : //标题
  1818. begin
  1819. CrossContentObj.CrossContent.Column.Content := zgReportProperty.Cells[Col,Row].Text;
  1820. pcxSmartCostRpt.setColumnHeadTailObj(0,CrossContentObj.CrossContent.Column);
  1821. end;
  1822. 2 : //宽度
  1823. begin
  1824. //这个宽度会影响到其他表栏
  1825. douRight := CrossContentObj.CrossContent.Column.ExArea.ExLeft;
  1826. for i := Col - 1 to L_ContentObjList.Count - 1 do
  1827. begin
  1828. CrossContentObj := L_ContentObjList[i];
  1829. CrossContentObj.CrossContent.Column.ExArea.ExLeft := douRight;
  1830. douRight := CrossContentObj.CrossContent.Column.ExArea.ExLeft + StrToFloat(zgReportProperty.Cells[i + 1,Row].Text);
  1831. CrossContentObj.CrossContent.Column.ExArea.ExRight:= douRight;
  1832. pcxSmartCostRpt.setColumnHeadTailObj(0,CrossContentObj.CrossContent.Column);
  1833. end;
  1834. end;
  1835. 3 : //对齐
  1836. begin
  1837. CrossContentObj.CrossContent.Align := getAlignByName(zgReportProperty.Cells[Col,Row].Text);
  1838. pcxSmartCostRpt.setCrossContentObj(CrossContentObj);
  1839. end;
  1840. 4 : //精度
  1841. begin
  1842. CrossContentObj.CrossContent.ShowInfoRec.Precision := StrToInt(zgReportProperty.Cells[Col,Row].Text);
  1843. pcxSmartCostRpt.setCrossContentObj(CrossContentObj);
  1844. end;
  1845. end;
  1846. //4. 保存
  1847. SaveRpt(getCurReportName());
  1848. except
  1849. //数据错误
  1850. end;
  1851. end;
  1852. end;
  1853. end;
  1854. procedure TReportAdjuster.TitleEditChange(Sender: TObject);
  1855. var TitleRec : PTitleRec;
  1856. begin
  1857. //改变表题名称
  1858. TitleRec := pcxSmartCostRpt.getTitleByID(1);
  1859. TitleRec.Content := TitleEdit.Text;
  1860. pcxSmartCostRpt.setTitleObj(TitleRec);
  1861. SaveRpt(getCurReportName());
  1862. end;
  1863. procedure TReportAdjuster.seStartPageChange(Sender: TObject);
  1864. var ObjList : TList;
  1865. i : integer;
  1866. PageObj : PPageRec;
  1867. begin
  1868. ObjList := TList.Create;
  1869. try
  1870. pcxSmartCostRpt.getAllPageObjs(ObjList);
  1871. for i := 0 to ObjList.Count - 1 do
  1872. begin
  1873. PageObj := ObjList[i];
  1874. if PageObj.PageType = 1 then
  1875. begin
  1876. PageObj.PageDist := seStartPage.Value - 1;
  1877. pcxSmartCostRpt.setPageObj(PageObj);
  1878. //保存
  1879. SaveRpt(getCurReportName());
  1880. break;
  1881. end;
  1882. end;
  1883. finally
  1884. ObjList.Free;
  1885. end;
  1886. end;
  1887. procedure TReportAdjuster.seRefPageChange(Sender: TObject);
  1888. var Param : PParamRec;
  1889. begin
  1890. Param := pcxSmartCostRpt.getParamByID(3001);
  1891. if Param <> nil then
  1892. begin
  1893. Param.Value := seRefPage.Value;
  1894. pcxSmartCostRpt.setIdpParamObj(Param);
  1895. //保存
  1896. SaveRpt(getCurReportName());
  1897. end;
  1898. end;
  1899. procedure TReportAdjuster.getReport(strFileName : string);
  1900. begin
  1901. {$IFNDEF _KTDebug}
  1902. RptArchiverObj.FileName := strFileName;
  1903. MemFile := RptArchiverObj.Extract;
  1904. {$ENDIF}
  1905. if (MemFile = nil) then
  1906. begin
  1907. MemFile := TMemoryStream.Create;
  1908. MemFile.LoadFromFile(strFileName);
  1909. end else
  1910. begin
  1911. MemFile.Position := 0;
  1912. end;
  1913. try
  1914. pcxSmartCostRpt.ReadReportStream(MemFile)
  1915. finally
  1916. MemFile.free;
  1917. MemFile := nil;
  1918. end;
  1919. end;
  1920. procedure TReportAdjuster.SaveRpt(strFileName : string);
  1921. var L_MemFile : TMemoryStream;
  1922. begin
  1923. L_MemFile := TMemoryStream.Create;
  1924. try
  1925. pcxSmartCostRpt.SaveToStream(L_MemFile);
  1926. {$IFNDEF _KTDebug}
  1927. //RptArchiverObj.FileName := ExePath +'SmartCostReports\'+ strFileName;
  1928. RptArchiverObj.FileName := strFileName; //调整后给的参数是一个完整的名称
  1929. RptArchiverObj.Archive(L_MemFile);
  1930. {$ELSE}
  1931. L_MemFile.Position := 0;
  1932. //L_MemFile.SaveToFile(ExePath +'SmartCostReports\'+ strFileName);
  1933. L_MemFile.SaveToFile(strFileName);
  1934. {$ENDIF}
  1935. checkCurReport;
  1936. finally
  1937. L_MemFile.free;
  1938. end;
  1939. end;
  1940. function TReportAdjuster.getCurReportName() : string;
  1941. begin
  1942. Result := '';
  1943. if ReportsCBox.ItemIndex >=0 then
  1944. begin
  1945. FReportManager.RecordNo := Integer(ReportsCBox.Items.Objects[ReportsCBox.ItemIndex]);
  1946. Result := FReportManager.FieldValue['FileName'];
  1947. end;
  1948. end;
  1949. procedure TReportAdjuster.LoadReports;
  1950. // 2012.3.1 HXY注销这个Const变量
  1951. const
  1952. ReportVerNames: array[TScProjType] of string =
  1953. ('招投标版', '预算版', '概算版', '可行性估算版', '建议估算版',
  1954. '三级清单预算', '决算');
  1955. begin
  1956. FReportManager.LoadFromSRT(ExePath + 'BillsEditorReports\*' + FILEEXT, '主版本=招投标版');
  1957. ReportsCBox.Items.Clear;
  1958. // lenglshumei 2011-1-12 广东版调价前后
  1959. // {$IF DEFINED(_ScGuangDong) OR DEFINED(_ScBills)}
  1960. // if not IsTender then
  1961. // FReportManager.SetRange(['调价前'], ['是'])
  1962. // else
  1963. // FReportManager.SetRange(['调价前'], ['否']);
  1964. // {$IFEND}
  1965. FReportManager.First;
  1966. while not FReportManager.Eof do
  1967. begin
  1968. ReportsCBox.AddItem(FReportManager.FieldValue['名称'], Pointer(FReportManager.RecordNo));
  1969. FReportManager.Next;
  1970. end;
  1971. ReportsCBox.Sorted := true;
  1972. //*)
  1973. end;
  1974. {$IFNDEF _KTDebug}
  1975. function chkLoadFile(strFileName : string): boolean;
  1976. begin
  1977. Result := true;
  1978. end;
  1979. {$ENDIF}
  1980. procedure TReportAdjuster.UpCHKClick(Sender: TObject);
  1981. begin
  1982. if L_IniFile <> nil then
  1983. begin
  1984. if UpCHK.Checked then
  1985. begin
  1986. L_IniFile.WriteInteger('页面', UpCHK.Caption,1);
  1987. UpTitleEdit.Enabled := true;
  1988. UpLineCHK.Enabled := true;
  1989. UpGroup.Enabled := true;
  1990. //
  1991. if (UpLineCHK.Checked) then
  1992. L_IniFile.WriteInteger('页面', UpLineCHK.Caption,1)
  1993. else
  1994. L_IniFile.WriteInteger('页面', UpLineCHK.Caption,0);
  1995. L_IniFile.WriteString('页面', '页眉_显示内容',UpTitleEdit.Text);
  1996. case UpGroup.ItemIndex of
  1997. 0 : L_IniFile.WriteString('页面', '页眉_对齐','左');
  1998. 1 : L_IniFile.WriteString('页面', '页眉_对齐','中');
  1999. 2 : L_IniFile.WriteString('页面', '页眉_对齐','右');
  2000. end;
  2001. end else
  2002. begin
  2003. L_IniFile.WriteInteger('页面', UpCHK.Caption,0);
  2004. UpTitleEdit.Enabled := false;
  2005. UpLineCHK.Enabled := false;
  2006. UpGroup.Enabled := false;
  2007. end;
  2008. ReportChanged := true;
  2009. end;
  2010. end;
  2011. procedure TReportAdjuster.DownCHKClick(Sender: TObject);
  2012. begin
  2013. if L_IniFile <> nil then
  2014. begin
  2015. if DownCHK.Checked then
  2016. begin
  2017. L_IniFile.WriteInteger('页面', DownCHK.Caption,1);
  2018. DownStartPage.Enabled := true;
  2019. DownLineCHK.Enabled := true;
  2020. DownGroup.Enabled := true;
  2021. //
  2022. if (DownLineCHK.Checked) then
  2023. L_IniFile.WriteInteger('页面', DownLineCHK.Caption,1)
  2024. else
  2025. L_IniFile.WriteInteger('页面', DownLineCHK.Caption,0);
  2026. L_IniFile.WriteInteger('页面', '页脚_起始页码',DownStartPage.Value);
  2027. case DownGroup.ItemIndex of
  2028. 0 : L_IniFile.WriteString('页面', '页脚_对齐','左');
  2029. 1 : L_IniFile.WriteString('页面', '页脚_对齐','中');
  2030. 2 : L_IniFile.WriteString('页面', '页脚_对齐','右');
  2031. end;
  2032. end else
  2033. begin
  2034. L_IniFile.WriteInteger('页面', DownCHK.Caption,0);
  2035. DownStartPage.Enabled := false;
  2036. DownLineCHK.Enabled := false;
  2037. DownGroup.Enabled := false;
  2038. end;
  2039. ReportChanged := true;
  2040. end;
  2041. end;
  2042. procedure TReportAdjuster.editLineHeightChange(Sender: TObject);
  2043. begin
  2044. //
  2045. end;
  2046. procedure TReportAdjuster.N1Click(Sender: TObject);
  2047. var
  2048. strOldName : string;
  2049. strNewName : string;
  2050. ObjList : TList;
  2051. ObjType : integer;
  2052. idx : integer;
  2053. intMaxHeadTailID : integer;
  2054. HeadTailObj : PHeadRec;
  2055. PageObj : PPageRec;
  2056. douRowHeight : double;
  2057. intRowSteps : integer;
  2058. begin
  2059. //修改显示名称
  2060. //(*
  2061. if HeadRBtn.Checked then
  2062. begin
  2063. ObjType := 0;
  2064. end else
  2065. begin
  2066. ObjType := 1;
  2067. end;
  2068. //*)
  2069. //
  2070. strOldName := zgReportElements.Cells[zgReportElements.CurCol,zgReportElements.CurRow].Text;
  2071. //if (strOldName <> EmptyStr) then
  2072. begin
  2073. HeadTailObj := pcxSmartCostRpt.getHeadTailObjByName(strOldName,ObjType);
  2074. if (HeadTailObj <> nil) then
  2075. begin
  2076. strNewName := InputBox('纵横创新','请输入新的显示名称:',strOldName);
  2077. if (strNewName <> EmptyStr) and (strNewName <> strOldName) then
  2078. begin
  2079. zgReportElements.Cells[zgReportElements.CurCol,zgReportElements.CurRow].Text := strNewName;
  2080. //(*
  2081. idx := arr_HeadIndex[zgReportElements.CurCol][zgReportElements.CurRow - 1];
  2082. if idx <= 0 then
  2083. begin
  2084. ZjShowSelectionCBox.Items[0] := strNewName;
  2085. ZjShowSelectionCBox.ItemIndex := 0;
  2086. end;
  2087. //*)
  2088. HeadTailObj.Name := strNewName;
  2089. HeadTailObj.Prefix := strNewName + ': ';
  2090. pcxSmartCostRpt.setHeadTailObj(ObjType,HeadTailObj);
  2091. SaveRpt(getCurReportName());
  2092. end;
  2093. end;
  2094. end;
  2095. end;
  2096. procedure TReportAdjuster.editLineHeightExit(Sender: TObject);
  2097. var
  2098. dLineHeight : double;
  2099. begin
  2100. if (TestReal(editLineHeight.Text)) then
  2101. begin
  2102. dLineHeight := StrToFloat(editLineHeight.Text);
  2103. if (dLineHeight < 1) or (dLineHeight > 1000) then
  2104. begin
  2105. ShowMessage('请输入1~1000范围内的数值!');
  2106. editLineHeight.Text := '6';
  2107. exit;
  2108. end;
  2109. pcxSmartCostRpt.FlowContentOrgHeight := FloatToStr(dLineHeight/10);
  2110. SaveRpt(getCurReportName());
  2111. end else
  2112. begin
  2113. ShowMessage('请输入数值!');
  2114. editLineHeight.Text := '6';
  2115. end;
  2116. end;
  2117. procedure TReportAdjuster.PrinterCBXSelect(Sender: TObject);
  2118. var szDeviceName : String;
  2119. begin
  2120. Printer.PrinterIndex := PrinterCBX.ItemIndex;
  2121. szDeviceName := Printer.Printers[Printer.PrinterIndex];
  2122. SetDefaultPrinterEx(szDeviceName);
  2123. getAllSupportPaperNames;
  2124. end;
  2125. end.