MainForm.pas 62 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202
  1. unit MainForm;
  2. interface
  3. uses
  4. Windows,
  5. Messages,
  6. SysUtils,
  7. Variants,
  8. Classes,
  9. Graphics,
  10. Controls,
  11. Forms,
  12. Dialogs,
  13. dxBar,
  14. dxBarExtItems,
  15. ImgList,
  16. ActnList,
  17. ZjDbaActns,
  18. ComCtrls,
  19. ExtCtrls,
  20. AboutForm,
  21. JimPages,
  22. JimTabs,
  23. ConstVarUnit,
  24. BillsProjectFrame,
  25. ScProjectManager,
  26. ConstMethodUnit,
  27. ScPageControl,
  28. ScStdBillsCtrl,
  29. ToolWin,
  30. XPMenu,
  31. BMDThread,
  32. fraFileManagerFrame,
  33. dxsbar,
  34. ProjectFileManager,
  35. ScPHPWeb,
  36. AddLeafBillsFrm,
  37. BatchReplaceBillsFrm,
  38. // {$IFDEF _beOnLine}
  39. // , ScClientDM
  40. // {$ENDIF},
  41. SingleObjectAggregateUnit, Menus;
  42. type
  43. TMainFrm = class(TForm)
  44. dxBarManager: TdxBarManager;
  45. ActionList: TActionList;
  46. dxNew: TdxBarButton;
  47. dxSave: TdxBarButton;
  48. dxBarButton7: TdxBarButton;
  49. acNew: TAction;
  50. acOpen: TAction;
  51. acSave: TAction;
  52. acSaveAs: TAction;
  53. imgsSmall: TImageList;
  54. dxCut: TdxBarButton;
  55. dxPaste: TdxBarButton;
  56. dxAdd: TdxBarButton;
  57. dxOpenWithHistory: TdxBarButton;
  58. dxMoveRight: TdxBarButton;
  59. dxMoveLeft: TdxBarButton;
  60. dxDelete: TdxBarButton;
  61. dxMoveUp: TdxBarButton;
  62. dxMoveDown: TdxBarButton;
  63. acExit: TAction;
  64. dxFile: TdxBarSubItem;
  65. dxEdit: TdxBarSubItem;
  66. dxBarListItem1: TdxBarListItem;
  67. dxGater: TdxBarSubItem;
  68. dxHelp: TdxBarSubItem;
  69. dxbNew: TdxBarButton;
  70. dxbOpen: TdxBarButton;
  71. dxbSave: TdxBarButton;
  72. dxbSaveAs: TdxBarButton;
  73. dxbExit: TdxBarButton;
  74. dxBarButton6: TdxBarButton;
  75. dxGather: TdxBarButton;
  76. acBillsManage: TAction;
  77. dxBillsManage: TdxBarButton;
  78. dxBarButton10: TdxBarButton;
  79. acImportExcel: TAction;
  80. acGatherBills: TAction;
  81. dxbImprotExcel: TdxBarButton;
  82. dxbGather: TdxBarButton;
  83. dxbCopy: TdxBarButton;
  84. dxbCut: TdxBarButton;
  85. dxbPaste: TdxBarButton;
  86. dxbLeft: TdxBarButton;
  87. dxbRight: TdxBarButton;
  88. dxbUp: TdxBarButton;
  89. dxbDown: TdxBarButton;
  90. dxbInsert: TdxBarButton;
  91. dxbDelete: TdxBarButton;
  92. dxCompany: TdxBarStatic;
  93. dxBarWord: TdxBarStatic;
  94. dxBarProgressItem: TdxBarProgressItem;
  95. ZjDbaInsert: TZjDbaInsert;
  96. ZjDbaDelete: TZjDbaDelete;
  97. ZjDbaUpMove: TZjDbaUpMove;
  98. ZjDbaDownMove: TZjDbaDownMove;
  99. ZjTreeDbaUpLevel: TZjTreeDbaUpLevel;
  100. ZjTreeDbaDownLevel: TZjTreeDbaDownLevel;
  101. ZjGridCopy: TZjGridCopy;
  102. ZjGridCut: TZjGridCut;
  103. ZjGridPaste: TZjGridPaste;
  104. dxBarButton1: TdxBarButton;
  105. acHelp: TAction;
  106. dxBarButton2: TdxBarButton;
  107. dxShowOptions: TdxBarButton;
  108. SaveDialog: TSaveDialog;
  109. acCopyBills: TAction;
  110. dxCopyBills: TdxBarButton;
  111. acCloseCurProject: TAction;
  112. xppCloseProject: TdxBarPopupMenu;
  113. dxBarButton5: TdxBarButton;
  114. dxbExportToExcel: TdxBarButton;
  115. actnExportToExcel: TAction;
  116. XPMenu: TXPMenu;
  117. ZjGridRemapedPaste: TZjGridRemapedPaste;
  118. dxRemapedPaste: TdxBarButton;
  119. actnShowOptions: TAction;
  120. dxProject: TdxBarSubItem;
  121. dxbSetOptions: TdxBarButton;
  122. actnClearAllQuantity: TAction;
  123. dxBarButton3: TdxBarButton;
  124. dxXiang: TdxBarButton;
  125. dxMu: TdxBarButton;
  126. dxJie: TdxBarButton;
  127. dxXiMu: TdxBarButton;
  128. dxLevel5: TdxBarButton;
  129. dxLevel6: TdxBarButton;
  130. dxAll: TdxBarButton;
  131. dxliLocateBills: TdxBarListItem;
  132. actnLocateBills: TAction;
  133. tmrAutoSave: TTimer;
  134. actnHisResPoint: TAction;
  135. dxBarButton4: TdxBarButton;
  136. actnSaveFixedPoint: TAction;
  137. dxBarSubItem1: TdxBarSubItem;
  138. dxBarButton8: TdxBarButton;
  139. dxBarButton9: TdxBarButton;
  140. dxSet: TdxBarSubItem;
  141. dxOperation: TdxBarSubItem;
  142. dxOnlyXMJ: TdxBarButton;
  143. btCheckServer: TBMDThread;
  144. tmrOnLine: TTimer;
  145. tmrEncrypt: TTimer;
  146. actnAuthorize: TAction;
  147. dxAuthorize: TdxBarButton;
  148. actnRemoveZeroQty: TAction;
  149. dxBarButton11: TdxBarButton;
  150. jpManager: TJimPages;
  151. jpManagerProject: TJimPage;
  152. jpManagerPage: TJimPage;
  153. jpsBillsProjects: TJimPages;
  154. Splitter1: TSplitter;
  155. pnlDock: TPanel;
  156. actnImportQtyItems: TAction;
  157. dxBarSubItem2: TdxBarSubItem;
  158. dxBarSubItem3: TdxBarSubItem;
  159. dxBarButton12: TdxBarButton;
  160. actnProjectBills: TAction;
  161. dxBarButton13: TdxBarButton;
  162. dxBarButton14: TdxBarButton;
  163. actnQtyBills: TAction;
  164. actnItems: TAction;
  165. ilstLarge: TImageList;
  166. xsbMain: TdxSideBar;
  167. Splitter2: TSplitter;
  168. Panel1: TPanel;
  169. jtsBillsProjects: TJimTabSet;
  170. tbBillsToolView: TToolBar;
  171. tbStdproject: TToolButton;
  172. tbQtyItems: TToolButton;
  173. dxBarButton15: TdxBarButton;
  174. dxBarButton16: TdxBarButton;
  175. actnStdBills: TAction;
  176. actnLocate: TAction;
  177. dxBarButton17: TdxBarButton;
  178. dxBarButton18: TdxBarButton;
  179. dxBarButton19: TdxBarButton;
  180. dxBarButton20: TdxBarButton;
  181. FileManagerFrame: TFileManagerFrame;
  182. actnMergeProject: TAction;
  183. actnSplitProject: TAction;
  184. dxBarSubItem4: TdxBarSubItem;
  185. dxBarButton21: TdxBarButton;
  186. dxBarButton22: TdxBarButton;
  187. actnShowBidLotAlias: TAction;
  188. dxBarButton23: TdxBarButton;
  189. actnExportStdItems: TAction;
  190. actnManagerStdItems: TAction;
  191. dxBarButton24: TdxBarButton;
  192. dxBarButton25: TdxBarButton;
  193. actnSelectGatherNodeByName: TAction;
  194. actnAbolishAllGatherChoose: TAction;
  195. dxBarButton26: TdxBarButton;
  196. dxBarButton27: TdxBarButton;
  197. actnCalculateAll: TAction;
  198. dxBarButton28: TdxBarButton;
  199. dxBarButton29: TdxBarButton;
  200. dxBarSubItem5: TdxBarSubItem;
  201. dxBarSubItem6: TdxBarSubItem;
  202. dxBarButton30: TdxBarButton;
  203. actnUndoText: TAction;
  204. dxBarButton31: TdxBarButton;
  205. dbbLocateFromProjectBills: TdxBarButton;
  206. actnLocateFromProjectBills: TAction;
  207. dbbLocateFromQtyBills: TdxBarButton;
  208. actnLocateFromQtyBills: TAction;
  209. xbUpdateMemo: TdxBarButton;
  210. xbGradeView: TdxBarButton;
  211. actnShowGradeView: TAction;
  212. xbGrade: TdxBarButton;
  213. actnGrade: TAction;
  214. xbStat: TdxBarButton;
  215. xbClearUserFlags: TdxBarButton;
  216. actnStat: TAction;
  217. actnClearUserFlags: TAction;
  218. dxBarSubItem7: TdxBarSubItem;
  219. dxBarSubItem8: TdxBarSubItem;
  220. xbQuantityError: TdxBarButton;
  221. xbLostLine: TdxBarButton;
  222. xbIgnoreCode: TdxBarButton;
  223. xbIgnoreName: TdxBarButton;
  224. xbIgnoreUnits: TdxBarButton;
  225. xbIgnoreQuantity: TdxBarButton;
  226. xbIgnoreSuperscale: TdxBarButton;
  227. xbIgnoreRepeatLine: TdxBarButton;
  228. xbIgnoreLostPre: TdxBarButton;
  229. xbIgnoreLostNext: TdxBarButton;
  230. xbIgnoreLostChild: TdxBarButton;
  231. dxBarSubItem9: TdxBarSubItem;
  232. xbNameError: TdxBarButton;
  233. xbUnitsError: TdxBarButton;
  234. xbCodeError: TdxBarButton;
  235. xbSuperscale: TdxBarButton;
  236. xbRepeatLine: TdxBarButton;
  237. xbGradeCurItem: TdxBarButton;
  238. actnGradeCurItem: TAction;
  239. xbClearAllUnitPrices: TdxBarButton;
  240. actnClearAllUnitPrice: TAction;
  241. dxBarButton32: TdxBarButton;
  242. actnGatherBillsQuantity: TAction;
  243. dxBarClearUnit: TdxBarButton;
  244. actClearUnit: TAction;
  245. actnShowRecycleBin: TAction;
  246. dxbtnShowRecycleBin: TdxBarButton;
  247. dxbtnShowStdXiang: TdxBarButton;
  248. dxbtnShowStdMu: TdxBarButton;
  249. dxbtnShowStdJie: TdxBarButton;
  250. dxbtnShowStdXiMu: TdxBarButton;
  251. dxbtnShowStdFiveLvl: TdxBarButton;
  252. dxbtnShowStdSixLvl: TdxBarButton;
  253. dxbtnShowStdAll: TdxBarButton;
  254. dxbtnLocateAtStdBills: TdxBarButton;
  255. actnLocateAtStdBills: TAction;
  256. dxbtnAddLeafBills: TdxBarButton;
  257. actnAddLeafBills: TAction;
  258. dxbtnBatchReplaceBillsData: TdxBarButton;
  259. actnBatchReplaceBillsData: TAction;
  260. dxbtnExportFlatExcel: TdxBarButton;
  261. actnExportFlatExcel: TAction;
  262. procedure acExitExecute(Sender: TObject);
  263. procedure FormCreate(Sender: TObject);
  264. procedure FormDestroy(Sender: TObject);
  265. procedure acHelpExecute(Sender: TObject);
  266. procedure acSaveExecute(Sender: TObject);
  267. procedure acSaveAsExecute(Sender: TObject);
  268. procedure acImportExcelExecute(Sender: TObject);
  269. procedure acSaveUpdate(Sender: TObject);
  270. procedure acImportExcelUpdate(Sender: TObject);
  271. procedure jtsBillsProjectsChange(Sender: TObject; NewTab: Integer;
  272. var AllowChange: Boolean);
  273. procedure acGatherBillsExecute(Sender: TObject);
  274. procedure acCopyBillsExecute(Sender: TObject);
  275. procedure acCloseCurProjectExecute(Sender: TObject);
  276. procedure jtsBillsProjectsMouseDown(Sender: TObject;
  277. Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
  278. procedure actnExportToExcelExecute(Sender: TObject);
  279. procedure pnlDockUnDock(Sender: TObject; Client: TControl;
  280. NewTarget: TWinControl; var Allow: Boolean);
  281. procedure actnShowOptionsExecute(Sender: TObject);
  282. procedure actnClearAllQuantityExecute(Sender: TObject);
  283. procedure dxXiangClick(Sender: TObject);
  284. // Added by GiLi 2012-3-19 16:10:31
  285. // 标准清单的层次显示
  286. procedure dxStdXiangClick(Sender: TObject);
  287. procedure actnLocateBillsExecute(Sender: TObject);
  288. procedure tmrAutoSaveTimer(Sender: TObject);
  289. procedure actnHisResPointExecute(Sender: TObject);
  290. procedure actnSaveFixedPointExecute(Sender: TObject);
  291. procedure dxOnlyXMJClick(Sender: TObject);
  292. procedure ZjDbaDeleteExecute(Sender: TObject);
  293. procedure ZjDbaDeleteUpdate(Sender: TObject);
  294. procedure btCheckServerExecute(Sender: TObject;
  295. Thread: TBMDExecuteThread; var Data: Pointer);
  296. procedure btCheckServerTerminate(Sender: TObject;
  297. Thread: TBMDExecuteThread; var Data: Pointer);
  298. procedure tmrOnLineTimer(Sender: TObject);
  299. procedure FormClose(Sender: TObject; var Action: TCloseAction);
  300. procedure tmrEncryptTimer(Sender: TObject);
  301. procedure actnAuthorizeExecute(Sender: TObject);
  302. procedure actnRemoveZeroQtyExecute(Sender: TObject);
  303. procedure acBillsManageExecute(Sender: TObject);
  304. procedure acBillsManageUpdate(Sender: TObject);
  305. procedure actnImportQtyItemsExecute(Sender: TObject);
  306. procedure actnProjectBillsExecute(Sender: TObject);
  307. procedure actnQtyBillsExecute(Sender: TObject);
  308. procedure actnItemsExecute(Sender: TObject);
  309. procedure actnItemsUpdate(Sender: TObject);
  310. procedure actnQtyBillsUpdate(Sender: TObject);
  311. procedure actnProjectBillsUpdate(Sender: TObject);
  312. procedure xsbMainItemClick(Sender: TObject; Item: TdxSideBarItem);
  313. procedure actnStdBillsExecute(Sender: TObject);
  314. procedure actnLocateExecute(Sender: TObject);
  315. procedure dxBarButton17Click(Sender: TObject);
  316. procedure actnRemoveZeroQtyUpdate(Sender: TObject);
  317. procedure actnStdBillsUpdate(Sender: TObject);
  318. procedure acExitUpdate(Sender: TObject);
  319. procedure actnMergeProjectExecute(Sender: TObject);
  320. procedure actnMergeProjectUpdate(Sender: TObject);
  321. procedure actnSplitProjectUpdate(Sender: TObject);
  322. procedure actnSplitProjectExecute(Sender: TObject);
  323. procedure FileManagerFrameactnExportProjectUpdate(Sender: TObject);
  324. procedure actnShowBidLotAliasExecute(Sender: TObject);
  325. procedure actnShowBidLotAliasUpdate(Sender: TObject);
  326. procedure actnExportStdItemsExecute(Sender: TObject);
  327. procedure actnManagerStdItemsExecute(Sender: TObject);
  328. procedure actnSelectGatherNodeByNameUpdate(Sender: TObject);
  329. procedure actnSelectGatherNodeByNameExecute(Sender: TObject);
  330. procedure actnAbolishAllGatherChooseExecute(Sender: TObject);
  331. procedure actnCalculateAllExecute(Sender: TObject);
  332. procedure actnUndoTextExecute(Sender: TObject);
  333. procedure actnUndoTextUpdate(Sender: TObject);
  334. procedure actnLocateFromProjectBillsExecute(Sender: TObject);
  335. procedure actnLocateFromQtyBillsExecute(Sender: TObject);
  336. procedure actnLocateFromQtyBillsUpdate(Sender: TObject);
  337. procedure xbUpdateMemoClick(Sender: TObject);
  338. procedure actnShowGradeViewUpdate(Sender: TObject);
  339. procedure actnShowGradeViewExecute(Sender: TObject);
  340. procedure actnGradeExecute(Sender: TObject);
  341. procedure actnStatExecute(Sender: TObject);
  342. procedure actnClearUserFlagsExecute(Sender: TObject);
  343. procedure actnGradeUpdate(Sender: TObject);
  344. procedure actnStatUpdate(Sender: TObject);
  345. procedure actnClearUserFlagsUpdate(Sender: TObject);
  346. procedure xbQuantityErrorClick(Sender: TObject);
  347. procedure xbLostLineClick(Sender: TObject);
  348. procedure xbIgnoreCodeClick(Sender: TObject);
  349. procedure xbIgnoreNameClick(Sender: TObject);
  350. procedure xbIgnoreUnitsClick(Sender: TObject);
  351. procedure xbIgnoreQuantityClick(Sender: TObject);
  352. procedure xbIgnoreSuperscaleClick(Sender: TObject);
  353. procedure xbIgnoreRepeatLineClick(Sender: TObject);
  354. procedure xbIgnoreLostPreClick(Sender: TObject);
  355. procedure xbIgnoreLostNextClick(Sender: TObject);
  356. procedure xbIgnoreLostChildClick(Sender: TObject);
  357. procedure xbNameErrorClick(Sender: TObject);
  358. procedure xbUnitsErrorClick(Sender: TObject);
  359. procedure xbCodeErrorClick(Sender: TObject);
  360. procedure xbSuperscaleClick(Sender: TObject);
  361. procedure xbRepeatLineClick(Sender: TObject);
  362. procedure actnGradeCurItemExecute(Sender: TObject);
  363. procedure actnGradeCurItemUpdate(Sender: TObject);
  364. procedure actnClearAllUnitPriceExecute(Sender: TObject);
  365. procedure actnClearAllUnitPriceUpdate(Sender: TObject);
  366. procedure actnGatherBillsQuantityExecute(Sender: TObject);
  367. procedure actClearUnitUpdate(Sender: TObject);
  368. procedure actClearUnitExecute(Sender: TObject);
  369. procedure actnShowRecycleBinExecute(Sender: TObject);
  370. procedure actnLocateAtStdBillsUpdate(Sender: TObject);
  371. procedure actnLocateAtStdBillsExecute(Sender: TObject);
  372. procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
  373. procedure acCopyBillsUpdate(Sender: TObject);
  374. procedure ZjGridPasteUpdate(Sender: TObject);
  375. procedure actnAddLeafBillsExecute(Sender: TObject);
  376. procedure actnBatchReplaceBillsDataExecute(Sender: TObject);
  377. procedure actnBatchReplaceBillsDataUpdate(Sender: TObject);
  378. procedure actnExportFlatExcelExecute(Sender: TObject);
  379. private
  380. function GetAutoSave: Boolean;
  381. function GetSaveInteval: Integer;
  382. procedure SetAutoSave(const Value: Boolean);
  383. procedure SetSaveInteval(const Value: Integer);
  384. private
  385. FOpening: Boolean;
  386. FDirPath: string;
  387. FUnitList: TStringList;
  388. {$IFDEF _beOnLine}
  389. FCheckServerErr: Boolean;
  390. {$ENDIF}
  391. FBillsProjectManager: TProjectManager;
  392. FProjectFileManager: TProjectFileMgr;
  393. FStdBillsCtrl: TStdBillsCtrl;
  394. FIsSave: Boolean;
  395. function GetPosition: Integer;
  396. procedure SetPosition(const Value: Integer);
  397. procedure SetCaption(const aTabName: string);
  398. property prgPosition: Integer read GetPosition write SetPosition;
  399. {hint}
  400. procedure ReadUnitList(AStringList: TStrings);
  401. function GetAcitveProject: TProject;
  402. property AutoSaveProjects: Boolean read GetAutoSave write SetAutoSave;
  403. property AutoSaveInterval: Integer read GetSaveInteval write SetSaveInteval;
  404. procedure CMIncProgress(var Msg: TMessage); message SM_ProgressInc;
  405. procedure CMDisplayStdBillsLib(var Msg: TMessage); message SM_StdBillsLib;
  406. procedure CMCheckProjectOpened(var Msg: TMessage); message SM_CheckProject;
  407. procedure CMLocateBills(var Msg: TMessage); message SM_LocateBills;
  408. procedure CMAutoSaveProjects(var Msg: TMessage); message SM_AutoSaveProjects;
  409. procedure HideStdBillsForm;
  410. procedure ShowStdBillsForm(aPage: Integer);
  411. {$IFDEF _beOnLine}
  412. procedure SyncCheckServerErr(Sender: TObject);
  413. {$ENDIF}
  414. function ExportBuildProject(const aShortName: string; aIsMerge: Boolean): Boolean;
  415. procedure RefreshSplitBidLot(aProject: TObject);
  416. {Argument is fullpath}
  417. function LocateProject(const aIdx: Integer; aIsOpen: Boolean): Boolean;
  418. procedure OpenProject(const AFileName, AShortName: string; aProjType, aID: Integer);
  419. {Argument is shortname}
  420. procedure CloseProject(aProject: TObject);
  421. procedure CloseProjectByID(AID: Integer);
  422. {save project}
  423. procedure SaveProject(aCreatePoint: Boolean; aFixed: Boolean = False);
  424. {New delete}
  425. procedure DeleteBills;
  426. procedure DeleteRecords;
  427. {Clear Cur Bills Quantity and the DrawQtys}
  428. procedure ClearCurNodeQty;
  429. {Remove Bills which is Zero}
  430. procedure RemoveZeroQtyBills;
  431. { FXQD }
  432. procedure ExportStdItems(aFileFlag: Integer);
  433. { Select GahterNode By Name }
  434. procedure SelectGatherNodeByName;
  435. procedure AbolishAllGatherChoose;
  436. { Calculate All }
  437. procedure CalculateAll;
  438. public
  439. { Public declarations }
  440. // 别的单元要使用这两个方法
  441. procedure EndUserOperation;
  442. procedure BeginUserOperation(const TextWord: string);
  443. // chenshilong, 2011-01-12 11:02:24
  444. procedure GetGatherProjects(ASL: TStringList);
  445. property ProjectManager: TProjectManager read FBillsProjectManager;
  446. property ProjectFileManager: TProjectFileMgr read FProjectFileManager;
  447. property StdBillsCtrl: TStdBillsCtrl read FStdBillsCtrl;
  448. // 另外单元要使用这个属性。2012.1.10 HXY
  449. property CurProject: TProject read GetAcitveProject;
  450. property DirPath: string read FDirPath;
  451. property IsSave: Boolean read FIsSave write FIsSave;
  452. end;
  453. var
  454. MainFrm: TMainFrm;
  455. implementation
  456. uses
  457. ConstTypeUnit, ScOptionsFrm, ScConfig, HisRestorePointFrm,
  458. ZjGrid, ZjGridDBA, NewProjectFrm, ExportExFrm,
  459. ProjectMergeSplitUnit
  460. {$IFDEF _beEncrypt}
  461. , ScEncryptUnit, ScAuthFrm
  462. {$ENDIF},
  463. StdLibsManagerFrm, BidLotAliasFrm, ShellAPI,
  464. ScProgressFrm, ScCustomSetErrorFrm, ScReportsFrm,
  465. RecycleBinFrm, DataBase;
  466. {$R *.dfm}
  467. procedure TMainFrm.acExitExecute(Sender: TObject);
  468. begin
  469. Close;
  470. end;
  471. procedure TMainFrm.FormCreate(Sender: TObject);
  472. begin
  473. FProjectFileManager := TProjectFileMgr.Create;
  474. FProjectFileManager.CloseProjectProc := CloseProject;
  475. FProjectFileManager.OpenProjectProc := OpenProject;
  476. FileManagerFrame.ProjectFileMgr := FProjectFileManager;
  477. FBillsProjectManager := TProjectManager.Create;
  478. FProjectFileManager.ProjectManager := FBillsProjectManager;
  479. FDirPath := Format('%s\我的清单\', [ExtractFileDir(ParamStr(0))]);
  480. FStdBillsCtrl := TStdBillsCtrl.Create(FBillsProjectManager);
  481. { TODO : online }
  482. {$IFDEF _beOnLine}
  483. FCheckServerErr := False;
  484. tmrOnLine.Enabled := True;
  485. {$ENDIF}
  486. SetCaption('项目管理');
  487. jpManager.ActivePageIndex := 1;
  488. xsbMain.SelectedItem := xsbMain.ActiveGroup.Items.Items[0];
  489. FUnitList := TStringList.Create;
  490. ReadUnitList(FUnitList);
  491. {set auto save}
  492. AutoSaveInterval := ScConfigInfo.AutoSaveInterval;
  493. AutoSaveProjects := ScConfigInfo.AutoSaveProjects;
  494. {$IFDEF _beEncrypt}
  495. tmrEncrypt.Enabled := True;
  496. {$ELSE}
  497. dxAuthorize.Action := nil;
  498. dxAuthorize.Visible := ivNever;
  499. {$ENDIF}
  500. // ActiveControl := FileManagerFrame.zgGatherBid;
  501. // Modified by GiLi 2012-3-18 13:22:30
  502. // 屏蔽 清单评分
  503. xbGradeView.Visible := ivNever;
  504. xbGrade.Visible := ivNever;
  505. xbGradeCurItem.Visible := ivNever;
  506. end;
  507. procedure TMainFrm.FormDestroy(Sender: TObject);
  508. begin
  509. FProjectFileManager.Free;
  510. FBillsProjectManager.Free;
  511. FStdBillsCtrl.Free;
  512. FUnitList.Free;
  513. {$IFDEF _beOnLine}
  514. if not FCheckServerErr then
  515. PHPWeb.Logout;
  516. {$ENDIF}
  517. {$IFDEF _beEncrypt}
  518. tmrEncrypt.Enabled := False;
  519. SaveDog;
  520. {$ENDIF}
  521. end;
  522. procedure TMainFrm.acHelpExecute(Sender: TObject);
  523. var
  524. AboutFrm: TAboutFrm;
  525. begin
  526. AboutFrm := TAboutFrm.Create(nil);
  527. try
  528. AboutFrm.ShowModal;
  529. finally
  530. AboutFrm.Free;
  531. end;
  532. end;
  533. procedure TMainFrm.acSaveExecute(Sender: TObject);
  534. begin
  535. SaveProject(True);
  536. end;
  537. procedure TMainFrm.acSaveAsExecute(Sender: TObject);
  538. begin
  539. BeginUserOperation(sSaveAsWord);
  540. Screen.Cursor := crHourGlass;
  541. SaveDialog.InitialDir := FDirPath;
  542. try
  543. if SaveDialog.Execute then
  544. begin
  545. CurProject.SaveAs(SaveDialog.FileName);
  546. end;
  547. finally
  548. Screen.Cursor := crDefault;
  549. EndUserOperation;
  550. end;
  551. end;
  552. procedure TMainFrm.BeginUserOperation(const TextWord: string);
  553. begin
  554. dxBarWord.Caption := TextWord;
  555. Application.ProcessMessages;
  556. end;
  557. procedure TMainFrm.EndUserOperation;
  558. begin
  559. dxBarWord.Caption := sInitWord;
  560. Update;
  561. end;
  562. procedure TMainFrm.CMIncProgress(var Msg: TMessage);
  563. begin
  564. prgPosition := prgPosition + Msg.WParam;
  565. if prgPosition >= 100 then prgPosition := 0;
  566. end;
  567. function TMainFrm.GetPosition: Integer;
  568. begin
  569. Result := dxBarProgressItem.Position;
  570. end;
  571. procedure TMainFrm.SetPosition(const Value: Integer);
  572. begin
  573. dxBarProgressItem.Position := Value;
  574. Update;
  575. end;
  576. function TMainFrm.GetAcitveProject: TProject;
  577. begin
  578. if Assigned(FBillsProjectManager) then
  579. Result := FBillsProjectManager.ActiveProject
  580. else Result := nil;
  581. end;
  582. procedure TMainFrm.acImportExcelExecute(Sender: TObject);
  583. var
  584. strFileName: string;
  585. begin
  586. if OpenFileDialog('导入', '.xls', '', 'Excel files (*.xls)|*.xls', strFileName) then
  587. begin
  588. if MessageBox(0, PChar(sImportExcelHint), PChar(sQuestTip),
  589. MB_YESNO or MB_ICONQUESTION) = IDNO then Exit;
  590. Screen.Cursor := crHourGlass;
  591. BeginUserOperation(sImportExcel);
  592. try
  593. CurProject.ImportExcelFile(strFileName);
  594. finally
  595. EndUserOperation;
  596. Screen.Cursor := crDefault;
  597. end;
  598. end;
  599. end;
  600. procedure TMainFrm.acSaveUpdate(Sender: TObject);
  601. begin
  602. acSave.Enabled := Assigned(CurProject) {and CurProject.NeedSaveDatabase};
  603. end;
  604. procedure TMainFrm.acImportExcelUpdate(Sender: TObject);
  605. begin
  606. TAction(Sender).Enabled := Assigned(CurProject)
  607. and
  608. (jpManager.ActivePageIndex = 0)
  609. {and
  610. (CurProject.ProjectView.JimPages.ActivePageIndex = 0)};
  611. end;
  612. procedure TMainFrm.ReadUnitList(AStringList: TStrings);
  613. var
  614. I: Integer;
  615. begin
  616. AStringList.Clear;
  617. for I := Low(UnitsArray) to High(UnitsArray) do
  618. begin
  619. AStringList.Add(UnitsArray[I]);
  620. // AStringList.Add(ConvertUnitStr(UnitsArray[I]));
  621. end;
  622. end;
  623. procedure TMainFrm.jtsBillsProjectsChange(Sender: TObject; NewTab: Integer;
  624. var AllowChange: Boolean);
  625. begin
  626. if FOpening then Exit;
  627. if NewTab = 0 then
  628. begin
  629. jpManager.ActivePageIndex := 1;
  630. SetCaption(jtsBillsProjects.Tabs[NewTab]);
  631. end
  632. else
  633. LocateProject(NewTab - 1, False);
  634. end;
  635. procedure TMainFrm.acGatherBillsExecute(Sender: TObject);
  636. procedure CheckSelectedBeforeGather;
  637. begin
  638. with CurProject.BillsData do
  639. if not HasSelected then
  640. begin
  641. if MessageQuest('该项目没有选择汇总项,是否需要自动打勾?') then
  642. SelectGatherNode(XMJBillsTree.FirstNode, True);
  643. end;
  644. end;
  645. var
  646. iID: Integer;
  647. sGatherName: string;
  648. strFilePath: string;
  649. iProjectType, iProjKind, iGatherID: Integer;
  650. aProject, nProject: TProject;
  651. begin
  652. {$IFDEF _beEncrypt}
  653. DelayCheckDog;
  654. CheckDogErrorCountAndHint;
  655. {$ENDIF}
  656. CheckSelectedBeforeGather;
  657. CurProject.CheckBeforeGather;
  658. sGatherName := Format('%s[项目清单]', [jtsBillsProjects.Tabs[jtsBillsProjects.TabIndex]]);
  659. iProjectType := FBillsProjectManager.ActiveProject.ProjectType;
  660. if not NewProjectInfo(nil, sGatherName, iProjectType, iProjKind, iGatherID) then Exit;
  661. strFilePath := FProjectFileManager.CreateNewProject(sGatherName, iID, CurProject.GetGatherID);
  662. Application.ProcessMessages;
  663. Screen.Cursor := crHourGlass;
  664. BeginUserOperation(sGatherWord);
  665. aProject := FBillsProjectManager.ActiveProject;
  666. nProject := FBillsProjectManager.CreateNewProject(strFilePath, sGatherName, FStdBillsCtrl, iProjectType, iID);
  667. nProject.ProjectView.Project{.BillsData} := nil;
  668. IncProgressUI(15);
  669. try
  670. if not aProject.GatherProject(nProject) then
  671. begin
  672. IncProgressUI(80);
  673. MessageHint(0, sGatherError);
  674. DeleteFile(Format('%s%s.smb', [FDirPath, sGatherName]));
  675. end;
  676. finally
  677. FBillsProjectManager.RemoveProject(nProject, aProject);
  678. EndUserOperation;
  679. Screen.Cursor := crDefault;
  680. IncProgressUI(100);
  681. end;
  682. end;
  683. procedure TMainFrm.acCopyBillsExecute(Sender: TObject);
  684. begin
  685. Screen.Cursor := crHourGlass;
  686. BeginUserOperation(sCopyBills);
  687. try
  688. CurProject.ProjectView.CopyBills;
  689. finally
  690. EndUserOperation;
  691. Screen.Cursor := crDefault;
  692. end;
  693. end;
  694. procedure TMainFrm.acCloseCurProjectExecute(Sender: TObject);
  695. begin
  696. CloseProject(CurProject);
  697. end;
  698. procedure TMainFrm.jtsBillsProjectsMouseDown(Sender: TObject;
  699. Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
  700. begin
  701. if (Button = mbRight) and (jtsBillsProjects.TabIndex <> 0) then
  702. xppCloseProject.PopupFromCursorPos;
  703. end;
  704. procedure TMainFrm.ShowStdBillsForm(aPage: Integer);
  705. begin
  706. LockWindowUpdate(Handle);
  707. try
  708. if not pnlDock.Visible then
  709. begin
  710. FStdBillsCtrl.StdBillsLibFrm.ManualDock(pnlDock, nil, alClient);
  711. pnlDock.Visible := True;
  712. Splitter1.Visible := True;
  713. FStdBillsCtrl.StdBillsLibFrm.ShowPage(aPage);
  714. end
  715. else
  716. begin
  717. if FStdBillsCtrl.StdBillsLibFrm.GetPageIdx = aPage then
  718. HideStdBillsForm
  719. else
  720. begin
  721. if aPage = 0 then
  722. tbQtyItems.Down := False
  723. else
  724. tbStdproject.Down := False;
  725. FStdBillsCtrl.StdBillsLibFrm.ShowPage(aPage);
  726. end;
  727. end;
  728. finally
  729. LockWindowUpdate(0);
  730. end;
  731. end;
  732. procedure TMainFrm.actnExportToExcelExecute(Sender: TObject);
  733. var
  734. sFileName, sProjName, sFullName: string;
  735. strBidLot, strProjBills: TStrings;
  736. begin
  737. BeginUserOperation(sExportExcel);
  738. strBidLot := TStringList.Create;
  739. strProjBills := TStringList.Create;
  740. try
  741. if CurProject.Flag <> 1 then
  742. begin
  743. FProjectFileManager.GetNameByID(CurProject.ID, sProjName, sFullName);
  744. strBidLot.AddObject(sProjName, Pointer(sFullName));
  745. FProjectFileManager.GetBidLotsByID(CurProject.ID, strProjBills);
  746. if not ExportExForm(strBidLot, strProjBills) then Exit;
  747. Application.ProcessMessages;
  748. end;
  749. sFileName := GetSaveFile;
  750. if not CheckFileEnabled(sFileName) then Exit;
  751. Application.ProcessMessages;
  752. Screen.Cursor := crHourGlass;
  753. try
  754. CurProject.ExportExcel(FBillsProjectManager, sFileName, strBidLot, CurProject.Flag);
  755. {$IF Not DEFINED(_beEncrypt) and not DEFINED(_beOnLine)}
  756. MessageHint(Handle, '导出成功! 学习版仅导出100行!');
  757. {$IFEND}
  758. finally
  759. Screen.Cursor := crDefault;
  760. end;
  761. finally
  762. strBidLot.Free;
  763. strProjBills.Free;
  764. EndUserOperation;
  765. end;
  766. end;
  767. procedure TMainFrm.pnlDockUnDock(Sender: TObject; Client: TControl;
  768. NewTarget: TWinControl; var Allow: Boolean);
  769. begin
  770. pnlDock.Visible := False;
  771. Splitter1.Visible := False;
  772. end;
  773. procedure TMainFrm.CMDisplayStdBillsLib(var Msg: TMessage);
  774. begin
  775. tbStdproject.Down := False;
  776. pnlDock.Visible := False;
  777. Splitter1.Visible := False;
  778. FStdBillsCtrl.StdBillsLibFrm.Hide;
  779. end;
  780. procedure TMainFrm.CMCheckProjectOpened(var Msg: TMessage);
  781. var
  782. strName: string;
  783. begin
  784. strName := String(Msg.LParam);
  785. Msg.Result := FBillsProjectManager.CheckProjectExists(strName);
  786. if Msg.Result = -1 then Exit;
  787. if Msg.WParam <> -1 then
  788. begin
  789. if FBillsProjectManager.LocateProject(Msg.Result) then
  790. begin
  791. jtsBillsProjects.TabIndex := Msg.Result;
  792. jpsBillsProjects.ActivePageIndex := Msg.Result;
  793. SetCaption(jtsBillsProjects.Tabs[Msg.Result]);
  794. // Caption := Format('%s - [%s]', [SoftWareName, jtsBillsProjects.Tabs[Msg.Result]]);
  795. end;
  796. end;
  797. end;
  798. procedure TMainFrm.OpenProject(const AFileName, AShortName: string; aProjType, aID: Integer);
  799. var
  800. idx: Integer;
  801. jimPage: TJimPage;
  802. begin
  803. {check file is opened}
  804. if not FileExists(AFileName) then
  805. raise Exception.Create('文件不存在.');
  806. idx := FBillsProjectManager.CheckProjectExists(AFileName);
  807. if LocateProject(idx, True) then Exit;
  808. BeginUserOperation(sOpenWord);
  809. IncProgressUI(10);
  810. FBillsProjectManager.CreateNewProject(AFileName, AShortName, FStdBillsCtrl,
  811. aProjType, aID);
  812. CurProject.ParentID := FProjectFileManager.GetParentID(aID);
  813. CurProject.Flag := FProjectFileManager.GetProjectFlag(aID);
  814. if CurProject.Flag = 1 then
  815. RefreshSplitBidLot(CurProject);
  816. IncProgressUI(35);
  817. FOpening := True;
  818. LockWindowUpdate(Handle);
  819. try
  820. idx := jtsBillsProjects.Tabs.Add(AShortName);
  821. if (idx > 0) and (idx < jtsBillsProjects.Tabs.Count) then
  822. jtsBillsProjects.TabIndex := idx
  823. else
  824. jtsBillsProjects.TabIndex := 0;
  825. IncProgressUI(10);
  826. jimPage := TJimPage.Create(nil);
  827. jimPage.Pages := jpsBillsProjects;
  828. CurProject.ProjectView.Parent := jimPage;
  829. jpsBillsProjects.ActivePage := jimPage;
  830. IncProgressUI(15);
  831. CurProject.ProjectView.Align := alClient;
  832. CurProject.ProjectView.UnitsList := FUnitList;
  833. CurProject.ProjectView.Visible := True;
  834. CurProject.ProjectView.AdjustControlsSize;
  835. jpManager.ActivePageIndex := 0;
  836. IncProgressUI(20);
  837. SetCaption(AShortName);
  838. IncProgressUI(10);
  839. xsbMain.SelectedItem := xsbMain.ActiveGroup.Items.Items[0];
  840. CurProject.Navigation := 0;
  841. HideStdBillsForm;
  842. finally
  843. LockWindowUpdate(0);
  844. FOpening := False;
  845. end;
  846. EndUserOperation;
  847. end;
  848. procedure TMainFrm.actnShowOptionsExecute(Sender: TObject);
  849. var
  850. frmOptions: TfrmOptions;
  851. begin
  852. frmOptions := TfrmOptions.Create(nil);
  853. try
  854. frmOptions.ShowModal;
  855. finally
  856. frmOptions.Free;
  857. end;
  858. end;
  859. procedure TMainFrm.actnClearAllQuantityExecute(Sender: TObject);
  860. begin
  861. // CurProject.BillsData.ClearCurNodeQty;
  862. ExcuteTemplateMethod(@TMainFrm.ClearCurNodeQty, Self);
  863. end;
  864. procedure TMainFrm.dxXiangClick(Sender: TObject);
  865. begin
  866. Screen.Cursor := crHourGlass;
  867. CurProject.ProjectView.BeginUpdate;
  868. try
  869. CurProject.BillsData.ShowLevel(TdxBarButton(Sender).Tag);
  870. finally
  871. CurProject.ProjectView.EndUpdate;
  872. Screen.Cursor := crDefault;
  873. end;
  874. end;
  875. procedure TMainFrm.CMLocateBills(var Msg: TMessage);
  876. begin
  877. Msg.Result := Integer(dxliLocateBills.Items);
  878. end;
  879. procedure TMainFrm.actnLocateBillsExecute(Sender: TObject);
  880. var
  881. iBillsID: Integer;
  882. begin
  883. iBillsID := Integer(dxliLocateBills.Items.Objects[dxliLocateBills.ItemIndex]);
  884. if iBillsID > 0 then
  885. begin
  886. CurProject.BillsData.LocateBills(iBillsID);
  887. end;
  888. end;
  889. procedure TMainFrm.CMAutoSaveProjects(var Msg: TMessage);
  890. begin
  891. AutoSaveInterval := Msg.LParam;
  892. AutoSaveProjects := Msg.WParam <> 0;
  893. end;
  894. function TMainFrm.GetAutoSave: Boolean;
  895. begin
  896. Result := tmrAutoSave.Enabled;
  897. end;
  898. function TMainFrm.GetSaveInteval: Integer;
  899. begin
  900. Result := tmrAutoSave.Interval;
  901. end;
  902. procedure TMainFrm.SetAutoSave(const Value: Boolean);
  903. begin
  904. tmrAutoSave.Enabled := Value;
  905. end;
  906. procedure TMainFrm.SetSaveInteval(const Value: Integer);
  907. begin
  908. tmrAutoSave.Interval := Value * 60 * 1000;
  909. end;
  910. procedure TMainFrm.tmrAutoSaveTimer(Sender: TObject);
  911. begin
  912. Screen.Cursor := crHourGlass;
  913. try
  914. FBillsProjectManager.SaveProjects(ScConfigInfo.SaveAllProjects,
  915. ScConfigInfo.SaveRestorePoint);
  916. finally
  917. Screen.Cursor := crDefault;
  918. end;
  919. end;
  920. procedure TMainFrm.actnHisResPointExecute(Sender: TObject);
  921. var
  922. frmRestorePoint: TfrmRestorePoint;
  923. begin
  924. frmRestorePoint := TfrmRestorePoint.Create(nil);
  925. try
  926. frmRestorePoint.OpenProjectProc := OpenProject;
  927. frmRestorePoint.CloseProjectProc := CloseProject;
  928. frmRestorePoint.Project := CurProject;
  929. frmRestorePoint.ShowModal;
  930. finally
  931. frmRestorePoint.Free;
  932. end;
  933. end;
  934. procedure TMainFrm.CloseProject(aProject: TObject);
  935. var
  936. idx: Integer;
  937. bCanClose: Boolean;
  938. begin
  939. idx := FBillsProjectManager.RemoveProjectForClose(bCanClose, TProject(aProject), nil, True);
  940. if (idx = -1) or (not bCanClose) then Exit;
  941. CloseProjectByID(idx);
  942. end;
  943. function TMainFrm.LocateProject(const aIdx: Integer; aIsOpen: Boolean): Boolean;
  944. begin
  945. Result := False;
  946. if FBillsProjectManager.LocateProject(aIdx) then
  947. begin
  948. jpsBillsProjects.ActivePageIndex := aIdx;
  949. jpManager.ActivePageIndex := 0;
  950. xsbMain.SelectedItem := xsbMain.ActiveGroup.Items.Items[CurProject.Navigation];
  951. CurProject.ProjectView.SetGridFocus(CurProject.Navigation);
  952. TStdBillsCtrl(CurProject.StdBillsCtrl).DMStdBillsLib.RefreshCustomStep;
  953. if aIsOpen then jtsBillsProjects.TabIndex := aIdx + 1;
  954. SetCaption(jtsBillsProjects.Tabs[aIdx + 1]);
  955. HideStdBillsForm;
  956. FStdBillsCtrl.StdBillsLibFrm.ClearFilter;
  957. Result := True;
  958. end;
  959. end;
  960. procedure TMainFrm.actnSaveFixedPointExecute(Sender: TObject);
  961. begin
  962. SaveProject(True, True);
  963. end;
  964. procedure TMainFrm.SaveProject(aCreatePoint: Boolean; aFixed: Boolean);
  965. begin
  966. BeginUserOperation(sSaveWord);
  967. Screen.Cursor := crHourGlass;
  968. try
  969. CurProject.Save(aCreatePoint, aFixed);
  970. finally
  971. Screen.Cursor := crDefault;
  972. EndUserOperation;
  973. end;
  974. end;
  975. procedure TMainFrm.dxOnlyXMJClick(Sender: TObject);
  976. begin
  977. Screen.Cursor := crHourGlass;
  978. CurProject.ProjectView.BeginUpdate;
  979. try
  980. // CurProject.BillsData.CheckTree(CurProject.BillsData.BillsTree.FirstNode);
  981. CurProject.BillsData.OnlyShowXMJ;
  982. finally
  983. CurProject.ProjectView.EndUpdate;
  984. Screen.Cursor := crDefault;
  985. end;
  986. end;
  987. procedure TMainFrm.DeleteRecords;
  988. begin
  989. if SameText(ZjDbaDelete.GridDba.Grid.Name, 'zgBills') then
  990. begin
  991. if MessageQuest(sDeleteBillsHint) then
  992. begin
  993. CurProject.ProjectView.CopyBillsToRecycleBin;
  994. DeleteBills;
  995. end;
  996. end
  997. else
  998. ZjDbaDelete.ExecuteTarget(ZjDbaDelete.GridDba.Grid);
  999. end;
  1000. procedure TMainFrm.DeleteBills;
  1001. var
  1002. iBillsCount, iPreID, iLastID, iParentID: Integer;
  1003. strList: TStringList;
  1004. begin
  1005. strList := TStringList.Create;
  1006. try
  1007. iBillsCount := CurProject.ProjectView.GetSelection(strList, iPreID, iLastID, iParentID);
  1008. if iBillsCount > 0 then
  1009. begin
  1010. CurProject.BillsData.DeleteBills(strList, iPreID, iLastID, iParentID);
  1011. end;
  1012. finally
  1013. strList.Free;
  1014. end;
  1015. end;
  1016. procedure TMainFrm.ZjDbaDeleteExecute(Sender: TObject);
  1017. begin
  1018. // DeleteRecords;
  1019. {对象方法需要传自身做为EAX}
  1020. ExcuteTemplateMethod(@TMainFrm.DeleteRecords, Self);
  1021. end;
  1022. procedure TMainFrm.ZjDbaDeleteUpdate(Sender: TObject);
  1023. var
  1024. I: Integer;
  1025. begin
  1026. ZjDbaDelete.GridDba := nil;
  1027. if Screen.ActiveControl is TZjGrid then
  1028. begin
  1029. with Screen.ActiveControl as TZJGrid do
  1030. begin
  1031. for I := 0 to HelpmateCount - 1 do
  1032. if Helpmates[I] is TZjGridDba then
  1033. begin
  1034. ZjDbaDelete.GridDba := TZjGridDBA(Helpmates[I]);
  1035. Break;
  1036. end;
  1037. end;
  1038. end;
  1039. ZjDbaDelete.Enabled := (ZjDbaDelete.GridDba <> nil)
  1040. and
  1041. ZjDbaDelete.GridDba.CanDelete
  1042. and
  1043. (jpManager.ActivePageIndex = 0);
  1044. end;
  1045. procedure TMainFrm.ClearCurNodeQty;
  1046. begin
  1047. if MessageQuest(sClearBillsQtyHint) then
  1048. CurProject.BillsData.ClearCurNodeQty;
  1049. end;
  1050. {$IFDEF _beOnLine}
  1051. procedure TMainFrm.SyncCheckServerErr(Sender: TObject);
  1052. begin
  1053. MessageWarning(0, sLoginFailed , sErrorTip, MB_OK);
  1054. FCheckServerErr := True;
  1055. Application.Terminate;
  1056. end;
  1057. {$ENDIF}
  1058. procedure TMainFrm.btCheckServerExecute(Sender: TObject;
  1059. Thread: TBMDExecuteThread; var Data: Pointer);
  1060. begin
  1061. {$IFDEF _beOnLine}
  1062. if (not PHPWeb.CheckOnLine) then
  1063. begin
  1064. Thread.Synchronize(SyncCheckServerErr);
  1065. end;
  1066. {$ENDIF}
  1067. end;
  1068. procedure TMainFrm.btCheckServerTerminate(Sender: TObject;
  1069. Thread: TBMDExecuteThread; var Data: Pointer);
  1070. begin
  1071. {$IFDEF _beOnLine}
  1072. btCheckServer.Stop;
  1073. {$ENDIF}
  1074. end;
  1075. procedure TMainFrm.tmrOnLineTimer(Sender: TObject);
  1076. begin
  1077. {$IFDEF _beOnLine}
  1078. if not btCheckServer.Runing then
  1079. btCheckServer.Start;
  1080. {$ENDIF}
  1081. end;
  1082. procedure TMainFrm.FormClose(Sender: TObject; var Action: TCloseAction);
  1083. begin
  1084. {$IFDEF _beOnline}
  1085. tmrOnLine.Enabled := False;
  1086. if btCheckServer.Runing then
  1087. btCheckServer.Stop;
  1088. {$ENDIF}
  1089. end;
  1090. procedure TMainFrm.tmrEncryptTimer(Sender: TObject);
  1091. begin
  1092. {$IFDEF _beEncrypt}
  1093. DelayCheckDog;
  1094. CheckDogErrorCountAndHint;
  1095. {$ENDIF}
  1096. end;
  1097. procedure TMainFrm.actnAuthorizeExecute(Sender: TObject);
  1098. begin
  1099. {$IFDEF _beEncrypt}
  1100. Authorize;
  1101. {$ELSE}
  1102. MessageHint(Handle, sWelcomeText);
  1103. {$ENDIF}
  1104. end;
  1105. procedure TMainFrm.actnRemoveZeroQtyExecute(Sender: TObject);
  1106. begin
  1107. if MessageQuest(sRemoveBillsZeorQty) then
  1108. ExcuteTemplateMethod(@TMainFrm.RemoveZeroQtyBills, Self);
  1109. end;
  1110. procedure TMainFrm.RemoveZeroQtyBills;
  1111. begin
  1112. CurProject.BillsData.RemoveZeroQtyBills;
  1113. end;
  1114. procedure TMainFrm.acBillsManageExecute(Sender: TObject);
  1115. begin
  1116. jpManager.ActivePageIndex := Integer(jpManager.ActivePageIndex = 0);
  1117. end;
  1118. procedure TMainFrm.acBillsManageUpdate(Sender: TObject);
  1119. begin
  1120. TAction(Sender).Enabled := jtsBillsProjects.Tabs.Count > 0;
  1121. end;
  1122. procedure TMainFrm.actnImportQtyItemsExecute(Sender: TObject);
  1123. var
  1124. strFileName: string;
  1125. begin
  1126. if OpenFileDialog('导入', '.xls', '', 'Excel files (*.xls)|*.xls', strFileName) then
  1127. begin
  1128. Screen.Cursor := crHourGlass;
  1129. BeginUserOperation(sImportExcel);
  1130. try
  1131. CurProject.ImportQtyItems(strFileName);
  1132. finally
  1133. EndUserOperation;
  1134. Screen.Cursor := crDefault;
  1135. end;
  1136. end;
  1137. end;
  1138. procedure TMainFrm.actnProjectBillsExecute(Sender: TObject);
  1139. begin
  1140. Screen.Cursor := crHourGlass;
  1141. LockWindowUpdate(Handle);
  1142. CurProject.ProjectView.BeginUpdate;
  1143. try
  1144. xsbMain.SelectedItem := xsbMain.ActiveGroup.Items.Items[1];
  1145. CurProject.Navigation := 1;
  1146. HideStdBillsForm;
  1147. CurProject.BillsData.EnterXMJBills;
  1148. CurProject.ProjectView.EnterXMJBills;
  1149. CurProject.BillsData.IsProjectBills := True;
  1150. CurProject.ProjectView.ActivePage := 2;
  1151. finally
  1152. CurProject.ProjectView.EndUpdate;
  1153. LockWindowUpdate(0);
  1154. Screen.Cursor := crDefault;
  1155. end;
  1156. end;
  1157. procedure TMainFrm.actnQtyBillsExecute(Sender: TObject);
  1158. begin
  1159. Screen.Cursor := crHourGlass;
  1160. LockWindowUpdate(Handle);
  1161. try
  1162. xsbMain.SelectedItem := xsbMain.ActiveGroup.Items.Items[2];
  1163. CurProject.Navigation := 2;
  1164. HideStdBillsForm;
  1165. if CurProject.ProjectView.CanRefreshQtyItem then
  1166. // if CurProject.ProjectView.ActivePage = 0 then
  1167. CurProject.DetailItemsDM.RefreshPQItems;
  1168. CurProject.ProjectView.ActivePage := 1;
  1169. CurProject.BillsData.LeaveXMJBills;
  1170. CurProject.ProjectView.LeaveXMJBills;
  1171. CurProject.BillsData.IsProjectBills := False;
  1172. finally
  1173. LockWindowUpdate(0);
  1174. Screen.Cursor := crDefault;
  1175. end;
  1176. end;
  1177. procedure TMainFrm.actnItemsExecute(Sender: TObject);
  1178. begin
  1179. Screen.Cursor := crHourGlass;
  1180. LockWindowUpdate(Handle);
  1181. try
  1182. xsbMain.SelectedItem := xsbMain.ActiveGroup.Items.Items[0];
  1183. CurProject.Navigation := 0;
  1184. CurProject.BillsData.LeaveXMJBills;
  1185. CurProject.ProjectView.LeaveXMJBills;
  1186. CurProject.BillsData.IsProjectBills := False;
  1187. CurProject.ProjectView.ActivePage := 0;
  1188. finally
  1189. LockWindowUpdate(0);
  1190. Screen.Cursor := crDefault;
  1191. end;
  1192. end;
  1193. procedure TMainFrm.actnItemsUpdate(Sender: TObject);
  1194. begin
  1195. TAction(Sender).Enabled := Assigned(CurProject)
  1196. and (jpManager.ActivePageIndex = 0)
  1197. and (CurProject.ProjectView.ActivePage <> 0);
  1198. end;
  1199. procedure TMainFrm.actnQtyBillsUpdate(Sender: TObject);
  1200. begin
  1201. TAction(Sender).Enabled := Assigned(CurProject)
  1202. and (jpManager.ActivePageIndex = 0)
  1203. and (CurProject.ProjectView.ActivePage <> 1);
  1204. end;
  1205. procedure TMainFrm.actnProjectBillsUpdate(Sender: TObject);
  1206. begin
  1207. TAction(Sender).Enabled := Assigned(CurProject)
  1208. and (jpManager.ActivePageIndex = 0)
  1209. and (CurProject.ProjectView.ActivePage <> 2);
  1210. end;
  1211. procedure TMainFrm.xsbMainItemClick(Sender: TObject; Item: TdxSideBarItem);
  1212. var s: string;
  1213. begin
  1214. case Item.Tag of
  1215. 0: actnItems.Execute;
  1216. 1: actnQtyBills.Execute;
  1217. 2: actnProjectBills.Execute;
  1218. {3:
  1219. begin
  1220. ShowReportForm(FBillsProjectManager.ActiveProject);
  1221. xsbMain.SelectedItem := xsbMain.ActiveGroup.Items.Items[0];
  1222. actnItems.Execute;
  1223. end;}
  1224. 3:
  1225. begin
  1226. s := '此处报表预览功能已取消。' + #10#13 +
  1227. '如需预览报表数据,请从“文件”菜单下的“导出”—>“导出三级清单”导出EXCEL数据;' + #10#13 +
  1228. '如需打印报表,请将导出的EXCEL文件在EXCEL软件中设置打印区域和打印标题,或者将项目' + #10#13 +
  1229. '导入到编审系统中进行打印报表。';
  1230. MessageHint(0, s);
  1231. xsbMain.SelectedItem := xsbMain.Groups[0].Items[0];
  1232. actnItems.Execute;
  1233. Exit;
  1234. // FBillsProjectManager.ActiveProject.BillsData.Save;
  1235. // DisplayReports(FBillsProjectManager.ActiveProject);
  1236. end;
  1237. end;
  1238. end;
  1239. procedure TMainFrm.actnStdBillsExecute(Sender: TObject);
  1240. begin
  1241. ShowStdBillsForm(0);
  1242. end;
  1243. procedure TMainFrm.actnLocateExecute(Sender: TObject);
  1244. begin
  1245. ShowStdBillsForm(1);
  1246. end;
  1247. procedure TMainFrm.dxBarButton17Click(Sender: TObject);
  1248. begin
  1249. jpManager.ActivePageIndex := 1;
  1250. jtsBillsProjects.TabIndex := 0;
  1251. end;
  1252. procedure TMainFrm.actnRemoveZeroQtyUpdate(Sender: TObject);
  1253. begin
  1254. if Assigned(CurProject) and (CurProject.ProjectView = nil) then
  1255. begin
  1256. TAction(Sender).Enabled := Assigned(CurProject)
  1257. and
  1258. (jpManager.ActivePageIndex = 0);
  1259. end
  1260. else
  1261. TAction(Sender).Enabled := Assigned(CurProject)
  1262. and
  1263. (jpManager.ActivePageIndex = 0)
  1264. and
  1265. (CurProject.ProjectView.JimPages.ActivePageIndex = 0);
  1266. end;
  1267. procedure TMainFrm.HideStdBillsForm;
  1268. begin
  1269. pnlDock.Visible := False;
  1270. Splitter1.Visible := False;
  1271. FStdBillsCtrl.StdBillsLibFrm.Hide;
  1272. tbStdproject.Down := False;
  1273. tbQtyItems.Down := False;
  1274. end;
  1275. procedure TMainFrm.actnStdBillsUpdate(Sender: TObject);
  1276. begin
  1277. if not Assigned(CurProject) then Exit;
  1278. if not Assigned(CurProject.ProjectView) then Exit;
  1279. TAction(Sender).Enabled := Assigned(CurProject)
  1280. and
  1281. (jpManager.ActivePageIndex = 0)
  1282. and
  1283. (CurProject.ProjectView.JimPages.ActivePageIndex = 0);
  1284. if tbBillsToolView.Visible <> actnStdBills.Enabled then
  1285. tbBillsToolView.Visible := actnStdBills.Enabled;
  1286. end;
  1287. procedure TMainFrm.acExitUpdate(Sender: TObject);
  1288. begin
  1289. if not tbBillsToolView.Visible then
  1290. begin
  1291. actnStdBills.Update;
  1292. end;
  1293. end;
  1294. procedure TMainFrm.actnMergeProjectExecute(Sender: TObject);
  1295. var
  1296. sProjName, sFullName: string;
  1297. sgsProjectList: TStrings;
  1298. PctConverter: TProjectConverter;
  1299. bMergeByCode: Boolean;
  1300. begin
  1301. sgsProjectList := TStringList.Create;
  1302. try
  1303. { 只有标段才汇总 }
  1304. if jpManager.ActivePageIndex = 0 then
  1305. begin
  1306. // 从打开的当前项目取标段
  1307. FProjectFileManager.GetNameByID(CurProject.ParentID, sProjName, sFullName);
  1308. FProjectFileManager.GetBidLotsByID(CurProject.ParentID, sgsProjectList);
  1309. FProjectFileManager.LocateBuildProject(CurProject.ParentID);
  1310. end
  1311. else
  1312. begin
  1313. // 从项目管理取标段
  1314. FProjectFileManager.GetNameByID(FProjectFileManager.GetProjID(1), sProjName, sFullName);
  1315. FProjectFileManager.GetBidLotsByID(FProjectFileManager.GetProjID(1), sgsProjectList);
  1316. end;
  1317. if not ExportBuildProject(sProjName, True) then Exit;
  1318. if SelectProjectForm(sgsProjectList, sProjName, bMergeByCode) then
  1319. begin
  1320. // sFullName : BuildProject's Name
  1321. CreateProgressForm(0, '开始合并!');
  1322. AddProgressForm(5, '正在收集信息…');
  1323. BeginUserOperation(sMergeProject);
  1324. Screen.Cursor := crHourGlass;
  1325. PctConverter := TProjectConverter.Create(FBillsProjectManager, False, bMergeByCode);
  1326. try
  1327. CreateProgressForm(15, '正在合并清单!');
  1328. PctConverter.MergeNew(sgsProjectList, sFullName);
  1329. //PctConverter.Merge(sgsProjectList, sFullName);
  1330. finally
  1331. PctConverter.Free;
  1332. Screen.Cursor := crDefault;
  1333. EndUserOperation;
  1334. end;
  1335. CloseProgressForm;
  1336. end;
  1337. finally
  1338. sgsProjectList.Free;
  1339. end;
  1340. end;
  1341. procedure TMainFrm.actnMergeProjectUpdate(Sender: TObject);
  1342. begin
  1343. TAction(Sender).Enabled := Assigned(CurProject)
  1344. and
  1345. (jpManager.ActivePageIndex = 0)
  1346. and
  1347. (CurProject.Flag = 2)
  1348. or
  1349. FileManagerFrame.zgBidLot.Focused;
  1350. end;
  1351. procedure TMainFrm.actnSplitProjectUpdate(Sender: TObject);
  1352. begin
  1353. TAction(Sender).Enabled := Assigned(CurProject)
  1354. and
  1355. (jpManager.ActivePageIndex = 0)
  1356. and
  1357. (CurProject.Flag = 1)
  1358. or
  1359. FileManagerFrame.zgGatherBid.Focused
  1360. and
  1361. (FProjectFileManager.GetProjID(1) <> 1);
  1362. end;
  1363. procedure TMainFrm.actnSplitProjectExecute(Sender: TObject);
  1364. var
  1365. sProjName, sFullName: string;
  1366. PctConverter: TProjectConverter;
  1367. begin
  1368. if jpManager.ActivePageIndex = 0 then
  1369. begin
  1370. // 从打开的当前项目取
  1371. FProjectFileManager.GetNameByID(CurProject.ID, sProjName, sFullName);
  1372. FProjectFileManager.LocateBuildProject(CurProject.ID);
  1373. end
  1374. else
  1375. begin
  1376. // 从项目管理取
  1377. FProjectFileManager.GetNameByID(FProjectFileManager.GetProjID(1), sProjName, sFullName);
  1378. end;
  1379. { Export BuildProject }
  1380. if not ExportBuildProject(sProjName, False) then Exit;
  1381. BeginUserOperation(sSplitProject);
  1382. Screen.Cursor := crHourGlass;
  1383. PctConverter := TProjectConverter.Create(FBillsProjectManager, True, False);
  1384. try
  1385. PctConverter.Split(sFullName);
  1386. finally
  1387. PctConverter.Free;
  1388. Screen.Cursor := crDefault;
  1389. EndUserOperation;
  1390. end;
  1391. end;
  1392. function TMainFrm.ExportBuildProject(const aShortName: string; aIsMerge: Boolean): Boolean;
  1393. var
  1394. sFileName: string;
  1395. sHintText: string;
  1396. begin
  1397. if aIsMerge then
  1398. sHintText := sMergeProjectHint
  1399. else
  1400. sHintText := sSplitProjectHint;
  1401. Result := True;
  1402. if not MessageQuest(sHintText) then
  1403. begin
  1404. if SaveFileDialog(sExportTip, '.pcf', aShortName,
  1405. '清单编制 (*.pcf)|*.pcf', sFileName)
  1406. then
  1407. begin
  1408. FProjectFileManager.ExportProjects(sFileName, 1);
  1409. end
  1410. else
  1411. Result := False;
  1412. end;
  1413. end;
  1414. procedure TMainFrm.FileManagerFrameactnExportProjectUpdate(
  1415. Sender: TObject);
  1416. begin
  1417. TAction(Sender).Enabled := jpManager.ActivePageIndex = 1;
  1418. end;
  1419. procedure TMainFrm.actnShowBidLotAliasExecute(Sender: TObject);
  1420. var
  1421. sgsBidLot: TStrings;
  1422. BidAliasForm: TBidAliasForm;
  1423. begin
  1424. sgsBidLot := TStringList.Create;
  1425. BidAliasForm := TBidAliasForm.Create(nil);
  1426. try
  1427. BidAliasForm.Project := CurProject;
  1428. SingleObjectAggregate.BidLotDM.Project := CurProject;
  1429. FProjectFileManager.GetBidLotsByID(CurProject.ID, sgsBidLot);
  1430. SingleObjectAggregate.BidLotDM.RefreshBidLot(sgsBidLot);
  1431. BidAliasForm.DataSet := SingleObjectAggregate.BidLotDM.BidLotDB;
  1432. BidAliasForm.BuildProjectName := CurProject.ProjectName;
  1433. BidAliasForm.ShowModal;
  1434. SingleObjectAggregate.BidLotDM.SyncProjectView;
  1435. finally
  1436. sgsBidLot.Free;
  1437. BidAliasForm.Free;
  1438. end;
  1439. end;
  1440. procedure TMainFrm.actnShowBidLotAliasUpdate(Sender: TObject);
  1441. begin
  1442. TAction(Sender).Enabled := Assigned(CurProject)
  1443. and
  1444. (jpManager.ActivePageIndex = 0)
  1445. and
  1446. (CurProject.Flag = 1);
  1447. end;
  1448. procedure TMainFrm.RefreshSplitBidLot(aProject: TObject);
  1449. var
  1450. sgsBidLot: TStrings;
  1451. begin
  1452. sgsBidLot := TStringList.Create;
  1453. try
  1454. SingleObjectAggregate.BidLotDM.Project := aProject;
  1455. FProjectFileManager.GetBidLotsByID(TProject(aProject).ID, sgsBidLot);
  1456. SingleObjectAggregate.BidLotDM.RefreshBidLot(sgsBidLot);
  1457. SingleObjectAggregate.BidLotDM.SyncProjectView;
  1458. finally
  1459. sgsBidLot.Free;
  1460. end;
  1461. end;
  1462. procedure TMainFrm.SetCaption(const aTabName: string);
  1463. begin
  1464. {$IFDEF _beOnLine}
  1465. Caption := SoftWareName_OnLine + ' - [' + aTabName + ']';
  1466. {$ELSE}
  1467. {$IFDEF _beCommon}
  1468. Caption := SoftWareName_ZY_Common + ' - [' + aTabName + ']';
  1469. {$ELSE}
  1470. {$IFDEF _beEncrypt}
  1471. Caption := SoftWareName_ZY + ' - [' + aTabName + ']';
  1472. {$ELSE}
  1473. Caption := SoftWareName_XX + ' - [' + aTabName + ']';
  1474. {$ENDIF}
  1475. {$ENDIF}
  1476. {$ENDIF}
  1477. end;
  1478. procedure TMainFrm.actnExportStdItemsExecute(Sender: TObject);
  1479. begin
  1480. ExportStdItems(1);
  1481. end;
  1482. procedure TMainFrm.ExportStdItems(aFileFlag: Integer);
  1483. var
  1484. sOldLibName: string;
  1485. sNewLibName: string;
  1486. begin
  1487. if aFileFlag = 1 then
  1488. sOldLibName := jtsBillsProjects.Tabs[jtsBillsProjects.TabIndex] + '分项清单'
  1489. else
  1490. sOldLibName := jtsBillsProjects.Tabs[jtsBillsProjects.TabIndex] + '工程量清单';
  1491. sNewLibName := sOldLibName;
  1492. while ScInputQuery('标准清单', '清单名称', sNewLibName) do
  1493. begin
  1494. if not CheckSpecialChar(sNewLibName) then
  1495. begin
  1496. if not FStdBillsCtrl.FXQDManager.CheckLibExists(sNewLibName) then
  1497. begin
  1498. Application.ProcessMessages;
  1499. BeginUserOperation(sExportStdLib);
  1500. Screen.Cursor := crHourGlass;
  1501. try
  1502. FStdBillsCtrl.FXQDManager.FileFlag := aFileFlag;
  1503. FStdBillsCtrl.FXQDManager.AddFile(sNewLibName);
  1504. FStdBillsCtrl.StdBillsLibFrm.AddLib(sNewLibName, aFileFlag);
  1505. finally
  1506. Screen.Cursor := crDefault;
  1507. EndUserOperation;
  1508. end;
  1509. Break;
  1510. end
  1511. else
  1512. begin
  1513. sNewLibName := sOldLibName;
  1514. MessageWarning(Screen.ActiveForm.Handle, sSameFileName);
  1515. end;
  1516. end
  1517. else
  1518. begin
  1519. sNewLibName := sOldLibName;
  1520. MessageWarning(Screen.ActiveForm.Handle, sSpecialChar);
  1521. end;
  1522. end;
  1523. end;
  1524. procedure TMainFrm.actnManagerStdItemsExecute(Sender: TObject);
  1525. var
  1526. StdLibsManagerForm: TStdLibsManagerForm;
  1527. begin
  1528. StdLibsManagerForm := TStdLibsManagerForm.Create(nil);
  1529. try
  1530. StdLibsManagerForm.StdBillsCtrl := FStdBillsCtrl;
  1531. StdLibsManagerForm.ShowModal;
  1532. finally
  1533. StdLibsManagerForm.Free;
  1534. end;
  1535. end;
  1536. procedure TMainFrm.actnSelectGatherNodeByNameUpdate(Sender: TObject);
  1537. begin
  1538. TAction(Sender).Enabled := Assigned(CurProject)
  1539. and
  1540. (jpManager.ActivePageIndex = 0)
  1541. and
  1542. (CurProject.ProjectView.JimPages.ActivePageIndex = 2);
  1543. end;
  1544. procedure TMainFrm.actnSelectGatherNodeByNameExecute(Sender: TObject);
  1545. begin
  1546. ExcuteTemplateMethod(@TMainFrm.SelectGatherNodeByName, Self);
  1547. end;
  1548. procedure TMainFrm.AbolishAllGatherChoose;
  1549. begin
  1550. CurProject.ProjectView.ControlBillsTreeRT(False);
  1551. CurProject.ProjectView.ControlXMJTreeView(False);
  1552. try
  1553. CurProject.BillsData.SelectGatherNode(CurProject.BillsData.XMJBillsTree.FirstNode, False);
  1554. finally
  1555. CurProject.ProjectView.ControlBillsTreeRT(True);
  1556. CurProject.ProjectView.ControlXMJTreeView(True);
  1557. end;
  1558. end;
  1559. procedure TMainFrm.SelectGatherNodeByName;
  1560. begin
  1561. CurProject.ProjectView.ControlBillsTreeRT(False);
  1562. CurProject.ProjectView.ControlXMJTreeView(False);
  1563. try
  1564. CurProject.BillsData.SelectGatherNode(CurProject.BillsData.XMJBillsTree.FirstNode, True);
  1565. finally
  1566. CurProject.ProjectView.ControlXMJTreeView(True);
  1567. CurProject.ProjectView.ControlBillsTreeRT(True);
  1568. end;
  1569. end;
  1570. procedure TMainFrm.actnAbolishAllGatherChooseExecute(Sender: TObject);
  1571. begin
  1572. ExcuteTemplateMethod(@TMainFrm.AbolishAllGatherChoose, Self);
  1573. end;
  1574. procedure TMainFrm.actnCalculateAllExecute(Sender: TObject);
  1575. begin
  1576. ExcuteTemplateMethod(@TMainFrm.CalculateAll, Self);
  1577. end;
  1578. procedure TMainFrm.CalculateAll;
  1579. begin
  1580. CurProject.ProjectView.ControlBillsTreeRT(False);
  1581. CurProject.ProjectView.ControlXMJTreeView(False);
  1582. try
  1583. CurProject.BillsData.CalculateAll;
  1584. finally
  1585. CurProject.ProjectView.ControlXMJTreeView(True);
  1586. CurProject.ProjectView.ControlBillsTreeRT(True);
  1587. end;
  1588. end;
  1589. procedure TMainFrm.actnUndoTextExecute(Sender: TObject);
  1590. begin
  1591. if CurProject.ProjectView.zgBills.Focused and CurProject.BillsData.CanUnDoBillsText then
  1592. CurProject.BillsData.UnDoBillsText
  1593. else if CurProject.ProjectView.zgDrawingQuantity.Focused and
  1594. CurProject.BillsData.CanUnDoDrawQtyText
  1595. then
  1596. CurProject.BillsData.UnDoDrawQtyText;
  1597. end;
  1598. procedure TMainFrm.actnUndoTextUpdate(Sender: TObject);
  1599. begin
  1600. TAction(Sender).Enabled := Assigned(CurProject)
  1601. and
  1602. ((CurProject.ProjectView.zgBills.Focused
  1603. and
  1604. CurProject.BillsData.CanUnDoBillsText)
  1605. or
  1606. (CurProject.ProjectView.zgDrawingQuantity.Focused
  1607. and
  1608. CurProject.BillsData.CanUnDoDrawQtyText));
  1609. end;
  1610. procedure TMainFrm.actnLocateFromProjectBillsExecute(Sender: TObject);
  1611. begin
  1612. CurProject.BillsData.LocateProjectBills;
  1613. actnItems.Execute;
  1614. end;
  1615. procedure TMainFrm.actnLocateFromQtyBillsExecute(Sender: TObject);
  1616. begin
  1617. CurProject.DetailItemsDM.LocateBills;
  1618. actnItems.Execute;
  1619. end;
  1620. procedure TMainFrm.actnLocateFromQtyBillsUpdate(Sender: TObject);
  1621. begin
  1622. TAction(Sender).Enabled := Assigned(CurProject) and CurProject.DetailItemsDM.CanLocateBills;
  1623. end;
  1624. procedure TMainFrm.GetGatherProjects(ASL: TStringList);
  1625. var
  1626. sProjName, sFullName: string;
  1627. begin
  1628. ASL.Clear;
  1629. if CurProject.Flag <> 1 then
  1630. begin
  1631. FProjectFileManager.GetNameByID(CurProject.ID, sProjName, sFullName);
  1632. FProjectFileManager.GetBidLotsByID(CurProject.ID, ASL);
  1633. end;
  1634. end;
  1635. procedure TMainFrm.xbUpdateMemoClick(Sender: TObject);
  1636. var sPath: string;
  1637. begin
  1638. sPath := ExtractFilePath(Application.ExeName);
  1639. ShellExecute(Handle, 'open', PChar(sPath + '清单编制升级说明.txt'), nil, nil, SW_SHOW);
  1640. end;
  1641. procedure TMainFrm.actnShowGradeViewUpdate(Sender: TObject);
  1642. begin
  1643. TAction(Sender).Enabled := Assigned(CurProject)
  1644. and (jpManager.ActivePageIndex = 0);
  1645. if Assigned(CurProject) then
  1646. begin
  1647. TAction(Sender).Checked := CurProject.ProjectView.IsGradeView;
  1648. xbGradeView.Down := CurProject.ProjectView.IsGradeView;
  1649. end;
  1650. end;
  1651. procedure TMainFrm.actnShowGradeViewExecute(Sender: TObject);
  1652. begin
  1653. actnShowGradeView.Checked := not actnShowGradeView.Checked;
  1654. CurProject.ProjectView.SwitchBillsGradeView(actnShowGradeView.Checked);
  1655. end;
  1656. procedure TMainFrm.actnGradeExecute(Sender: TObject);
  1657. begin
  1658. {$IFNDEF _beEncrypt}
  1659. MessageHint(0, '对不起,此版本不提供评分功能,请购买正式版。');
  1660. Exit;
  1661. {$ENDIF}
  1662. Screen.Cursor := crHourGlass;
  1663. try
  1664. CurProject.BillsData.Grade;
  1665. AddProgressForm(1, '正在进行评分统计…');
  1666. CurProject.BillsData.Stat;
  1667. finally
  1668. Screen.Cursor := crDefault;
  1669. CloseProgressForm;
  1670. end;
  1671. end;
  1672. procedure TMainFrm.actnStatExecute(Sender: TObject);
  1673. begin
  1674. {$IFNDEF _beEncrypt}
  1675. MessageHint(0, '对不起,此版本不提供评分功能,请购买正式版。');
  1676. Exit;
  1677. {$ENDIF}
  1678. Screen.Cursor := crHourGlass;
  1679. try
  1680. CurProject.BillsData.Stat;
  1681. finally
  1682. Screen.Cursor := crDefault;
  1683. CloseProgressForm;
  1684. end;
  1685. end;
  1686. procedure TMainFrm.actnClearUserFlagsExecute(Sender: TObject);
  1687. begin
  1688. Screen.Cursor := crHourGlass;
  1689. try
  1690. CurProject.BillsData.ClearUserFlags;
  1691. finally
  1692. Screen.Cursor := crDefault;
  1693. end;
  1694. end;
  1695. procedure TMainFrm.actnGradeUpdate(Sender: TObject);
  1696. begin
  1697. TAction(Sender).Enabled := Assigned(CurProject) and (jpManager.ActivePageIndex = 0);
  1698. end;
  1699. procedure TMainFrm.actnStatUpdate(Sender: TObject);
  1700. begin
  1701. TAction(Sender).Enabled := Assigned(CurProject) and (jpManager.ActivePageIndex = 0);
  1702. end;
  1703. procedure TMainFrm.actnClearUserFlagsUpdate(Sender: TObject);
  1704. begin
  1705. TAction(Sender).Enabled := Assigned(CurProject) and (jpManager.ActivePageIndex = 0);
  1706. end;
  1707. procedure TMainFrm.xbQuantityErrorClick(Sender: TObject);
  1708. begin
  1709. CurProject.BillsData.AddError(ecQuantityError, 1);
  1710. end;
  1711. procedure TMainFrm.xbLostLineClick(Sender: TObject);
  1712. var vLostKind: TErrorCategory;
  1713. iCount: Integer;
  1714. begin
  1715. if ExecCustomSetErrorForm(vLostKind, iCount) then
  1716. begin
  1717. if iCount = 0 then Exit;
  1718. CurProject.BillsData.AddError(vLostKind, iCount);
  1719. end;
  1720. end;
  1721. procedure TMainFrm.xbIgnoreCodeClick(Sender: TObject);
  1722. begin
  1723. CurProject.BillsData.CancelError(ecCodeError);
  1724. CurProject.BillsData.CancelError(ecB_CodeError);
  1725. end;
  1726. procedure TMainFrm.xbIgnoreNameClick(Sender: TObject);
  1727. begin
  1728. CurProject.BillsData.CancelError(ecNameError);
  1729. end;
  1730. procedure TMainFrm.xbIgnoreUnitsClick(Sender: TObject);
  1731. begin
  1732. CurProject.BillsData.CancelError(ecUnitError);
  1733. end;
  1734. procedure TMainFrm.xbIgnoreQuantityClick(Sender: TObject);
  1735. begin
  1736. CurProject.BillsData.CancelError(ecQuantityError);
  1737. end;
  1738. procedure TMainFrm.xbIgnoreSuperscaleClick(Sender: TObject);
  1739. begin
  1740. CurProject.BillsData.CancelError(ecSuperscale);
  1741. end;
  1742. procedure TMainFrm.xbIgnoreRepeatLineClick(Sender: TObject);
  1743. begin
  1744. CurProject.BillsData.CancelError(ecRepeatLine);
  1745. end;
  1746. procedure TMainFrm.xbIgnoreLostPreClick(Sender: TObject);
  1747. begin
  1748. CurProject.BillsData.CancelError(ecLostPreSibling);
  1749. end;
  1750. procedure TMainFrm.xbIgnoreLostNextClick(Sender: TObject);
  1751. begin
  1752. CurProject.BillsData.CancelError(ecLostNextSibling);
  1753. end;
  1754. procedure TMainFrm.xbIgnoreLostChildClick(Sender: TObject);
  1755. begin
  1756. CurProject.BillsData.CancelError(ecLostChildren);
  1757. end;
  1758. procedure TMainFrm.xbNameErrorClick(Sender: TObject);
  1759. begin
  1760. CurProject.BillsData.AddError(ecNameError, 1);
  1761. end;
  1762. procedure TMainFrm.xbUnitsErrorClick(Sender: TObject);
  1763. begin
  1764. CurProject.BillsData.AddError(ecUnitError, 1);
  1765. end;
  1766. procedure TMainFrm.xbCodeErrorClick(Sender: TObject);
  1767. begin
  1768. with CurProject.BillsData do
  1769. begin
  1770. case BillCategory(cdsOrgBillsCode.AsString, cdsOrgBillsB_Code.AsString) of
  1771. bcYSXMJ: AddError(ecCodeError, 1);
  1772. bcQDZMH: AddError(ecB_CodeError, 1);
  1773. end;
  1774. end;
  1775. end;
  1776. procedure TMainFrm.xbSuperscaleClick(Sender: TObject);
  1777. begin
  1778. CurProject.BillsData.AddError(ecSuperscale, 1);
  1779. end;
  1780. procedure TMainFrm.xbRepeatLineClick(Sender: TObject);
  1781. begin
  1782. CurProject.BillsData.AddError(ecRepeatLine, 1);
  1783. end;
  1784. procedure TMainFrm.actnGradeCurItemExecute(Sender: TObject);
  1785. begin
  1786. {$IFNDEF _beEncrypt}
  1787. MessageHint(0, '对不起,此版本不提供评分功能,请购买正式版。');
  1788. Exit;
  1789. {$ENDIF}
  1790. Screen.Cursor := crHourGlass;
  1791. try
  1792. CurProject.BillsData.Grade(False);
  1793. AddProgressForm(1, '正在进行评分统计…');
  1794. CurProject.BillsData.Stat;
  1795. finally
  1796. Screen.Cursor := crDefault;
  1797. CloseProgressForm;
  1798. end;
  1799. end;
  1800. procedure TMainFrm.actnGradeCurItemUpdate(Sender: TObject);
  1801. begin
  1802. TAction(Sender).Enabled := Assigned(CurProject) and (jpManager.ActivePageIndex = 0);
  1803. end;
  1804. procedure TMainFrm.CloseProjectByID(AID: Integer);
  1805. begin
  1806. jtsBillsProjects.Tabs.Delete(AID + 1);
  1807. jpsBillsProjects.Pages.Delete(AID);
  1808. jtsBillsProjects.TabIndex := FBillsProjectManager.ActiveIndex + 1;
  1809. jpsBillsProjects.ActivePageIndex := FBillsProjectManager.ActiveIndex;
  1810. if FBillsProjectManager.ProjectCount = 0 then
  1811. begin
  1812. SetCaption('项目管理');
  1813. jpManager.ActivePageIndex := 1;
  1814. end
  1815. else
  1816. SetCaption(FBillsProjectManager.ActiveProject.ProjectName);
  1817. end;
  1818. procedure TMainFrm.actnClearAllUnitPriceExecute(Sender: TObject);
  1819. var bCalc: Boolean;
  1820. begin
  1821. Screen.Cursor := crHourGlass;
  1822. try
  1823. bCalc := ScConfigInfo.RealTimeCalc;
  1824. ScConfigInfo.RealTimeCalc := False;
  1825. CurProject.BillsData.ClearAllUnitPrices;
  1826. CurProject.BillsData.CalculateAll;
  1827. finally
  1828. ScConfigInfo.RealTimeCalc := bCalc;
  1829. Screen.Cursor := crDefault;
  1830. end;
  1831. end;
  1832. procedure TMainFrm.actnClearAllUnitPriceUpdate(Sender: TObject);
  1833. begin
  1834. TAction(Sender).Enabled := Assigned(CurProject) and (jpManager.ActivePageIndex = 0);
  1835. end;
  1836. procedure TMainFrm.actnGatherBillsQuantityExecute(Sender: TObject);
  1837. begin
  1838. Screen.Cursor := crHourGlass;
  1839. try
  1840. CurProject.BillsData.GatherBillsQuantity;
  1841. finally
  1842. Screen.Cursor := crDefault;
  1843. end;
  1844. end;
  1845. procedure TMainFrm.actClearUnitUpdate(Sender: TObject);
  1846. begin
  1847. TAction(Sender).Enabled := Assigned(CurProject)
  1848. and
  1849. (jpManager.ActivePageIndex = 0)
  1850. and
  1851. (CurProject.ProjectView.JimPages.ActivePageIndex = 0);
  1852. end;
  1853. procedure TMainFrm.actClearUnitExecute(Sender: TObject);
  1854. var
  1855. s: string;
  1856. begin
  1857. if MessageQuest('确定要删除清单子目中非叶子节点的单位?') then
  1858. CurProject.BillsData.DeleteLastParentUnit(1);
  1859. end;
  1860. procedure TMainFrm.actnShowRecycleBinExecute(Sender: TObject);
  1861. var
  1862. RecycleBinForm: TRecycleBinForm;
  1863. begin
  1864. RecycleBinForm := TRecycleBinForm.Create(nil);
  1865. try
  1866. RecycleBinForm.Project := GetAcitveProject;
  1867. RecycleBinForm.ShowModal;
  1868. finally
  1869. RecycleBinForm.Free;
  1870. end;
  1871. end;
  1872. procedure TMainFrm.dxStdXiangClick(Sender: TObject);
  1873. begin
  1874. Screen.Cursor := crHourGlass;
  1875. try
  1876. StdBillsCtrl.ShowLevel(TdxBarButton(Sender).Tag);
  1877. finally
  1878. Screen.Cursor := crDefault;
  1879. end;
  1880. end;
  1881. // Added by GiLi 2012-3-20 9:53:16
  1882. // 是否可以定位当前节点到标准清单所在的位置
  1883. procedure TMainFrm.actnLocateAtStdBillsUpdate(Sender: TObject);
  1884. begin
  1885. if not Assigned(StdBillsCtrl) then
  1886. begin
  1887. actnLocateAtStdBills.Enabled := False;
  1888. end
  1889. else
  1890. begin
  1891. actnLocateAtStdBills.Enabled := StdBillsCtrl.CanLocateAtStdBills;
  1892. end;
  1893. end;
  1894. procedure TMainFrm.actnLocateAtStdBillsExecute(Sender: TObject);
  1895. begin
  1896. StdBillsCtrl.LocateAtStdBills;
  1897. end;
  1898. procedure TMainFrm.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
  1899. var
  1900. MQResult: Integer;
  1901. I: Integer;
  1902. project: TProject;
  1903. begin
  1904. if FBillsProjectManager.ProjectList.Count > 0 then
  1905. begin
  1906. MQResult := MessageQuest(Handle, '您没有保存文件,是否保存?', '询问', MB_YESNOCANCEL);
  1907. case MQResult of
  1908. ID_YES:
  1909. begin
  1910. // 这里注释掉,原因是放在TProjectManager.Destroy中去处理,这样更符合逻辑
  1911. {for I := FBillsProjectManager.ProjectList.Count - 1 downto 0 do
  1912. begin
  1913. project := TProject(FBillsProjectManager.ProjectList[I]);
  1914. if project.NeedSaveDatabase then
  1915. begin
  1916. if MessageBox(0, PChar(Format('项目[%s]是否保存?', [project.ProjectName])),
  1917. PChar('询问'), MB_YESNO or MB_ICONQUESTION or MB_TOPMOST) = IDYES then
  1918. project.Save(False);
  1919. end;
  1920. project.Free;
  1921. end;
  1922. FBillsProjectManager.ProjectList.Free;}
  1923. FIsSave := True;
  1924. CanClose := True;
  1925. end;
  1926. ID_NO:
  1927. begin
  1928. // 这里注释掉,原因是放在TProjectManager.Destroy中去处理,这样更符合逻辑
  1929. // 为防止内存泄露加上下面代码
  1930. {for I := FBillsProjectManager.ProjectList.Count - 1 downto 0 do
  1931. begin
  1932. project := TProject(FBillsProjectManager.ProjectList[I]);
  1933. project.Free;
  1934. end;
  1935. FBillsProjectManager.ProjectList.Free; }
  1936. FIsSave := False;
  1937. CanClose := True;
  1938. end;
  1939. IDCANCEL:
  1940. CanClose := False;
  1941. end;
  1942. end
  1943. else
  1944. CanClose := True;
  1945. end;
  1946. procedure TMainFrm.acCopyBillsUpdate(Sender: TObject);
  1947. begin
  1948. TAction(Sender).Enabled := Assigned(CurProject) and CurProject.ProjectView.IsCanCopyBills;
  1949. end;
  1950. procedure TMainFrm.ZjGridPasteUpdate(Sender: TObject);
  1951. begin
  1952. if Assigned(CurProject) then
  1953. ZjGridPaste.Enabled := CurProject.ProjectView.IsCanGridPaste
  1954. else
  1955. ZjGridPaste.Enabled := True;
  1956. end;
  1957. procedure TMainFrm.actnAddLeafBillsExecute(Sender: TObject);
  1958. begin
  1959. AddLeafBills(CurProject.BillsData);
  1960. end;
  1961. procedure TMainFrm.actnBatchReplaceBillsDataExecute(Sender: TObject);
  1962. begin
  1963. BatchReplaceBillsData(CurProject.BillsData);
  1964. end;
  1965. procedure TMainFrm.actnBatchReplaceBillsDataUpdate(Sender: TObject);
  1966. begin
  1967. TAction(Sender).Enabled := CurProject.BillsData.cdsBillsB_Code.AsString <> '';
  1968. end;
  1969. procedure TMainFrm.actnExportFlatExcelExecute(Sender: TObject);
  1970. var
  1971. strFileName: string;
  1972. begin
  1973. if SaveFileDialog('导出0号台账平面表', '.xls', '', 'Excel files (*.xls)|*.xls', strFileName) then
  1974. begin
  1975. Screen.Cursor := crHourGlass;
  1976. BeginUserOperation(sExportExcel);
  1977. try
  1978. CurProject.ExportFlatExcel(strFileName);
  1979. finally
  1980. EndUserOperation;
  1981. Screen.Cursor := crDefault;
  1982. end;
  1983. end;
  1984. end;
  1985. initialization
  1986. ShortDateFormat := 'yyyy-mm-dd';
  1987. LongDateFormat := 'yyyy-mm-dd';
  1988. DateSeparator := '-';
  1989. TimeSeparator := ':';
  1990. ShortTimeFormat := 'H:mm:ss';
  1991. end.