unit MainForm; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, dxBar, dxBarExtItems, ImgList, ActnList, ZjDbaActns, ComCtrls, ExtCtrls, AboutForm, JimPages, JimTabs, ConstVarUnit, BillsProjectFrame, ScProjectManager, ConstMethodUnit, ScPageControl, ScStdBillsCtrl, ToolWin, XPMenu, BMDThread, fraFileManagerFrame, dxsbar, ProjectFileManager, ScPHPWeb, AddLeafBillsFrm, BatchReplaceBillsFrm, // {$IFDEF _beOnLine} // , ScClientDM // {$ENDIF}, SingleObjectAggregateUnit, Menus; type TMainFrm = class(TForm) dxBarManager: TdxBarManager; ActionList: TActionList; dxNew: TdxBarButton; dxSave: TdxBarButton; dxBarButton7: TdxBarButton; acNew: TAction; acOpen: TAction; acSave: TAction; acSaveAs: TAction; imgsSmall: TImageList; dxCut: TdxBarButton; dxPaste: TdxBarButton; dxAdd: TdxBarButton; dxOpenWithHistory: TdxBarButton; dxMoveRight: TdxBarButton; dxMoveLeft: TdxBarButton; dxDelete: TdxBarButton; dxMoveUp: TdxBarButton; dxMoveDown: TdxBarButton; acExit: TAction; dxFile: TdxBarSubItem; dxEdit: TdxBarSubItem; dxBarListItem1: TdxBarListItem; dxGater: TdxBarSubItem; dxHelp: TdxBarSubItem; dxbNew: TdxBarButton; dxbOpen: TdxBarButton; dxbSave: TdxBarButton; dxbSaveAs: TdxBarButton; dxbExit: TdxBarButton; dxBarButton6: TdxBarButton; dxGather: TdxBarButton; acBillsManage: TAction; dxBillsManage: TdxBarButton; dxBarButton10: TdxBarButton; acImportExcel: TAction; acGatherBills: TAction; dxbImprotExcel: TdxBarButton; dxbGather: TdxBarButton; dxbCopy: TdxBarButton; dxbCut: TdxBarButton; dxbPaste: TdxBarButton; dxbLeft: TdxBarButton; dxbRight: TdxBarButton; dxbUp: TdxBarButton; dxbDown: TdxBarButton; dxbInsert: TdxBarButton; dxbDelete: TdxBarButton; dxCompany: TdxBarStatic; dxBarWord: TdxBarStatic; dxBarProgressItem: TdxBarProgressItem; ZjDbaInsert: TZjDbaInsert; ZjDbaDelete: TZjDbaDelete; ZjDbaUpMove: TZjDbaUpMove; ZjDbaDownMove: TZjDbaDownMove; ZjTreeDbaUpLevel: TZjTreeDbaUpLevel; ZjTreeDbaDownLevel: TZjTreeDbaDownLevel; ZjGridCopy: TZjGridCopy; ZjGridCut: TZjGridCut; ZjGridPaste: TZjGridPaste; dxBarButton1: TdxBarButton; acHelp: TAction; dxBarButton2: TdxBarButton; dxShowOptions: TdxBarButton; SaveDialog: TSaveDialog; acCopyBills: TAction; dxCopyBills: TdxBarButton; acCloseCurProject: TAction; xppCloseProject: TdxBarPopupMenu; dxBarButton5: TdxBarButton; dxbExportToExcel: TdxBarButton; actnExportToExcel: TAction; XPMenu: TXPMenu; ZjGridRemapedPaste: TZjGridRemapedPaste; dxRemapedPaste: TdxBarButton; actnShowOptions: TAction; dxProject: TdxBarSubItem; dxbSetOptions: TdxBarButton; actnClearAllQuantity: TAction; dxBarButton3: TdxBarButton; dxXiang: TdxBarButton; dxMu: TdxBarButton; dxJie: TdxBarButton; dxXiMu: TdxBarButton; dxLevel5: TdxBarButton; dxLevel6: TdxBarButton; dxAll: TdxBarButton; dxliLocateBills: TdxBarListItem; actnLocateBills: TAction; tmrAutoSave: TTimer; actnHisResPoint: TAction; dxBarButton4: TdxBarButton; actnSaveFixedPoint: TAction; dxBarSubItem1: TdxBarSubItem; dxBarButton8: TdxBarButton; dxBarButton9: TdxBarButton; dxSet: TdxBarSubItem; dxOperation: TdxBarSubItem; dxOnlyXMJ: TdxBarButton; btCheckServer: TBMDThread; tmrOnLine: TTimer; tmrEncrypt: TTimer; actnAuthorize: TAction; dxAuthorize: TdxBarButton; actnRemoveZeroQty: TAction; dxBarButton11: TdxBarButton; jpManager: TJimPages; jpManagerProject: TJimPage; jpManagerPage: TJimPage; jpsBillsProjects: TJimPages; Splitter1: TSplitter; pnlDock: TPanel; actnImportQtyItems: TAction; dxBarSubItem2: TdxBarSubItem; dxBarSubItem3: TdxBarSubItem; dxBarButton12: TdxBarButton; actnProjectBills: TAction; dxBarButton13: TdxBarButton; dxBarButton14: TdxBarButton; actnQtyBills: TAction; actnItems: TAction; ilstLarge: TImageList; xsbMain: TdxSideBar; Splitter2: TSplitter; Panel1: TPanel; jtsBillsProjects: TJimTabSet; tbBillsToolView: TToolBar; tbStdproject: TToolButton; tbQtyItems: TToolButton; dxBarButton15: TdxBarButton; dxBarButton16: TdxBarButton; actnStdBills: TAction; actnLocate: TAction; dxBarButton17: TdxBarButton; dxBarButton18: TdxBarButton; dxBarButton19: TdxBarButton; dxBarButton20: TdxBarButton; FileManagerFrame: TFileManagerFrame; actnMergeProject: TAction; actnSplitProject: TAction; dxBarSubItem4: TdxBarSubItem; dxBarButton21: TdxBarButton; dxBarButton22: TdxBarButton; actnShowBidLotAlias: TAction; dxBarButton23: TdxBarButton; actnExportStdItems: TAction; actnManagerStdItems: TAction; dxBarButton24: TdxBarButton; dxBarButton25: TdxBarButton; actnSelectGatherNodeByName: TAction; actnAbolishAllGatherChoose: TAction; dxBarButton26: TdxBarButton; dxBarButton27: TdxBarButton; actnCalculateAll: TAction; dxBarButton28: TdxBarButton; dxBarButton29: TdxBarButton; dxBarSubItem5: TdxBarSubItem; dxBarSubItem6: TdxBarSubItem; dxBarButton30: TdxBarButton; actnUndoText: TAction; dxBarButton31: TdxBarButton; dbbLocateFromProjectBills: TdxBarButton; actnLocateFromProjectBills: TAction; dbbLocateFromQtyBills: TdxBarButton; actnLocateFromQtyBills: TAction; xbUpdateMemo: TdxBarButton; xbGradeView: TdxBarButton; actnShowGradeView: TAction; xbGrade: TdxBarButton; actnGrade: TAction; xbStat: TdxBarButton; xbClearUserFlags: TdxBarButton; actnStat: TAction; actnClearUserFlags: TAction; dxBarSubItem7: TdxBarSubItem; dxBarSubItem8: TdxBarSubItem; xbQuantityError: TdxBarButton; xbLostLine: TdxBarButton; xbIgnoreCode: TdxBarButton; xbIgnoreName: TdxBarButton; xbIgnoreUnits: TdxBarButton; xbIgnoreQuantity: TdxBarButton; xbIgnoreSuperscale: TdxBarButton; xbIgnoreRepeatLine: TdxBarButton; xbIgnoreLostPre: TdxBarButton; xbIgnoreLostNext: TdxBarButton; xbIgnoreLostChild: TdxBarButton; dxBarSubItem9: TdxBarSubItem; xbNameError: TdxBarButton; xbUnitsError: TdxBarButton; xbCodeError: TdxBarButton; xbSuperscale: TdxBarButton; xbRepeatLine: TdxBarButton; xbGradeCurItem: TdxBarButton; actnGradeCurItem: TAction; xbClearAllUnitPrices: TdxBarButton; actnClearAllUnitPrice: TAction; dxBarButton32: TdxBarButton; actnGatherBillsQuantity: TAction; dxBarClearUnit: TdxBarButton; actClearUnit: TAction; actnShowRecycleBin: TAction; dxbtnShowRecycleBin: TdxBarButton; dxbtnShowStdXiang: TdxBarButton; dxbtnShowStdMu: TdxBarButton; dxbtnShowStdJie: TdxBarButton; dxbtnShowStdXiMu: TdxBarButton; dxbtnShowStdFiveLvl: TdxBarButton; dxbtnShowStdSixLvl: TdxBarButton; dxbtnShowStdAll: TdxBarButton; dxbtnLocateAtStdBills: TdxBarButton; actnLocateAtStdBills: TAction; dxbtnAddLeafBills: TdxBarButton; actnAddLeafBills: TAction; dxbtnBatchReplaceBillsData: TdxBarButton; actnBatchReplaceBillsData: TAction; dxbtnExportFlatExcel: TdxBarButton; actnExportFlatExcel: TAction; procedure acExitExecute(Sender: TObject); procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); procedure acHelpExecute(Sender: TObject); procedure acSaveExecute(Sender: TObject); procedure acSaveAsExecute(Sender: TObject); procedure acImportExcelExecute(Sender: TObject); procedure acSaveUpdate(Sender: TObject); procedure acImportExcelUpdate(Sender: TObject); procedure jtsBillsProjectsChange(Sender: TObject; NewTab: Integer; var AllowChange: Boolean); procedure acGatherBillsExecute(Sender: TObject); procedure acCopyBillsExecute(Sender: TObject); procedure acCloseCurProjectExecute(Sender: TObject); procedure jtsBillsProjectsMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure actnExportToExcelExecute(Sender: TObject); procedure pnlDockUnDock(Sender: TObject; Client: TControl; NewTarget: TWinControl; var Allow: Boolean); procedure actnShowOptionsExecute(Sender: TObject); procedure actnClearAllQuantityExecute(Sender: TObject); procedure dxXiangClick(Sender: TObject); // Added by GiLi 2012-3-19 16:10:31 // 标准清单的层次显示 procedure dxStdXiangClick(Sender: TObject); procedure actnLocateBillsExecute(Sender: TObject); procedure tmrAutoSaveTimer(Sender: TObject); procedure actnHisResPointExecute(Sender: TObject); procedure actnSaveFixedPointExecute(Sender: TObject); procedure dxOnlyXMJClick(Sender: TObject); procedure ZjDbaDeleteExecute(Sender: TObject); procedure ZjDbaDeleteUpdate(Sender: TObject); procedure btCheckServerExecute(Sender: TObject; Thread: TBMDExecuteThread; var Data: Pointer); procedure btCheckServerTerminate(Sender: TObject; Thread: TBMDExecuteThread; var Data: Pointer); procedure tmrOnLineTimer(Sender: TObject); procedure FormClose(Sender: TObject; var Action: TCloseAction); procedure tmrEncryptTimer(Sender: TObject); procedure actnAuthorizeExecute(Sender: TObject); procedure actnRemoveZeroQtyExecute(Sender: TObject); procedure acBillsManageExecute(Sender: TObject); procedure acBillsManageUpdate(Sender: TObject); procedure actnImportQtyItemsExecute(Sender: TObject); procedure actnProjectBillsExecute(Sender: TObject); procedure actnQtyBillsExecute(Sender: TObject); procedure actnItemsExecute(Sender: TObject); procedure actnItemsUpdate(Sender: TObject); procedure actnQtyBillsUpdate(Sender: TObject); procedure actnProjectBillsUpdate(Sender: TObject); procedure xsbMainItemClick(Sender: TObject; Item: TdxSideBarItem); procedure actnStdBillsExecute(Sender: TObject); procedure actnLocateExecute(Sender: TObject); procedure dxBarButton17Click(Sender: TObject); procedure actnRemoveZeroQtyUpdate(Sender: TObject); procedure actnStdBillsUpdate(Sender: TObject); procedure acExitUpdate(Sender: TObject); procedure actnMergeProjectExecute(Sender: TObject); procedure actnMergeProjectUpdate(Sender: TObject); procedure actnSplitProjectUpdate(Sender: TObject); procedure actnSplitProjectExecute(Sender: TObject); procedure FileManagerFrameactnExportProjectUpdate(Sender: TObject); procedure actnShowBidLotAliasExecute(Sender: TObject); procedure actnShowBidLotAliasUpdate(Sender: TObject); procedure actnExportStdItemsExecute(Sender: TObject); procedure actnManagerStdItemsExecute(Sender: TObject); procedure actnSelectGatherNodeByNameUpdate(Sender: TObject); procedure actnSelectGatherNodeByNameExecute(Sender: TObject); procedure actnAbolishAllGatherChooseExecute(Sender: TObject); procedure actnCalculateAllExecute(Sender: TObject); procedure actnUndoTextExecute(Sender: TObject); procedure actnUndoTextUpdate(Sender: TObject); procedure actnLocateFromProjectBillsExecute(Sender: TObject); procedure actnLocateFromQtyBillsExecute(Sender: TObject); procedure actnLocateFromQtyBillsUpdate(Sender: TObject); procedure xbUpdateMemoClick(Sender: TObject); procedure actnShowGradeViewUpdate(Sender: TObject); procedure actnShowGradeViewExecute(Sender: TObject); procedure actnGradeExecute(Sender: TObject); procedure actnStatExecute(Sender: TObject); procedure actnClearUserFlagsExecute(Sender: TObject); procedure actnGradeUpdate(Sender: TObject); procedure actnStatUpdate(Sender: TObject); procedure actnClearUserFlagsUpdate(Sender: TObject); procedure xbQuantityErrorClick(Sender: TObject); procedure xbLostLineClick(Sender: TObject); procedure xbIgnoreCodeClick(Sender: TObject); procedure xbIgnoreNameClick(Sender: TObject); procedure xbIgnoreUnitsClick(Sender: TObject); procedure xbIgnoreQuantityClick(Sender: TObject); procedure xbIgnoreSuperscaleClick(Sender: TObject); procedure xbIgnoreRepeatLineClick(Sender: TObject); procedure xbIgnoreLostPreClick(Sender: TObject); procedure xbIgnoreLostNextClick(Sender: TObject); procedure xbIgnoreLostChildClick(Sender: TObject); procedure xbNameErrorClick(Sender: TObject); procedure xbUnitsErrorClick(Sender: TObject); procedure xbCodeErrorClick(Sender: TObject); procedure xbSuperscaleClick(Sender: TObject); procedure xbRepeatLineClick(Sender: TObject); procedure actnGradeCurItemExecute(Sender: TObject); procedure actnGradeCurItemUpdate(Sender: TObject); procedure actnClearAllUnitPriceExecute(Sender: TObject); procedure actnClearAllUnitPriceUpdate(Sender: TObject); procedure actnGatherBillsQuantityExecute(Sender: TObject); procedure actClearUnitUpdate(Sender: TObject); procedure actClearUnitExecute(Sender: TObject); procedure actnShowRecycleBinExecute(Sender: TObject); procedure actnLocateAtStdBillsUpdate(Sender: TObject); procedure actnLocateAtStdBillsExecute(Sender: TObject); procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean); procedure acCopyBillsUpdate(Sender: TObject); procedure ZjGridPasteUpdate(Sender: TObject); procedure actnAddLeafBillsExecute(Sender: TObject); procedure actnBatchReplaceBillsDataExecute(Sender: TObject); procedure actnBatchReplaceBillsDataUpdate(Sender: TObject); procedure actnExportFlatExcelExecute(Sender: TObject); private function GetAutoSave: Boolean; function GetSaveInteval: Integer; procedure SetAutoSave(const Value: Boolean); procedure SetSaveInteval(const Value: Integer); private FOpening: Boolean; FDirPath: string; FUnitList: TStringList; {$IFDEF _beOnLine} FCheckServerErr: Boolean; {$ENDIF} FBillsProjectManager: TProjectManager; FProjectFileManager: TProjectFileMgr; FStdBillsCtrl: TStdBillsCtrl; FIsSave: Boolean; function GetPosition: Integer; procedure SetPosition(const Value: Integer); procedure SetCaption(const aTabName: string); property prgPosition: Integer read GetPosition write SetPosition; {hint} procedure ReadUnitList(AStringList: TStrings); function GetAcitveProject: TProject; property AutoSaveProjects: Boolean read GetAutoSave write SetAutoSave; property AutoSaveInterval: Integer read GetSaveInteval write SetSaveInteval; procedure CMIncProgress(var Msg: TMessage); message SM_ProgressInc; procedure CMDisplayStdBillsLib(var Msg: TMessage); message SM_StdBillsLib; procedure CMCheckProjectOpened(var Msg: TMessage); message SM_CheckProject; procedure CMLocateBills(var Msg: TMessage); message SM_LocateBills; procedure CMAutoSaveProjects(var Msg: TMessage); message SM_AutoSaveProjects; procedure HideStdBillsForm; procedure ShowStdBillsForm(aPage: Integer); {$IFDEF _beOnLine} procedure SyncCheckServerErr(Sender: TObject); {$ENDIF} function ExportBuildProject(const aShortName: string; aIsMerge: Boolean): Boolean; procedure RefreshSplitBidLot(aProject: TObject); {Argument is fullpath} function LocateProject(const aIdx: Integer; aIsOpen: Boolean): Boolean; procedure OpenProject(const AFileName, AShortName: string; aProjType, aID: Integer); {Argument is shortname} procedure CloseProject(aProject: TObject); procedure CloseProjectByID(AID: Integer); {save project} procedure SaveProject(aCreatePoint: Boolean; aFixed: Boolean = False); {New delete} procedure DeleteBills; procedure DeleteRecords; {Clear Cur Bills Quantity and the DrawQtys} procedure ClearCurNodeQty; {Remove Bills which is Zero} procedure RemoveZeroQtyBills; { FXQD } procedure ExportStdItems(aFileFlag: Integer); { Select GahterNode By Name } procedure SelectGatherNodeByName; procedure AbolishAllGatherChoose; { Calculate All } procedure CalculateAll; public { Public declarations } // 别的单元要使用这两个方法 procedure EndUserOperation; procedure BeginUserOperation(const TextWord: string); // chenshilong, 2011-01-12 11:02:24 procedure GetGatherProjects(ASL: TStringList); property ProjectManager: TProjectManager read FBillsProjectManager; property ProjectFileManager: TProjectFileMgr read FProjectFileManager; property StdBillsCtrl: TStdBillsCtrl read FStdBillsCtrl; // 另外单元要使用这个属性。2012.1.10 HXY property CurProject: TProject read GetAcitveProject; property DirPath: string read FDirPath; property IsSave: Boolean read FIsSave write FIsSave; end; var MainFrm: TMainFrm; implementation uses ConstTypeUnit, ScOptionsFrm, ScConfig, HisRestorePointFrm, ZjGrid, ZjGridDBA, NewProjectFrm, ExportExFrm, ProjectMergeSplitUnit {$IFDEF _beEncrypt} , ScEncryptUnit, ScAuthFrm {$ENDIF}, StdLibsManagerFrm, BidLotAliasFrm, ShellAPI, ScProgressFrm, ScCustomSetErrorFrm, ScReportsFrm, RecycleBinFrm, DataBase; {$R *.dfm} procedure TMainFrm.acExitExecute(Sender: TObject); begin Close; end; procedure TMainFrm.FormCreate(Sender: TObject); begin FProjectFileManager := TProjectFileMgr.Create; FProjectFileManager.CloseProjectProc := CloseProject; FProjectFileManager.OpenProjectProc := OpenProject; FileManagerFrame.ProjectFileMgr := FProjectFileManager; FBillsProjectManager := TProjectManager.Create; FProjectFileManager.ProjectManager := FBillsProjectManager; FDirPath := Format('%s\我的清单\', [ExtractFileDir(ParamStr(0))]); FStdBillsCtrl := TStdBillsCtrl.Create(FBillsProjectManager); { TODO : online } {$IFDEF _beOnLine} FCheckServerErr := False; tmrOnLine.Enabled := True; {$ENDIF} SetCaption('项目管理'); jpManager.ActivePageIndex := 1; xsbMain.SelectedItem := xsbMain.ActiveGroup.Items.Items[0]; FUnitList := TStringList.Create; ReadUnitList(FUnitList); {set auto save} AutoSaveInterval := ScConfigInfo.AutoSaveInterval; AutoSaveProjects := ScConfigInfo.AutoSaveProjects; {$IFDEF _beEncrypt} tmrEncrypt.Enabled := True; {$ELSE} dxAuthorize.Action := nil; dxAuthorize.Visible := ivNever; {$ENDIF} // ActiveControl := FileManagerFrame.zgGatherBid; // Modified by GiLi 2012-3-18 13:22:30 // 屏蔽 清单评分 xbGradeView.Visible := ivNever; xbGrade.Visible := ivNever; xbGradeCurItem.Visible := ivNever; end; procedure TMainFrm.FormDestroy(Sender: TObject); begin FProjectFileManager.Free; FBillsProjectManager.Free; FStdBillsCtrl.Free; FUnitList.Free; {$IFDEF _beOnLine} if not FCheckServerErr then PHPWeb.Logout; {$ENDIF} {$IFDEF _beEncrypt} tmrEncrypt.Enabled := False; SaveDog; {$ENDIF} end; procedure TMainFrm.acHelpExecute(Sender: TObject); var AboutFrm: TAboutFrm; begin AboutFrm := TAboutFrm.Create(nil); try AboutFrm.ShowModal; finally AboutFrm.Free; end; end; procedure TMainFrm.acSaveExecute(Sender: TObject); begin SaveProject(True); end; procedure TMainFrm.acSaveAsExecute(Sender: TObject); begin BeginUserOperation(sSaveAsWord); Screen.Cursor := crHourGlass; SaveDialog.InitialDir := FDirPath; try if SaveDialog.Execute then begin CurProject.SaveAs(SaveDialog.FileName); end; finally Screen.Cursor := crDefault; EndUserOperation; end; end; procedure TMainFrm.BeginUserOperation(const TextWord: string); begin dxBarWord.Caption := TextWord; Application.ProcessMessages; end; procedure TMainFrm.EndUserOperation; begin dxBarWord.Caption := sInitWord; Update; end; procedure TMainFrm.CMIncProgress(var Msg: TMessage); begin prgPosition := prgPosition + Msg.WParam; if prgPosition >= 100 then prgPosition := 0; end; function TMainFrm.GetPosition: Integer; begin Result := dxBarProgressItem.Position; end; procedure TMainFrm.SetPosition(const Value: Integer); begin dxBarProgressItem.Position := Value; Update; end; function TMainFrm.GetAcitveProject: TProject; begin if Assigned(FBillsProjectManager) then Result := FBillsProjectManager.ActiveProject else Result := nil; end; procedure TMainFrm.acImportExcelExecute(Sender: TObject); var strFileName: string; begin if OpenFileDialog('导入', '.xls', '', 'Excel files (*.xls)|*.xls', strFileName) then begin if MessageBox(0, PChar(sImportExcelHint), PChar(sQuestTip), MB_YESNO or MB_ICONQUESTION) = IDNO then Exit; Screen.Cursor := crHourGlass; BeginUserOperation(sImportExcel); try CurProject.ImportExcelFile(strFileName); finally EndUserOperation; Screen.Cursor := crDefault; end; end; end; procedure TMainFrm.acSaveUpdate(Sender: TObject); begin acSave.Enabled := Assigned(CurProject) {and CurProject.NeedSaveDatabase}; end; procedure TMainFrm.acImportExcelUpdate(Sender: TObject); begin TAction(Sender).Enabled := Assigned(CurProject) and (jpManager.ActivePageIndex = 0) {and (CurProject.ProjectView.JimPages.ActivePageIndex = 0)}; end; procedure TMainFrm.ReadUnitList(AStringList: TStrings); var I: Integer; begin AStringList.Clear; for I := Low(UnitsArray) to High(UnitsArray) do begin AStringList.Add(UnitsArray[I]); // AStringList.Add(ConvertUnitStr(UnitsArray[I])); end; end; procedure TMainFrm.jtsBillsProjectsChange(Sender: TObject; NewTab: Integer; var AllowChange: Boolean); begin if FOpening then Exit; if NewTab = 0 then begin jpManager.ActivePageIndex := 1; SetCaption(jtsBillsProjects.Tabs[NewTab]); end else LocateProject(NewTab - 1, False); end; procedure TMainFrm.acGatherBillsExecute(Sender: TObject); procedure CheckSelectedBeforeGather; begin with CurProject.BillsData do if not HasSelected then begin if MessageQuest('该项目没有选择汇总项,是否需要自动打勾?') then SelectGatherNode(XMJBillsTree.FirstNode, True); end; end; var iID: Integer; sGatherName: string; strFilePath: string; iProjectType, iProjKind, iGatherID: Integer; aProject, nProject: TProject; begin {$IFDEF _beEncrypt} DelayCheckDog; CheckDogErrorCountAndHint; {$ENDIF} CheckSelectedBeforeGather; CurProject.CheckBeforeGather; sGatherName := Format('%s[项目清单]', [jtsBillsProjects.Tabs[jtsBillsProjects.TabIndex]]); iProjectType := FBillsProjectManager.ActiveProject.ProjectType; if not NewProjectInfo(nil, sGatherName, iProjectType, iProjKind, iGatherID) then Exit; strFilePath := FProjectFileManager.CreateNewProject(sGatherName, iID, CurProject.GetGatherID); Application.ProcessMessages; Screen.Cursor := crHourGlass; BeginUserOperation(sGatherWord); aProject := FBillsProjectManager.ActiveProject; nProject := FBillsProjectManager.CreateNewProject(strFilePath, sGatherName, FStdBillsCtrl, iProjectType, iID); nProject.ProjectView.Project{.BillsData} := nil; IncProgressUI(15); try if not aProject.GatherProject(nProject) then begin IncProgressUI(80); MessageHint(0, sGatherError); DeleteFile(Format('%s%s.smb', [FDirPath, sGatherName])); end; finally FBillsProjectManager.RemoveProject(nProject, aProject); EndUserOperation; Screen.Cursor := crDefault; IncProgressUI(100); end; end; procedure TMainFrm.acCopyBillsExecute(Sender: TObject); begin Screen.Cursor := crHourGlass; BeginUserOperation(sCopyBills); try CurProject.ProjectView.CopyBills; finally EndUserOperation; Screen.Cursor := crDefault; end; end; procedure TMainFrm.acCloseCurProjectExecute(Sender: TObject); begin CloseProject(CurProject); end; procedure TMainFrm.jtsBillsProjectsMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin if (Button = mbRight) and (jtsBillsProjects.TabIndex <> 0) then xppCloseProject.PopupFromCursorPos; end; procedure TMainFrm.ShowStdBillsForm(aPage: Integer); begin LockWindowUpdate(Handle); try if not pnlDock.Visible then begin FStdBillsCtrl.StdBillsLibFrm.ManualDock(pnlDock, nil, alClient); pnlDock.Visible := True; Splitter1.Visible := True; FStdBillsCtrl.StdBillsLibFrm.ShowPage(aPage); end else begin if FStdBillsCtrl.StdBillsLibFrm.GetPageIdx = aPage then HideStdBillsForm else begin if aPage = 0 then tbQtyItems.Down := False else tbStdproject.Down := False; FStdBillsCtrl.StdBillsLibFrm.ShowPage(aPage); end; end; finally LockWindowUpdate(0); end; end; procedure TMainFrm.actnExportToExcelExecute(Sender: TObject); var sFileName, sProjName, sFullName: string; strBidLot, strProjBills: TStrings; begin BeginUserOperation(sExportExcel); strBidLot := TStringList.Create; strProjBills := TStringList.Create; try if CurProject.Flag <> 1 then begin FProjectFileManager.GetNameByID(CurProject.ID, sProjName, sFullName); strBidLot.AddObject(sProjName, Pointer(sFullName)); FProjectFileManager.GetBidLotsByID(CurProject.ID, strProjBills); if not ExportExForm(strBidLot, strProjBills) then Exit; Application.ProcessMessages; end; sFileName := GetSaveFile; if not CheckFileEnabled(sFileName) then Exit; Application.ProcessMessages; Screen.Cursor := crHourGlass; try CurProject.ExportExcel(FBillsProjectManager, sFileName, strBidLot, CurProject.Flag); {$IF Not DEFINED(_beEncrypt) and not DEFINED(_beOnLine)} MessageHint(Handle, '导出成功! 学习版仅导出100行!'); {$IFEND} finally Screen.Cursor := crDefault; end; finally strBidLot.Free; strProjBills.Free; EndUserOperation; end; end; procedure TMainFrm.pnlDockUnDock(Sender: TObject; Client: TControl; NewTarget: TWinControl; var Allow: Boolean); begin pnlDock.Visible := False; Splitter1.Visible := False; end; procedure TMainFrm.CMDisplayStdBillsLib(var Msg: TMessage); begin tbStdproject.Down := False; pnlDock.Visible := False; Splitter1.Visible := False; FStdBillsCtrl.StdBillsLibFrm.Hide; end; procedure TMainFrm.CMCheckProjectOpened(var Msg: TMessage); var strName: string; begin strName := String(Msg.LParam); Msg.Result := FBillsProjectManager.CheckProjectExists(strName); if Msg.Result = -1 then Exit; if Msg.WParam <> -1 then begin if FBillsProjectManager.LocateProject(Msg.Result) then begin jtsBillsProjects.TabIndex := Msg.Result; jpsBillsProjects.ActivePageIndex := Msg.Result; SetCaption(jtsBillsProjects.Tabs[Msg.Result]); // Caption := Format('%s - [%s]', [SoftWareName, jtsBillsProjects.Tabs[Msg.Result]]); end; end; end; procedure TMainFrm.OpenProject(const AFileName, AShortName: string; aProjType, aID: Integer); var idx: Integer; jimPage: TJimPage; begin {check file is opened} if not FileExists(AFileName) then raise Exception.Create('文件不存在.'); idx := FBillsProjectManager.CheckProjectExists(AFileName); if LocateProject(idx, True) then Exit; BeginUserOperation(sOpenWord); IncProgressUI(10); FBillsProjectManager.CreateNewProject(AFileName, AShortName, FStdBillsCtrl, aProjType, aID); CurProject.ParentID := FProjectFileManager.GetParentID(aID); CurProject.Flag := FProjectFileManager.GetProjectFlag(aID); if CurProject.Flag = 1 then RefreshSplitBidLot(CurProject); IncProgressUI(35); FOpening := True; LockWindowUpdate(Handle); try idx := jtsBillsProjects.Tabs.Add(AShortName); if (idx > 0) and (idx < jtsBillsProjects.Tabs.Count) then jtsBillsProjects.TabIndex := idx else jtsBillsProjects.TabIndex := 0; IncProgressUI(10); jimPage := TJimPage.Create(nil); jimPage.Pages := jpsBillsProjects; CurProject.ProjectView.Parent := jimPage; jpsBillsProjects.ActivePage := jimPage; IncProgressUI(15); CurProject.ProjectView.Align := alClient; CurProject.ProjectView.UnitsList := FUnitList; CurProject.ProjectView.Visible := True; CurProject.ProjectView.AdjustControlsSize; jpManager.ActivePageIndex := 0; IncProgressUI(20); SetCaption(AShortName); IncProgressUI(10); xsbMain.SelectedItem := xsbMain.ActiveGroup.Items.Items[0]; CurProject.Navigation := 0; HideStdBillsForm; finally LockWindowUpdate(0); FOpening := False; end; EndUserOperation; end; procedure TMainFrm.actnShowOptionsExecute(Sender: TObject); var frmOptions: TfrmOptions; begin frmOptions := TfrmOptions.Create(nil); try frmOptions.ShowModal; finally frmOptions.Free; end; end; procedure TMainFrm.actnClearAllQuantityExecute(Sender: TObject); begin // CurProject.BillsData.ClearCurNodeQty; ExcuteTemplateMethod(@TMainFrm.ClearCurNodeQty, Self); end; procedure TMainFrm.dxXiangClick(Sender: TObject); begin Screen.Cursor := crHourGlass; CurProject.ProjectView.BeginUpdate; try CurProject.BillsData.ShowLevel(TdxBarButton(Sender).Tag); finally CurProject.ProjectView.EndUpdate; Screen.Cursor := crDefault; end; end; procedure TMainFrm.CMLocateBills(var Msg: TMessage); begin Msg.Result := Integer(dxliLocateBills.Items); end; procedure TMainFrm.actnLocateBillsExecute(Sender: TObject); var iBillsID: Integer; begin iBillsID := Integer(dxliLocateBills.Items.Objects[dxliLocateBills.ItemIndex]); if iBillsID > 0 then begin CurProject.BillsData.LocateBills(iBillsID); end; end; procedure TMainFrm.CMAutoSaveProjects(var Msg: TMessage); begin AutoSaveInterval := Msg.LParam; AutoSaveProjects := Msg.WParam <> 0; end; function TMainFrm.GetAutoSave: Boolean; begin Result := tmrAutoSave.Enabled; end; function TMainFrm.GetSaveInteval: Integer; begin Result := tmrAutoSave.Interval; end; procedure TMainFrm.SetAutoSave(const Value: Boolean); begin tmrAutoSave.Enabled := Value; end; procedure TMainFrm.SetSaveInteval(const Value: Integer); begin tmrAutoSave.Interval := Value * 60 * 1000; end; procedure TMainFrm.tmrAutoSaveTimer(Sender: TObject); begin Screen.Cursor := crHourGlass; try FBillsProjectManager.SaveProjects(ScConfigInfo.SaveAllProjects, ScConfigInfo.SaveRestorePoint); finally Screen.Cursor := crDefault; end; end; procedure TMainFrm.actnHisResPointExecute(Sender: TObject); var frmRestorePoint: TfrmRestorePoint; begin frmRestorePoint := TfrmRestorePoint.Create(nil); try frmRestorePoint.OpenProjectProc := OpenProject; frmRestorePoint.CloseProjectProc := CloseProject; frmRestorePoint.Project := CurProject; frmRestorePoint.ShowModal; finally frmRestorePoint.Free; end; end; procedure TMainFrm.CloseProject(aProject: TObject); var idx: Integer; bCanClose: Boolean; begin idx := FBillsProjectManager.RemoveProjectForClose(bCanClose, TProject(aProject), nil, True); if (idx = -1) or (not bCanClose) then Exit; CloseProjectByID(idx); end; function TMainFrm.LocateProject(const aIdx: Integer; aIsOpen: Boolean): Boolean; begin Result := False; if FBillsProjectManager.LocateProject(aIdx) then begin jpsBillsProjects.ActivePageIndex := aIdx; jpManager.ActivePageIndex := 0; xsbMain.SelectedItem := xsbMain.ActiveGroup.Items.Items[CurProject.Navigation]; CurProject.ProjectView.SetGridFocus(CurProject.Navigation); TStdBillsCtrl(CurProject.StdBillsCtrl).DMStdBillsLib.RefreshCustomStep; if aIsOpen then jtsBillsProjects.TabIndex := aIdx + 1; SetCaption(jtsBillsProjects.Tabs[aIdx + 1]); HideStdBillsForm; FStdBillsCtrl.StdBillsLibFrm.ClearFilter; Result := True; end; end; procedure TMainFrm.actnSaveFixedPointExecute(Sender: TObject); begin SaveProject(True, True); end; procedure TMainFrm.SaveProject(aCreatePoint: Boolean; aFixed: Boolean); begin BeginUserOperation(sSaveWord); Screen.Cursor := crHourGlass; try CurProject.Save(aCreatePoint, aFixed); finally Screen.Cursor := crDefault; EndUserOperation; end; end; procedure TMainFrm.dxOnlyXMJClick(Sender: TObject); begin Screen.Cursor := crHourGlass; CurProject.ProjectView.BeginUpdate; try // CurProject.BillsData.CheckTree(CurProject.BillsData.BillsTree.FirstNode); CurProject.BillsData.OnlyShowXMJ; finally CurProject.ProjectView.EndUpdate; Screen.Cursor := crDefault; end; end; procedure TMainFrm.DeleteRecords; begin if SameText(ZjDbaDelete.GridDba.Grid.Name, 'zgBills') then begin if MessageQuest(sDeleteBillsHint) then begin CurProject.ProjectView.CopyBillsToRecycleBin; DeleteBills; end; end else ZjDbaDelete.ExecuteTarget(ZjDbaDelete.GridDba.Grid); end; procedure TMainFrm.DeleteBills; var iBillsCount, iPreID, iLastID, iParentID: Integer; strList: TStringList; begin strList := TStringList.Create; try iBillsCount := CurProject.ProjectView.GetSelection(strList, iPreID, iLastID, iParentID); if iBillsCount > 0 then begin CurProject.BillsData.DeleteBills(strList, iPreID, iLastID, iParentID); end; finally strList.Free; end; end; procedure TMainFrm.ZjDbaDeleteExecute(Sender: TObject); begin // DeleteRecords; {对象方法需要传自身做为EAX} ExcuteTemplateMethod(@TMainFrm.DeleteRecords, Self); end; procedure TMainFrm.ZjDbaDeleteUpdate(Sender: TObject); var I: Integer; begin ZjDbaDelete.GridDba := nil; if Screen.ActiveControl is TZjGrid then begin with Screen.ActiveControl as TZJGrid do begin for I := 0 to HelpmateCount - 1 do if Helpmates[I] is TZjGridDba then begin ZjDbaDelete.GridDba := TZjGridDBA(Helpmates[I]); Break; end; end; end; ZjDbaDelete.Enabled := (ZjDbaDelete.GridDba <> nil) and ZjDbaDelete.GridDba.CanDelete and (jpManager.ActivePageIndex = 0); end; procedure TMainFrm.ClearCurNodeQty; begin if MessageQuest(sClearBillsQtyHint) then CurProject.BillsData.ClearCurNodeQty; end; {$IFDEF _beOnLine} procedure TMainFrm.SyncCheckServerErr(Sender: TObject); begin MessageWarning(0, sLoginFailed , sErrorTip, MB_OK); FCheckServerErr := True; Application.Terminate; end; {$ENDIF} procedure TMainFrm.btCheckServerExecute(Sender: TObject; Thread: TBMDExecuteThread; var Data: Pointer); begin {$IFDEF _beOnLine} if (not PHPWeb.CheckOnLine) then begin Thread.Synchronize(SyncCheckServerErr); end; {$ENDIF} end; procedure TMainFrm.btCheckServerTerminate(Sender: TObject; Thread: TBMDExecuteThread; var Data: Pointer); begin {$IFDEF _beOnLine} btCheckServer.Stop; {$ENDIF} end; procedure TMainFrm.tmrOnLineTimer(Sender: TObject); begin {$IFDEF _beOnLine} if not btCheckServer.Runing then btCheckServer.Start; {$ENDIF} end; procedure TMainFrm.FormClose(Sender: TObject; var Action: TCloseAction); begin {$IFDEF _beOnline} tmrOnLine.Enabled := False; if btCheckServer.Runing then btCheckServer.Stop; {$ENDIF} end; procedure TMainFrm.tmrEncryptTimer(Sender: TObject); begin {$IFDEF _beEncrypt} DelayCheckDog; CheckDogErrorCountAndHint; {$ENDIF} end; procedure TMainFrm.actnAuthorizeExecute(Sender: TObject); begin {$IFDEF _beEncrypt} Authorize; {$ELSE} MessageHint(Handle, sWelcomeText); {$ENDIF} end; procedure TMainFrm.actnRemoveZeroQtyExecute(Sender: TObject); begin if MessageQuest(sRemoveBillsZeorQty) then ExcuteTemplateMethod(@TMainFrm.RemoveZeroQtyBills, Self); end; procedure TMainFrm.RemoveZeroQtyBills; begin CurProject.BillsData.RemoveZeroQtyBills; end; procedure TMainFrm.acBillsManageExecute(Sender: TObject); begin jpManager.ActivePageIndex := Integer(jpManager.ActivePageIndex = 0); end; procedure TMainFrm.acBillsManageUpdate(Sender: TObject); begin TAction(Sender).Enabled := jtsBillsProjects.Tabs.Count > 0; end; procedure TMainFrm.actnImportQtyItemsExecute(Sender: TObject); var strFileName: string; begin if OpenFileDialog('导入', '.xls', '', 'Excel files (*.xls)|*.xls', strFileName) then begin Screen.Cursor := crHourGlass; BeginUserOperation(sImportExcel); try CurProject.ImportQtyItems(strFileName); finally EndUserOperation; Screen.Cursor := crDefault; end; end; end; procedure TMainFrm.actnProjectBillsExecute(Sender: TObject); begin Screen.Cursor := crHourGlass; LockWindowUpdate(Handle); CurProject.ProjectView.BeginUpdate; try xsbMain.SelectedItem := xsbMain.ActiveGroup.Items.Items[1]; CurProject.Navigation := 1; HideStdBillsForm; CurProject.BillsData.EnterXMJBills; CurProject.ProjectView.EnterXMJBills; CurProject.BillsData.IsProjectBills := True; CurProject.ProjectView.ActivePage := 2; finally CurProject.ProjectView.EndUpdate; LockWindowUpdate(0); Screen.Cursor := crDefault; end; end; procedure TMainFrm.actnQtyBillsExecute(Sender: TObject); begin Screen.Cursor := crHourGlass; LockWindowUpdate(Handle); try xsbMain.SelectedItem := xsbMain.ActiveGroup.Items.Items[2]; CurProject.Navigation := 2; HideStdBillsForm; if CurProject.ProjectView.CanRefreshQtyItem then // if CurProject.ProjectView.ActivePage = 0 then CurProject.DetailItemsDM.RefreshPQItems; CurProject.ProjectView.ActivePage := 1; CurProject.BillsData.LeaveXMJBills; CurProject.ProjectView.LeaveXMJBills; CurProject.BillsData.IsProjectBills := False; finally LockWindowUpdate(0); Screen.Cursor := crDefault; end; end; procedure TMainFrm.actnItemsExecute(Sender: TObject); begin Screen.Cursor := crHourGlass; LockWindowUpdate(Handle); try xsbMain.SelectedItem := xsbMain.ActiveGroup.Items.Items[0]; CurProject.Navigation := 0; CurProject.BillsData.LeaveXMJBills; CurProject.ProjectView.LeaveXMJBills; CurProject.BillsData.IsProjectBills := False; CurProject.ProjectView.ActivePage := 0; finally LockWindowUpdate(0); Screen.Cursor := crDefault; end; end; procedure TMainFrm.actnItemsUpdate(Sender: TObject); begin TAction(Sender).Enabled := Assigned(CurProject) and (jpManager.ActivePageIndex = 0) and (CurProject.ProjectView.ActivePage <> 0); end; procedure TMainFrm.actnQtyBillsUpdate(Sender: TObject); begin TAction(Sender).Enabled := Assigned(CurProject) and (jpManager.ActivePageIndex = 0) and (CurProject.ProjectView.ActivePage <> 1); end; procedure TMainFrm.actnProjectBillsUpdate(Sender: TObject); begin TAction(Sender).Enabled := Assigned(CurProject) and (jpManager.ActivePageIndex = 0) and (CurProject.ProjectView.ActivePage <> 2); end; procedure TMainFrm.xsbMainItemClick(Sender: TObject; Item: TdxSideBarItem); var s: string; begin case Item.Tag of 0: actnItems.Execute; 1: actnQtyBills.Execute; 2: actnProjectBills.Execute; {3: begin ShowReportForm(FBillsProjectManager.ActiveProject); xsbMain.SelectedItem := xsbMain.ActiveGroup.Items.Items[0]; actnItems.Execute; end;} 3: begin s := '此处报表预览功能已取消。' + #10#13 + '如需预览报表数据,请从“文件”菜单下的“导出”—>“导出三级清单”导出EXCEL数据;' + #10#13 + '如需打印报表,请将导出的EXCEL文件在EXCEL软件中设置打印区域和打印标题,或者将项目' + #10#13 + '导入到编审系统中进行打印报表。'; MessageHint(0, s); xsbMain.SelectedItem := xsbMain.Groups[0].Items[0]; actnItems.Execute; Exit; // FBillsProjectManager.ActiveProject.BillsData.Save; // DisplayReports(FBillsProjectManager.ActiveProject); end; end; end; procedure TMainFrm.actnStdBillsExecute(Sender: TObject); begin ShowStdBillsForm(0); end; procedure TMainFrm.actnLocateExecute(Sender: TObject); begin ShowStdBillsForm(1); end; procedure TMainFrm.dxBarButton17Click(Sender: TObject); begin jpManager.ActivePageIndex := 1; jtsBillsProjects.TabIndex := 0; end; procedure TMainFrm.actnRemoveZeroQtyUpdate(Sender: TObject); begin if Assigned(CurProject) and (CurProject.ProjectView = nil) then begin TAction(Sender).Enabled := Assigned(CurProject) and (jpManager.ActivePageIndex = 0); end else TAction(Sender).Enabled := Assigned(CurProject) and (jpManager.ActivePageIndex = 0) and (CurProject.ProjectView.JimPages.ActivePageIndex = 0); end; procedure TMainFrm.HideStdBillsForm; begin pnlDock.Visible := False; Splitter1.Visible := False; FStdBillsCtrl.StdBillsLibFrm.Hide; tbStdproject.Down := False; tbQtyItems.Down := False; end; procedure TMainFrm.actnStdBillsUpdate(Sender: TObject); begin if not Assigned(CurProject) then Exit; if not Assigned(CurProject.ProjectView) then Exit; TAction(Sender).Enabled := Assigned(CurProject) and (jpManager.ActivePageIndex = 0) and (CurProject.ProjectView.JimPages.ActivePageIndex = 0); if tbBillsToolView.Visible <> actnStdBills.Enabled then tbBillsToolView.Visible := actnStdBills.Enabled; end; procedure TMainFrm.acExitUpdate(Sender: TObject); begin if not tbBillsToolView.Visible then begin actnStdBills.Update; end; end; procedure TMainFrm.actnMergeProjectExecute(Sender: TObject); var sProjName, sFullName: string; sgsProjectList: TStrings; PctConverter: TProjectConverter; bMergeByCode: Boolean; begin sgsProjectList := TStringList.Create; try { 只有标段才汇总 } if jpManager.ActivePageIndex = 0 then begin // 从打开的当前项目取标段 FProjectFileManager.GetNameByID(CurProject.ParentID, sProjName, sFullName); FProjectFileManager.GetBidLotsByID(CurProject.ParentID, sgsProjectList); FProjectFileManager.LocateBuildProject(CurProject.ParentID); end else begin // 从项目管理取标段 FProjectFileManager.GetNameByID(FProjectFileManager.GetProjID(1), sProjName, sFullName); FProjectFileManager.GetBidLotsByID(FProjectFileManager.GetProjID(1), sgsProjectList); end; if not ExportBuildProject(sProjName, True) then Exit; if SelectProjectForm(sgsProjectList, sProjName, bMergeByCode) then begin // sFullName : BuildProject's Name CreateProgressForm(0, '开始合并!'); AddProgressForm(5, '正在收集信息…'); BeginUserOperation(sMergeProject); Screen.Cursor := crHourGlass; PctConverter := TProjectConverter.Create(FBillsProjectManager, False, bMergeByCode); try CreateProgressForm(15, '正在合并清单!'); PctConverter.MergeNew(sgsProjectList, sFullName); //PctConverter.Merge(sgsProjectList, sFullName); finally PctConverter.Free; Screen.Cursor := crDefault; EndUserOperation; end; CloseProgressForm; end; finally sgsProjectList.Free; end; end; procedure TMainFrm.actnMergeProjectUpdate(Sender: TObject); begin TAction(Sender).Enabled := Assigned(CurProject) and (jpManager.ActivePageIndex = 0) and (CurProject.Flag = 2) or FileManagerFrame.zgBidLot.Focused; end; procedure TMainFrm.actnSplitProjectUpdate(Sender: TObject); begin TAction(Sender).Enabled := Assigned(CurProject) and (jpManager.ActivePageIndex = 0) and (CurProject.Flag = 1) or FileManagerFrame.zgGatherBid.Focused and (FProjectFileManager.GetProjID(1) <> 1); end; procedure TMainFrm.actnSplitProjectExecute(Sender: TObject); var sProjName, sFullName: string; PctConverter: TProjectConverter; begin if jpManager.ActivePageIndex = 0 then begin // 从打开的当前项目取 FProjectFileManager.GetNameByID(CurProject.ID, sProjName, sFullName); FProjectFileManager.LocateBuildProject(CurProject.ID); end else begin // 从项目管理取 FProjectFileManager.GetNameByID(FProjectFileManager.GetProjID(1), sProjName, sFullName); end; { Export BuildProject } if not ExportBuildProject(sProjName, False) then Exit; BeginUserOperation(sSplitProject); Screen.Cursor := crHourGlass; PctConverter := TProjectConverter.Create(FBillsProjectManager, True, False); try PctConverter.Split(sFullName); finally PctConverter.Free; Screen.Cursor := crDefault; EndUserOperation; end; end; function TMainFrm.ExportBuildProject(const aShortName: string; aIsMerge: Boolean): Boolean; var sFileName: string; sHintText: string; begin if aIsMerge then sHintText := sMergeProjectHint else sHintText := sSplitProjectHint; Result := True; if not MessageQuest(sHintText) then begin if SaveFileDialog(sExportTip, '.pcf', aShortName, '清单编制 (*.pcf)|*.pcf', sFileName) then begin FProjectFileManager.ExportProjects(sFileName, 1); end else Result := False; end; end; procedure TMainFrm.FileManagerFrameactnExportProjectUpdate( Sender: TObject); begin TAction(Sender).Enabled := jpManager.ActivePageIndex = 1; end; procedure TMainFrm.actnShowBidLotAliasExecute(Sender: TObject); var sgsBidLot: TStrings; BidAliasForm: TBidAliasForm; begin sgsBidLot := TStringList.Create; BidAliasForm := TBidAliasForm.Create(nil); try BidAliasForm.Project := CurProject; SingleObjectAggregate.BidLotDM.Project := CurProject; FProjectFileManager.GetBidLotsByID(CurProject.ID, sgsBidLot); SingleObjectAggregate.BidLotDM.RefreshBidLot(sgsBidLot); BidAliasForm.DataSet := SingleObjectAggregate.BidLotDM.BidLotDB; BidAliasForm.BuildProjectName := CurProject.ProjectName; BidAliasForm.ShowModal; SingleObjectAggregate.BidLotDM.SyncProjectView; finally sgsBidLot.Free; BidAliasForm.Free; end; end; procedure TMainFrm.actnShowBidLotAliasUpdate(Sender: TObject); begin TAction(Sender).Enabled := Assigned(CurProject) and (jpManager.ActivePageIndex = 0) and (CurProject.Flag = 1); end; procedure TMainFrm.RefreshSplitBidLot(aProject: TObject); var sgsBidLot: TStrings; begin sgsBidLot := TStringList.Create; try SingleObjectAggregate.BidLotDM.Project := aProject; FProjectFileManager.GetBidLotsByID(TProject(aProject).ID, sgsBidLot); SingleObjectAggregate.BidLotDM.RefreshBidLot(sgsBidLot); SingleObjectAggregate.BidLotDM.SyncProjectView; finally sgsBidLot.Free; end; end; procedure TMainFrm.SetCaption(const aTabName: string); begin {$IFDEF _beOnLine} Caption := SoftWareName_OnLine + ' - [' + aTabName + ']'; {$ELSE} {$IFDEF _beCommon} Caption := SoftWareName_ZY_Common + ' - [' + aTabName + ']'; {$ELSE} {$IFDEF _beEncrypt} Caption := SoftWareName_ZY + ' - [' + aTabName + ']'; {$ELSE} Caption := SoftWareName_XX + ' - [' + aTabName + ']'; {$ENDIF} {$ENDIF} {$ENDIF} end; procedure TMainFrm.actnExportStdItemsExecute(Sender: TObject); begin ExportStdItems(1); end; procedure TMainFrm.ExportStdItems(aFileFlag: Integer); var sOldLibName: string; sNewLibName: string; begin if aFileFlag = 1 then sOldLibName := jtsBillsProjects.Tabs[jtsBillsProjects.TabIndex] + '分项清单' else sOldLibName := jtsBillsProjects.Tabs[jtsBillsProjects.TabIndex] + '工程量清单'; sNewLibName := sOldLibName; while ScInputQuery('标准清单', '清单名称', sNewLibName) do begin if not CheckSpecialChar(sNewLibName) then begin if not FStdBillsCtrl.FXQDManager.CheckLibExists(sNewLibName) then begin Application.ProcessMessages; BeginUserOperation(sExportStdLib); Screen.Cursor := crHourGlass; try FStdBillsCtrl.FXQDManager.FileFlag := aFileFlag; FStdBillsCtrl.FXQDManager.AddFile(sNewLibName); FStdBillsCtrl.StdBillsLibFrm.AddLib(sNewLibName, aFileFlag); finally Screen.Cursor := crDefault; EndUserOperation; end; Break; end else begin sNewLibName := sOldLibName; MessageWarning(Screen.ActiveForm.Handle, sSameFileName); end; end else begin sNewLibName := sOldLibName; MessageWarning(Screen.ActiveForm.Handle, sSpecialChar); end; end; end; procedure TMainFrm.actnManagerStdItemsExecute(Sender: TObject); var StdLibsManagerForm: TStdLibsManagerForm; begin StdLibsManagerForm := TStdLibsManagerForm.Create(nil); try StdLibsManagerForm.StdBillsCtrl := FStdBillsCtrl; StdLibsManagerForm.ShowModal; finally StdLibsManagerForm.Free; end; end; procedure TMainFrm.actnSelectGatherNodeByNameUpdate(Sender: TObject); begin TAction(Sender).Enabled := Assigned(CurProject) and (jpManager.ActivePageIndex = 0) and (CurProject.ProjectView.JimPages.ActivePageIndex = 2); end; procedure TMainFrm.actnSelectGatherNodeByNameExecute(Sender: TObject); begin ExcuteTemplateMethod(@TMainFrm.SelectGatherNodeByName, Self); end; procedure TMainFrm.AbolishAllGatherChoose; begin CurProject.ProjectView.ControlBillsTreeRT(False); CurProject.ProjectView.ControlXMJTreeView(False); try CurProject.BillsData.SelectGatherNode(CurProject.BillsData.XMJBillsTree.FirstNode, False); finally CurProject.ProjectView.ControlBillsTreeRT(True); CurProject.ProjectView.ControlXMJTreeView(True); end; end; procedure TMainFrm.SelectGatherNodeByName; begin CurProject.ProjectView.ControlBillsTreeRT(False); CurProject.ProjectView.ControlXMJTreeView(False); try CurProject.BillsData.SelectGatherNode(CurProject.BillsData.XMJBillsTree.FirstNode, True); finally CurProject.ProjectView.ControlXMJTreeView(True); CurProject.ProjectView.ControlBillsTreeRT(True); end; end; procedure TMainFrm.actnAbolishAllGatherChooseExecute(Sender: TObject); begin ExcuteTemplateMethod(@TMainFrm.AbolishAllGatherChoose, Self); end; procedure TMainFrm.actnCalculateAllExecute(Sender: TObject); begin ExcuteTemplateMethod(@TMainFrm.CalculateAll, Self); end; procedure TMainFrm.CalculateAll; begin CurProject.ProjectView.ControlBillsTreeRT(False); CurProject.ProjectView.ControlXMJTreeView(False); try CurProject.BillsData.CalculateAll; finally CurProject.ProjectView.ControlXMJTreeView(True); CurProject.ProjectView.ControlBillsTreeRT(True); end; end; procedure TMainFrm.actnUndoTextExecute(Sender: TObject); begin if CurProject.ProjectView.zgBills.Focused and CurProject.BillsData.CanUnDoBillsText then CurProject.BillsData.UnDoBillsText else if CurProject.ProjectView.zgDrawingQuantity.Focused and CurProject.BillsData.CanUnDoDrawQtyText then CurProject.BillsData.UnDoDrawQtyText; end; procedure TMainFrm.actnUndoTextUpdate(Sender: TObject); begin TAction(Sender).Enabled := Assigned(CurProject) and ((CurProject.ProjectView.zgBills.Focused and CurProject.BillsData.CanUnDoBillsText) or (CurProject.ProjectView.zgDrawingQuantity.Focused and CurProject.BillsData.CanUnDoDrawQtyText)); end; procedure TMainFrm.actnLocateFromProjectBillsExecute(Sender: TObject); begin CurProject.BillsData.LocateProjectBills; actnItems.Execute; end; procedure TMainFrm.actnLocateFromQtyBillsExecute(Sender: TObject); begin CurProject.DetailItemsDM.LocateBills; actnItems.Execute; end; procedure TMainFrm.actnLocateFromQtyBillsUpdate(Sender: TObject); begin TAction(Sender).Enabled := Assigned(CurProject) and CurProject.DetailItemsDM.CanLocateBills; end; procedure TMainFrm.GetGatherProjects(ASL: TStringList); var sProjName, sFullName: string; begin ASL.Clear; if CurProject.Flag <> 1 then begin FProjectFileManager.GetNameByID(CurProject.ID, sProjName, sFullName); FProjectFileManager.GetBidLotsByID(CurProject.ID, ASL); end; end; procedure TMainFrm.xbUpdateMemoClick(Sender: TObject); var sPath: string; begin sPath := ExtractFilePath(Application.ExeName); ShellExecute(Handle, 'open', PChar(sPath + '清单编制升级说明.txt'), nil, nil, SW_SHOW); end; procedure TMainFrm.actnShowGradeViewUpdate(Sender: TObject); begin TAction(Sender).Enabled := Assigned(CurProject) and (jpManager.ActivePageIndex = 0); if Assigned(CurProject) then begin TAction(Sender).Checked := CurProject.ProjectView.IsGradeView; xbGradeView.Down := CurProject.ProjectView.IsGradeView; end; end; procedure TMainFrm.actnShowGradeViewExecute(Sender: TObject); begin actnShowGradeView.Checked := not actnShowGradeView.Checked; CurProject.ProjectView.SwitchBillsGradeView(actnShowGradeView.Checked); end; procedure TMainFrm.actnGradeExecute(Sender: TObject); begin {$IFNDEF _beEncrypt} MessageHint(0, '对不起,此版本不提供评分功能,请购买正式版。'); Exit; {$ENDIF} Screen.Cursor := crHourGlass; try CurProject.BillsData.Grade; AddProgressForm(1, '正在进行评分统计…'); CurProject.BillsData.Stat; finally Screen.Cursor := crDefault; CloseProgressForm; end; end; procedure TMainFrm.actnStatExecute(Sender: TObject); begin {$IFNDEF _beEncrypt} MessageHint(0, '对不起,此版本不提供评分功能,请购买正式版。'); Exit; {$ENDIF} Screen.Cursor := crHourGlass; try CurProject.BillsData.Stat; finally Screen.Cursor := crDefault; CloseProgressForm; end; end; procedure TMainFrm.actnClearUserFlagsExecute(Sender: TObject); begin Screen.Cursor := crHourGlass; try CurProject.BillsData.ClearUserFlags; finally Screen.Cursor := crDefault; end; end; procedure TMainFrm.actnGradeUpdate(Sender: TObject); begin TAction(Sender).Enabled := Assigned(CurProject) and (jpManager.ActivePageIndex = 0); end; procedure TMainFrm.actnStatUpdate(Sender: TObject); begin TAction(Sender).Enabled := Assigned(CurProject) and (jpManager.ActivePageIndex = 0); end; procedure TMainFrm.actnClearUserFlagsUpdate(Sender: TObject); begin TAction(Sender).Enabled := Assigned(CurProject) and (jpManager.ActivePageIndex = 0); end; procedure TMainFrm.xbQuantityErrorClick(Sender: TObject); begin CurProject.BillsData.AddError(ecQuantityError, 1); end; procedure TMainFrm.xbLostLineClick(Sender: TObject); var vLostKind: TErrorCategory; iCount: Integer; begin if ExecCustomSetErrorForm(vLostKind, iCount) then begin if iCount = 0 then Exit; CurProject.BillsData.AddError(vLostKind, iCount); end; end; procedure TMainFrm.xbIgnoreCodeClick(Sender: TObject); begin CurProject.BillsData.CancelError(ecCodeError); CurProject.BillsData.CancelError(ecB_CodeError); end; procedure TMainFrm.xbIgnoreNameClick(Sender: TObject); begin CurProject.BillsData.CancelError(ecNameError); end; procedure TMainFrm.xbIgnoreUnitsClick(Sender: TObject); begin CurProject.BillsData.CancelError(ecUnitError); end; procedure TMainFrm.xbIgnoreQuantityClick(Sender: TObject); begin CurProject.BillsData.CancelError(ecQuantityError); end; procedure TMainFrm.xbIgnoreSuperscaleClick(Sender: TObject); begin CurProject.BillsData.CancelError(ecSuperscale); end; procedure TMainFrm.xbIgnoreRepeatLineClick(Sender: TObject); begin CurProject.BillsData.CancelError(ecRepeatLine); end; procedure TMainFrm.xbIgnoreLostPreClick(Sender: TObject); begin CurProject.BillsData.CancelError(ecLostPreSibling); end; procedure TMainFrm.xbIgnoreLostNextClick(Sender: TObject); begin CurProject.BillsData.CancelError(ecLostNextSibling); end; procedure TMainFrm.xbIgnoreLostChildClick(Sender: TObject); begin CurProject.BillsData.CancelError(ecLostChildren); end; procedure TMainFrm.xbNameErrorClick(Sender: TObject); begin CurProject.BillsData.AddError(ecNameError, 1); end; procedure TMainFrm.xbUnitsErrorClick(Sender: TObject); begin CurProject.BillsData.AddError(ecUnitError, 1); end; procedure TMainFrm.xbCodeErrorClick(Sender: TObject); begin with CurProject.BillsData do begin case BillCategory(cdsOrgBillsCode.AsString, cdsOrgBillsB_Code.AsString) of bcYSXMJ: AddError(ecCodeError, 1); bcQDZMH: AddError(ecB_CodeError, 1); end; end; end; procedure TMainFrm.xbSuperscaleClick(Sender: TObject); begin CurProject.BillsData.AddError(ecSuperscale, 1); end; procedure TMainFrm.xbRepeatLineClick(Sender: TObject); begin CurProject.BillsData.AddError(ecRepeatLine, 1); end; procedure TMainFrm.actnGradeCurItemExecute(Sender: TObject); begin {$IFNDEF _beEncrypt} MessageHint(0, '对不起,此版本不提供评分功能,请购买正式版。'); Exit; {$ENDIF} Screen.Cursor := crHourGlass; try CurProject.BillsData.Grade(False); AddProgressForm(1, '正在进行评分统计…'); CurProject.BillsData.Stat; finally Screen.Cursor := crDefault; CloseProgressForm; end; end; procedure TMainFrm.actnGradeCurItemUpdate(Sender: TObject); begin TAction(Sender).Enabled := Assigned(CurProject) and (jpManager.ActivePageIndex = 0); end; procedure TMainFrm.CloseProjectByID(AID: Integer); begin jtsBillsProjects.Tabs.Delete(AID + 1); jpsBillsProjects.Pages.Delete(AID); jtsBillsProjects.TabIndex := FBillsProjectManager.ActiveIndex + 1; jpsBillsProjects.ActivePageIndex := FBillsProjectManager.ActiveIndex; if FBillsProjectManager.ProjectCount = 0 then begin SetCaption('项目管理'); jpManager.ActivePageIndex := 1; end else SetCaption(FBillsProjectManager.ActiveProject.ProjectName); end; procedure TMainFrm.actnClearAllUnitPriceExecute(Sender: TObject); var bCalc: Boolean; begin Screen.Cursor := crHourGlass; try bCalc := ScConfigInfo.RealTimeCalc; ScConfigInfo.RealTimeCalc := False; CurProject.BillsData.ClearAllUnitPrices; CurProject.BillsData.CalculateAll; finally ScConfigInfo.RealTimeCalc := bCalc; Screen.Cursor := crDefault; end; end; procedure TMainFrm.actnClearAllUnitPriceUpdate(Sender: TObject); begin TAction(Sender).Enabled := Assigned(CurProject) and (jpManager.ActivePageIndex = 0); end; procedure TMainFrm.actnGatherBillsQuantityExecute(Sender: TObject); begin Screen.Cursor := crHourGlass; try CurProject.BillsData.GatherBillsQuantity; finally Screen.Cursor := crDefault; end; end; procedure TMainFrm.actClearUnitUpdate(Sender: TObject); begin TAction(Sender).Enabled := Assigned(CurProject) and (jpManager.ActivePageIndex = 0) and (CurProject.ProjectView.JimPages.ActivePageIndex = 0); end; procedure TMainFrm.actClearUnitExecute(Sender: TObject); var s: string; begin if MessageQuest('确定要删除清单子目中非叶子节点的单位?') then CurProject.BillsData.DeleteLastParentUnit(1); end; procedure TMainFrm.actnShowRecycleBinExecute(Sender: TObject); var RecycleBinForm: TRecycleBinForm; begin RecycleBinForm := TRecycleBinForm.Create(nil); try RecycleBinForm.Project := GetAcitveProject; RecycleBinForm.ShowModal; finally RecycleBinForm.Free; end; end; procedure TMainFrm.dxStdXiangClick(Sender: TObject); begin Screen.Cursor := crHourGlass; try StdBillsCtrl.ShowLevel(TdxBarButton(Sender).Tag); finally Screen.Cursor := crDefault; end; end; // Added by GiLi 2012-3-20 9:53:16 // 是否可以定位当前节点到标准清单所在的位置 procedure TMainFrm.actnLocateAtStdBillsUpdate(Sender: TObject); begin if not Assigned(StdBillsCtrl) then begin actnLocateAtStdBills.Enabled := False; end else begin actnLocateAtStdBills.Enabled := StdBillsCtrl.CanLocateAtStdBills; end; end; procedure TMainFrm.actnLocateAtStdBillsExecute(Sender: TObject); begin StdBillsCtrl.LocateAtStdBills; end; procedure TMainFrm.FormCloseQuery(Sender: TObject; var CanClose: Boolean); var MQResult: Integer; I: Integer; project: TProject; begin if FBillsProjectManager.ProjectList.Count > 0 then begin MQResult := MessageQuest(Handle, '您没有保存文件,是否保存?', '询问', MB_YESNOCANCEL); case MQResult of ID_YES: begin // 这里注释掉,原因是放在TProjectManager.Destroy中去处理,这样更符合逻辑 {for I := FBillsProjectManager.ProjectList.Count - 1 downto 0 do begin project := TProject(FBillsProjectManager.ProjectList[I]); if project.NeedSaveDatabase then begin if MessageBox(0, PChar(Format('项目[%s]是否保存?', [project.ProjectName])), PChar('询问'), MB_YESNO or MB_ICONQUESTION or MB_TOPMOST) = IDYES then project.Save(False); end; project.Free; end; FBillsProjectManager.ProjectList.Free;} FIsSave := True; CanClose := True; end; ID_NO: begin // 这里注释掉,原因是放在TProjectManager.Destroy中去处理,这样更符合逻辑 // 为防止内存泄露加上下面代码 {for I := FBillsProjectManager.ProjectList.Count - 1 downto 0 do begin project := TProject(FBillsProjectManager.ProjectList[I]); project.Free; end; FBillsProjectManager.ProjectList.Free; } FIsSave := False; CanClose := True; end; IDCANCEL: CanClose := False; end; end else CanClose := True; end; procedure TMainFrm.acCopyBillsUpdate(Sender: TObject); begin TAction(Sender).Enabled := Assigned(CurProject) and CurProject.ProjectView.IsCanCopyBills; end; procedure TMainFrm.ZjGridPasteUpdate(Sender: TObject); begin if Assigned(CurProject) then ZjGridPaste.Enabled := CurProject.ProjectView.IsCanGridPaste else ZjGridPaste.Enabled := True; end; procedure TMainFrm.actnAddLeafBillsExecute(Sender: TObject); begin AddLeafBills(CurProject.BillsData); end; procedure TMainFrm.actnBatchReplaceBillsDataExecute(Sender: TObject); begin BatchReplaceBillsData(CurProject.BillsData); end; procedure TMainFrm.actnBatchReplaceBillsDataUpdate(Sender: TObject); begin TAction(Sender).Enabled := CurProject.BillsData.cdsBillsB_Code.AsString <> ''; end; procedure TMainFrm.actnExportFlatExcelExecute(Sender: TObject); var strFileName: string; begin if SaveFileDialog('导出0号台账平面表', '.xls', '', 'Excel files (*.xls)|*.xls', strFileName) then begin Screen.Cursor := crHourGlass; BeginUserOperation(sExportExcel); try CurProject.ExportFlatExcel(strFileName); finally EndUserOperation; Screen.Cursor := crDefault; end; end; end; initialization ShortDateFormat := 'yyyy-mm-dd'; LongDateFormat := 'yyyy-mm-dd'; DateSeparator := '-'; TimeSeparator := ':'; ShortTimeFormat := 'H:mm:ss'; end.