unit StdLibsManagerFrm; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ImgList, ComCtrls, ToolWin, ZJGrid, ScStdBillsCtrl, ActnList, Menus, ConstMethodUnit, ConstVarUnit; type TStdLibsManagerForm = class(TForm) zgLibs: TZJGrid; ToolBar1: TToolBar; ToolButton1: TToolButton; ToolButton2: TToolButton; ToolButton3: TToolButton; ToolButton4: TToolButton; ilstProject: TImageList; ActionList: TActionList; PopupMenu: TPopupMenu; actnDelete: TAction; actnRename: TAction; actnImport: TAction; actnExport: TAction; actnDelete1: TMenuItem; actnRename1: TMenuItem; actnImport1: TMenuItem; actnExport1: TMenuItem; actnCloseLib: TAction; procedure FormCreate(Sender: TObject); procedure actnDeleteExecute(Sender: TObject); procedure actnRenameExecute(Sender: TObject); procedure zgLibsCellTextChanging(Sender: TObject; const ACoord: TPoint; var NewValue: String; var Accept: Boolean); procedure actnDeleteUpdate(Sender: TObject); procedure actnCloseLibExecute(Sender: TObject); procedure actnImportExecute(Sender: TObject); procedure actnExportExecute(Sender: TObject); private { Private declarations } FStdBillsCtrl: TStdBillsCtrl; FLoading: Boolean; procedure InitLibs; procedure AddNewLibToGrid(const aLibName: string; aFileFlag: Integer); procedure ReNameLib(const aOldName, aNewName: string; aFileFlag: Integer); procedure SetStdBillsCtrl(const Value: TStdBillsCtrl); public { Public declarations } property StdBillsCtrl: TStdBillsCtrl read FStdBillsCtrl write SetStdBillsCtrl; end; implementation uses FXQDManagerUnit, NewProjectFrm; {$R *.dfm} procedure TStdLibsManagerForm.FormCreate(Sender: TObject); begin FLoading := True; zgLibs.ColWidths[1] := 220; zgLibs.ColWidths[2] := 120; zgLibs.TextAligns.Cols[1] := gaCenterLeft; zgLibs.TextAligns.Cols[2] := gaCenterCenter; zgLibs.Cells[1, 0].Text := '名称'; zgLibs.Cells[2, 0].Text := '类型'; zgLibs.Cells[1, 0].TextAlign := gaCenterCenter; FLoading := False; end; procedure TStdLibsManagerForm.InitLibs; var I: Integer; sLib: string; sFlag: string; begin FLoading := True; with FStdBillsCtrl.FXQDManager.ConfigFileManager do for I := 0 to Libs.Count - 1 do begin sLib := Libs[I]; sFlag := Copy(sLib, 1, Pos('.', sLib) - 1); sLib := Copy(sLib, Pos('.', sLib) + 1, Length(sLib)); zgLibs.Cells[1, I + 1].Text := sLib; if sFlag = '1' then zgLibs.Cells[2, I + 1].Text := '分项清单'; end; FLoading := False; end; procedure TStdLibsManagerForm.SetStdBillsCtrl(const Value: TStdBillsCtrl); begin FStdBillsCtrl := Value; if FStdBillsCtrl <> nil then InitLibs; end; procedure TStdLibsManagerForm.actnDeleteExecute(Sender: TObject); var iFileFlag: Integer; sLibName: string; begin if not MessageQuest(sDeleteLib) then Exit; sLibName := zgLibs.Cells[1, zgLibs.CurRow].Text; if sLibName = '' then Exit; if SameText(FStdBillsCtrl.StdBillsLibFrm.OpenLibName, sLibName) then begin MessageError(Screen.ActiveForm.Handle, '文件已被打开,请先关闭文件再删除!'); Exit; end; if SameText(zgLibs.Cells[2, zgLibs.CurRow].Text, '分项清单') then iFileFlag := 1; FStdBillsCtrl.FXQDManager.DeleteFile(sLibName); FStdBillsCtrl.StdBillsLibFrm.DeleteLib(sLibName, iFileFlag); zgLibs.DeleteRow(zgLibs.CurRow); end; procedure TStdLibsManagerForm.actnRenameExecute(Sender: TObject); var iFileFlag: Integer; sOldLibName: string; sNewLibName: string; begin sOldLibName := zgLibs.Cells[1, zgLibs.CurRow].Text; if sOldLibName = '' then Exit; if SameText(FStdBillsCtrl.StdBillsLibFrm.OpenLibName, sOldLibName) then begin MessageError(Screen.ActiveForm.Handle, '文件已被打开,请先关闭文件再重命名!'); Exit; end; if SameText(zgLibs.Cells[2, zgLibs.CurRow].Text, '分项清单') then iFileFlag := 1; sNewLibName := sOldLibName; while ScInputQuery('标准清单', '清单名称', sNewLibName) do begin if not CheckSpecialChar(sNewLibName) then begin if not FStdBillsCtrl.FXQDManager.CheckLibExists(sNewLibName) then begin zgLibs.Cells[1, zgLibs.CurRow].Text := sNewLibName; ReNameLib(sOldLibName, sNewLibName, iFileFlag); 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 TStdLibsManagerForm.zgLibsCellTextChanging(Sender: TObject; const ACoord: TPoint; var NewValue: String; var Accept: Boolean); var sOldLibName: string; iFileFlag: Integer; begin if FLoading then Exit; Accept := False; if ACoord.X <> 1 then Exit; sOldLibName := zgLibs.Cells[1, zgLibs.CurRow].Text; if sOldLibName = '' then Exit; if SameText(zgLibs.Cells[2, zgLibs.CurRow].Text, '分项清单') then iFileFlag := 1; if not CheckSpecialChar(NewValue) then begin if not FStdBillsCtrl.FXQDManager.CheckLibExists(NewValue) then begin Accept := True; ReNameLib(sOldLibName, NewValue, iFileFlag); end else MessageWarning(Screen.ActiveForm.Handle, sSameFileName); end else MessageWarning(Screen.ActiveForm.Handle, sSpecialChar); end; procedure TStdLibsManagerForm.ReNameLib(const aOldName, aNewName: string; aFileFlag: Integer); begin FStdBillsCtrl.FXQDManager.RenameFile(aOldName, aNewName); FStdBillsCtrl.StdBillsLibFrm.ReNameLib(aOldName, aNewName, aFileFlag); end; procedure TStdLibsManagerForm.actnDeleteUpdate(Sender: TObject); begin TAction(Sender).Enabled := zgLibs.Cells[1, zgLibs.CurRow].Text <> ''; end; procedure TStdLibsManagerForm.actnCloseLibExecute(Sender: TObject); var iFileFlag: Integer; begin if SameText(zgLibs.Cells[2, zgLibs.CurRow].Text, '分项清单') then iFileFlag := 1; Screen.Cursor := crHourGlass; try FStdBillsCtrl.StdBillsLibFrm.CloseLib(iFileFlag); finally Screen.Cursor := crDefault; end; end; procedure TStdLibsManagerForm.actnImportExecute(Sender: TObject); var iFileFlag: Integer; sFileName: string; sLibName: string; sNewLibName: string; begin if OpenFileDialog('导入', '.dat', '', 'files (*.dat)|*.dat', sFileName) then begin sLibName := ExtractFileNameWithoutExt(sFileName); sNewLibName := sLibName; while InputStdLibName(sNewLibName, iFileFlag) do begin if sNewLibName <> '' then begin if not FStdBillsCtrl.FXQDManager.CheckLibExists(sNewLibName) then begin FStdBillsCtrl.FXQDManager.ImportLib(sFileName, sNewLibName); FStdBillsCtrl.StdBillsLibFrm.AddLib(sNewLibName, iFileFlag); AddNewLibToGrid(sNewLibName, iFileFlag); Break; end else begin sNewLibName := sLibName; MessageError(Screen.ActiveForm.Handle, sSameFileName); end; end else begin sNewLibName := sLibName; MessageError(Screen.ActiveForm.Handle, sNameNotNull); end; end; end; end; procedure TStdLibsManagerForm.AddNewLibToGrid(const aLibName: string; aFileFlag: Integer); var iRow: Integer; begin FLoading := True; iRow := FStdBillsCtrl.FXQDManager.ConfigFileManager.Libs.Count + zgLibs.FixedRowCount - 1; zgLibs.Cells[1, iRow].Text := aLibName; if aFileFlag = 1 then zgLibs.Cells[2, iRow].Text := '分项清单' else zgLibs.Cells[2, iRow].Text := '工程量清单'; FLoading := False; end; procedure TStdLibsManagerForm.actnExportExecute(Sender: TObject); var sLibName: string; sFileName: string; begin sLibName := zgLibs.Cells[1, zgLibs.CurRow].Text; if SaveFileDialog(sExportTip, '.dat', sLibName, '清单编制 (*.dat)|*.dat', sFileName) then begin sLibName := FStdBillsCtrl.FXQDManager.GenerateLibName(sLibName); FStdBillsCtrl.FXQDManager.ExportLib(sLibName, sFileName); end; end; end.