ProjectFileManager.pas 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616
  1. unit ProjectFileManager;
  2. interface
  3. uses
  4. DB,
  5. Classes,
  6. Windows,
  7. SysUtils,
  8. CustomDoc,
  9. ConstVarUnit,
  10. ConstTypeUnit,
  11. ConstMethodUnit,
  12. ScProjectManager,
  13. ProjectPropertyUnit,
  14. ProjectManagerDM,
  15. FileOprUnit,
  16. ExportDecorateUnit,
  17. SingleObjectAggregateUnit,
  18. ImportDecorate;
  19. type
  20. TProjectFileMgr = class
  21. private
  22. FFileOpr : TFileOpr;
  23. FProjectProperty : TProjectProperty;
  24. FProjectMgrDM : TProjectMgrDM;
  25. FProjectManager : TProjectManager;
  26. FCloseProjectProc : TNotifyEvent;
  27. FOpenProjectProc : TOpenProjectProc;
  28. FImportFlag : Integer;
  29. function GetBidLotProjectDS: TDataSet;
  30. function GetGatherProjectDS: TDataSet;
  31. function GetGatherBidDS: TDataSet;
  32. function CreateNewFile(const aFileName: string; var aNewName: string): Boolean;
  33. function GetProjectFullPath(aProjKind: Integer): string;
  34. procedure OpenDB;
  35. function GetProjectPropertyFilePath(aProjKind: Integer; var aFilePath: string): Boolean;
  36. procedure ReadProjectProperty(const aFilePath: string);
  37. procedure CheckProjectOpen(const aFilePath: string);
  38. procedure AddProject(aProjFile: TProjectFile; aProjList: TList; var aFullPath: string);
  39. procedure GetProjectFile(aProjID: Integer; aProjList: TList);
  40. public
  41. constructor Create;
  42. destructor Destroy; override;
  43. function CreateNewProjectOpen(const aShortName: string; aProjType, aProjKind: Integer): string;
  44. function CreateNewProjectForOneKey(const aShortName: string; var aID: Integer; aGatherID: Integer; aRaise: Boolean = True): string;
  45. function CreateNewProject(const aShortName: string; var aID: Integer; aGatherID: Integer): string;
  46. procedure OpenProject(aProjType, aProjKind: Integer);
  47. procedure DeleteProject(aProjKind: Integer);
  48. { Refresh ProjectProperty }
  49. procedure RefreshProjectProperty(aProjKind: Integer);
  50. procedure WriteProjectProperty;
  51. function GetProjectFlag(aID: Integer): Integer;
  52. { Locate }
  53. procedure LocateBuildProject(aID: Integer);
  54. function GetProjectName(aProjKind: Integer): string;
  55. function GetParentID(aID: Integer): Integer;
  56. function GetProjID(aProjKind: Integer): Integer;
  57. procedure RenameProject(aProjKind: Integer; const aNewProjName: string);
  58. { import and export }
  59. procedure ImportProject(const aShortName, aFullPath: string; aProjKind: Integer);
  60. procedure ExportProject(const aNewProjName: string; aProjKind: Integer; aIsSingle: Boolean);
  61. procedure ImportProjects(const aFileName: string);
  62. procedure ExportProjects(const aFileName: string; aProjKind: Integer);
  63. { buildproject list }
  64. procedure GetBuildProjectList(aString: TStrings);
  65. procedure GetNameByID(aID: Integer; var aProjName, aFullName: string);
  66. procedure GetBidLotsByID(aID: Integer; aStrings: TStrings);
  67. { get build project recordno }
  68. function GetBuildProjRecordNo: Integer;
  69. property GatherProjectDS: TDataSet read GetGatherProjectDS;
  70. property BidLotProjectDS: TDataSet read GetBidLotProjectDS;
  71. property GatherBidDS: TDataSet read GetGatherBidDS;
  72. property ProjectProperty: TProjectProperty read FProjectProperty write FProjectProperty;
  73. property ProjectManager: TProjectManager read FProjectManager write FProjectManager;
  74. property CloseProjectProc: TNotifyEvent read FCloseProjectProc write FCloseProjectProc;
  75. property OpenProjectProc: TOpenProjectProc read FOpenProjectProc write FOpenProjectProc;
  76. property ProjectMgrDM: TProjectMgrDM read FProjectMgrDM;
  77. property FileOpr: TFileOpr read FFileOpr;
  78. end;
  79. implementation
  80. { TProjectFileMgr }
  81. procedure TProjectFileMgr.AddProject(aProjFile: TProjectFile;
  82. aProjList: TList; var aFullPath: string);
  83. var
  84. iLoop: Integer;
  85. iFlag: Integer;
  86. iGatherID: Integer;
  87. strUnknowName: string;
  88. strFullName: string;
  89. sNewProjName: string;
  90. begin
  91. repeat
  92. strUnknowName := GetRandomName;
  93. until not FProjectMgrDM.CheckUnknowNameExists(strUnknowName);
  94. aFullPath := '我的清单\' + strUnknowName + '.smb';
  95. iGatherID := 0;
  96. for iLoop := 0 to aProjList.Count - 1 do
  97. begin
  98. if TProjectFile(aProjList.List^[iLoop]).ID = aProjFile.GatherID then
  99. begin
  100. iGatherID := TProjectFile(aProjList.List^[iLoop]).NewID;
  101. Break;
  102. end;
  103. end;
  104. if aProjList.Count = 0 then
  105. begin
  106. if aProjFile.Flag = 1 then
  107. begin
  108. sNewProjName := aProjFile.ProjName;
  109. FProjectMgrDM.CheckSameProjectName(1, sNewProjName, False);
  110. aProjFile.ProjName := sNewProjName;
  111. FImportFlag := 1;
  112. end
  113. else if aProjFile.Flag = 2 then
  114. begin
  115. iGatherID := FProjectMgrDM.GetProjectID(1);
  116. sNewProjName := aProjFile.ProjName;
  117. FProjectMgrDM.CheckSameProject(iGatherID, sNewProjName, False);
  118. aProjFile.ProjName := sNewProjName;
  119. FImportFlag := 2;
  120. end
  121. else if aProjFile.Flag = 3 then
  122. begin
  123. iGatherID := FProjectMgrDM.GetProjectID(2);
  124. sNewProjName := aProjFile.ProjName;
  125. FProjectMgrDM.CheckSameProject(iGatherID, sNewProjName, False);
  126. aProjFile.ProjName := sNewProjName;
  127. FImportFlag := 3;
  128. end;
  129. end;
  130. aProjFile.NewID := FProjectMgrDM.AddProject(aProjFile.ProjName, strUnknowName, aFullPath, iGatherID, aProjFile.Flag);
  131. aProjList.Add(aProjFile);
  132. aFullPath := FFileOpr.ExtractFilePath(ParamStr(0)) + aFullPath;
  133. end;
  134. function TProjectFileMgr.GetProjectFlag(aID: Integer): Integer;
  135. begin
  136. Result := FProjectMgrDM.GetProjectFlag(aID);
  137. end;
  138. procedure TProjectFileMgr.CheckProjectOpen(const aFilePath: string);
  139. begin
  140. if FProjectManager.CheckProjectExists(aFilePath) <> -1 then
  141. raise Exception.Create('该项目已被打开,请先关闭项目再进行操作!');
  142. end;
  143. constructor TProjectFileMgr.Create;
  144. begin
  145. FProjectProperty := TProjectProperty.Create;
  146. FFileOpr := TFileOpr.Create;
  147. FProjectMgrDM := TProjectMgrDM.Create(nil);
  148. OpenDB;
  149. end;
  150. function TProjectFileMgr.CreateNewFile(const aFileName: string;
  151. var aNewName: string): Boolean;
  152. var
  153. strTemPath: string;
  154. begin
  155. strTemPath := Format('%sData\%s', [FFileOpr.ExtractFilePath(ParamStr(0)), BudgetTemplateFile]);
  156. aNewName := Format('%s我的清单\%s.smb', [FFileOpr.ExtractFilePath(ParamStr(0)), aFileName]);
  157. Result := CopyFile(PChar(strTemPath), PChar(aNewName), True);
  158. end;
  159. function TProjectFileMgr.CreateNewProjectOpen(const aShortName: string;
  160. aProjType, aProjKind: Integer): string;
  161. var
  162. iID: Integer;
  163. strUnknowName: string;
  164. strFullName: string;
  165. sShortName: string;
  166. vProject: TProject;
  167. begin
  168. sShortName := aShortName;
  169. FProjectMgrDM.CheckSameProjectName(aProjKind, sShortName);
  170. repeat
  171. strUnknowName := GetRandomName;
  172. until not FProjectMgrDM.CheckUnknowNameExists(strUnknowName);
  173. strFullName := '我的清单\' + strUnknowName + '.smb';
  174. iID := FProjectMgrDM.AddProject(aShortName, strUnknowName, strFullName, aProjKind);
  175. CreateNewFile(strUnknowName, Result);
  176. if Assigned(FOpenProjectProc) then
  177. FOpenProjectProc(Result, aShortName, aProjType, iID);
  178. vProject := FProjectManager.GetProjectByID(iID);
  179. if aProjKind = 1 then
  180. begin
  181. FProjectMgrDM.RefreshBidLot(iID);
  182. // 新建的项目不打开。这里采用打开后关闭的方式比较简单。
  183. // 因为有些工作是必须在打开后才处理的,如初始化原始清单等。
  184. vProject.ForceUndoSave := True;
  185. FCloseProjectProc(vProject);
  186. end
  187. else if aProjKind = 2 then
  188. begin
  189. FProjectMgrDM.RefreshBidLot(GetProjID(1), True);
  190. iID := FProjectManager.CheckProjectExists(GetProjectFullPath(1));
  191. if iID <> -1 then
  192. begin
  193. SingleObjectAggregate.BidLotDM.Project := FProjectManager.Projects[iID];
  194. SingleObjectAggregate.BidLotDM.Notify(boAdd, aShortName, strFullName);
  195. SingleObjectAggregate.BidLotDM.SyncProjectView;
  196. end;
  197. end;
  198. end;
  199. function TProjectFileMgr.CreateNewProject(const aShortName: string;
  200. var aID: Integer; aGatherID: Integer): string;
  201. var
  202. strUnknowName: string;
  203. strFullName : string;
  204. sShortName : string;
  205. begin
  206. sShortName := aShortName;
  207. FProjectMgrDM.CheckSameProject(aGatherID, sShortName);
  208. repeat
  209. strUnknowName := GetRandomName;
  210. until not FProjectMgrDM.CheckUnknowNameExists(strUnknowName);
  211. strFullName := '我的清单\' + strUnknowName + '.smb';
  212. aID := FProjectMgrDM.AddProject(aShortName, strUnknowName, strFullName, aGatherID, 3);
  213. CreateNewFile(strUnknowName, strFullName);
  214. Result := strFullName;
  215. FProjectMgrDM.RefreshGatherBid;
  216. end;
  217. procedure TProjectFileMgr.DeleteProject(aProjKind: Integer);
  218. var
  219. I, iIdx: Integer;
  220. strFilePath: string;
  221. sgFiles: TStrings;
  222. begin
  223. sgFiles := TStringList.Create;
  224. try
  225. if aProjKind = 2 then
  226. begin
  227. iIdx := FProjectManager.CheckProjectExists(GetProjectFullPath(1));
  228. if iIdx <> -1 then
  229. begin
  230. SingleObjectAggregate.BidLotDM.Project := FProjectManager.Projects[iIdx];
  231. SingleObjectAggregate.BidLotDM.Notify(boDelete, GetProjectName(2), FProjectMgrDM.GetFileName(2));
  232. SingleObjectAggregate.BidLotDM.SyncProjectView;
  233. end;
  234. end;
  235. FProjectMgrDM.DeleteProjects(aProjKind, sgFiles);
  236. for I := 0 to sgFiles.Count - 1 do
  237. begin
  238. strFilePath := sgFiles[I];
  239. if strFilePath = '' then Continue;
  240. strFilePath := FFileOpr.ExtractFilePath(ParamStr(0)) + strFilePath;
  241. iIdx := FProjectManager.CheckProjectExists(strFilePath);
  242. if iIdx <> -1 then
  243. FCloseProjectProc(FProjectManager.Projects[iIdx]);
  244. FFileOpr.DeleteFile(strFilePath);
  245. end;
  246. finally
  247. sgFiles.Free;
  248. end;
  249. // if aProjKind <> 1 then
  250. // FProjectMgrDM.RefreshBidLot(FProjectMgrDM.GetProjectID(1));
  251. end;
  252. destructor TProjectFileMgr.Destroy;
  253. begin
  254. FFileOpr.Free;
  255. FProjectProperty.Free;
  256. FProjectMgrDM.Free;
  257. inherited;
  258. end;
  259. procedure TProjectFileMgr.ExportProject(const aNewProjName: string;
  260. aProjKind: Integer; aIsSingle: Boolean);
  261. var
  262. strFullPath: string;
  263. Decorator: TDecorator;
  264. begin
  265. strFullPath := GetProjectFullPath(aProjKind);
  266. if (aProjKind <> 1) or aIsSingle then
  267. begin
  268. FFileOpr.CopyFile(strFullPath, aNewProjName);
  269. Decorator := TBillsDecorator.Create(aNewProjName, {$Include ThirdPart.inc});
  270. try
  271. Decorator.Decorate;
  272. finally
  273. Decorator.Free;
  274. end;
  275. end
  276. else
  277. begin
  278. // nothing
  279. end;
  280. end;
  281. procedure TProjectFileMgr.ExportProjects(const aFileName: string;
  282. aProjKind: Integer);
  283. var
  284. I, iProjID: Integer;
  285. ProjFile: TProjectFile;
  286. FileList: TList;
  287. begin
  288. FileList := TList.Create;
  289. try
  290. if GetProjectFullPath(aProjKind) = '' then
  291. begin
  292. MessageError(0, '未定义项目不能导出!');
  293. Exit;
  294. end;
  295. iProjID := FProjectMgrDM.GetProjectID(aProjKind);
  296. GetProjectFile(iProjID, FileList);
  297. TCustomProjectDoc.ExportProjects(aFileName, FileList);
  298. finally
  299. for I := 0 to FileList.Count - 1 do
  300. TProjectFile(FileList.List^[I]).Free;
  301. FileList.Free;
  302. end;
  303. end;
  304. function TProjectFileMgr.GetBidLotProjectDS: TDataSet;
  305. begin
  306. Result := FProjectMgrDM.aqBidLotProject;
  307. end;
  308. procedure TProjectFileMgr.GetBuildProjectList(aString: TStrings);
  309. begin
  310. FProjectMgrDM.GetBuildProjectList(aString);
  311. end;
  312. function TProjectFileMgr.GetBuildProjRecordNo: Integer;
  313. begin
  314. Result := FProjectMgrDM.GetBuildProjRecordNo - 1;
  315. end;
  316. function TProjectFileMgr.GetGatherBidDS: TDataSet;
  317. begin
  318. Result := FProjectMgrDM.aqGatherBid;
  319. end;
  320. function TProjectFileMgr.GetGatherProjectDS: TDataSet;
  321. begin
  322. Result := FProjectMgrDM.atGatherProject;
  323. end;
  324. procedure TProjectFileMgr.GetProjectFile(aProjID: Integer;
  325. aProjList: TList);
  326. var
  327. I: Integer;
  328. iFlag: Integer;
  329. iGatherID: Integer;
  330. strProjName: string;
  331. strFullPath: string;
  332. ProjectFile: TProjectFile;
  333. projectIDList: TList;
  334. begin
  335. FProjectMgrDM.GetValues(aProjID, iGatherID, iFlag, strProjName, strFullPath);
  336. if aProjID = -1 then Exit;
  337. ProjectFile := TProjectFile.Create(nil);
  338. ProjectFile.ID := aProjID;
  339. ProjectFile.Flag := iFlag;
  340. ProjectFile.GatherID := iGatherID;
  341. ProjectFile.ProjName := strProjName;
  342. ProjectFile.FullPath := FFileOpr.ExtractFilePath(ParamStr(0)) + strFullPath;
  343. aProjList.Add(ProjectFile);
  344. projectIDList := TList.Create;
  345. try
  346. FProjectMgrDM.GetBidLots(aProjID, projectIDList);
  347. for I := 0 to projectIDList.Count - 1 do
  348. GetProjectFile(Integer(projectIDList[I]), aProjList);
  349. finally
  350. projectIDList.Free;
  351. end;
  352. end;
  353. function TProjectFileMgr.GetProjectFullPath(aProjKind: Integer): string;
  354. var
  355. strFilePath: string;
  356. sFullName: string;
  357. begin
  358. strFilePath := ParamStr(0);
  359. strFilePath := FFileOpr.ExtractFilePath(strFilePath);
  360. sFullName := FProjectMgrDM.GetFileName(aProjKind);
  361. if sFullName <> '' then
  362. Result := strFilePath + sFullName
  363. else
  364. Result := '';
  365. end;
  366. function TProjectFileMgr.GetProjectName(aProjKind: Integer): string;
  367. begin
  368. Result := FProjectMgrDM.GetProjectName(aProjKind);
  369. end;
  370. procedure TProjectFileMgr.ImportProject(const aShortName, aFullPath: string; aProjKind: Integer);
  371. procedure DecorateExprs(const AFileName: string);
  372. var
  373. imDecorator: TImportDecorator;
  374. begin
  375. imDecorator := TImportDecorator.Create(AFileName);
  376. try
  377. imDecorator.Decorate;
  378. finally
  379. imDecorator.Free;
  380. end;
  381. end;
  382. var
  383. strUnknowName: string;
  384. strFullName: string;
  385. sShortName: string;
  386. begin
  387. sShortName := aShortName;
  388. FProjectMgrDM.CheckSameProjectName(aProjKind, sShortName);
  389. repeat
  390. strUnknowName := GetRandomName;
  391. until not FProjectMgrDM.CheckUnknowNameExists(strUnknowName);
  392. strFullName := '我的清单\' + strUnknowName + '.smb';
  393. FProjectMgrDM.AddProject(aShortName, strUnknowName, strFullName, aProjKind);
  394. strFullName := Format('%s%s', [FFileOpr.ExtractFilePath(ParamStr(0)), strFullName]);
  395. FFileOpr.CopyFile(aFullPath, strFullName);
  396. DecorateExprs(strFullName);
  397. FProjectMgrDM.RefreshBidLot(GetProjID(1), True);
  398. end;
  399. procedure TProjectFileMgr.ImportProjects(const aFileName: string);
  400. begin
  401. TCustomProjectDoc.ImportProjects(aFileName, AddProject);
  402. if FImportFlag = 1 then
  403. FProjectMgrDM.RefreshBuildProject
  404. else if FImportFlag = 2 then
  405. FProjectMgrDM.RefreshBidLot(GetProjID(1), True)
  406. else
  407. FProjectMgrDM.RefreshGatherBid(True);
  408. end;
  409. procedure TProjectFileMgr.LocateBuildProject(aID: Integer);
  410. begin
  411. FProjectMgrDM.LocateBuildProject(aID);
  412. end;
  413. procedure TProjectFileMgr.OpenDB;
  414. var
  415. strDBName: string;
  416. begin
  417. strDBName := FFileOpr.ExtractFilePath(ParamStr(0));
  418. strDBName := strDBName + 'Data\ProjectManager.dat';
  419. if FFileOpr.FileExists(strDBName) then
  420. FProjectMgrDM.OpenDataBase(strDBName);
  421. end;
  422. procedure TProjectFileMgr.OpenProject(aProjType, aProjKind: Integer);
  423. begin
  424. if FProjectMgrDM.CanOpen(aProjKind) then
  425. begin
  426. FProjectProperty.CloseArcFile;
  427. FOpenProjectProc(GetProjectFullPath(aProjKind),
  428. FProjectMgrDM.GetProjectName(aProjKind),
  429. aProjType,
  430. FProjectMgrDM.GetProjectID(aProjKind));
  431. FProjectProperty.Connection := FProjectManager.ActiveProject.Connection;
  432. end;
  433. end;
  434. procedure TProjectFileMgr.RenameProject(aProjKind: Integer;
  435. const aNewProjName: string);
  436. var
  437. sNewProjName: string;
  438. begin
  439. sNewProjName := aNewProjName;
  440. CheckProjectOpen(GetProjectFullPath(aProjKind));
  441. FProjectMgrDM.CheckSameProjectName(aProjKind, sNewProjName);
  442. FProjectMgrDM.RenameProject(aProjKind, aNewProjName);
  443. if (aProjKind = 2) and (GetProjID(1) <> 1) then
  444. SingleObjectAggregate.BidLotDM.Notify(boReName, aNewProjName, FProjectMgrDM.GetFileName(2));
  445. end;
  446. procedure TProjectFileMgr.GetBidLotsByID(aID: Integer; aStrings: TStrings);
  447. begin
  448. FProjectMgrDM.GetBidLotsByID(aID, aStrings);
  449. end;
  450. procedure TProjectFileMgr.GetNameByID(aID: Integer; var aProjName,
  451. aFullName: string);
  452. begin
  453. FProjectMgrDM.GetNameByID(aID, aProjName, aFullName);
  454. end;
  455. procedure TProjectFileMgr.RefreshProjectProperty(aProjKind: Integer);
  456. var
  457. sFilePath: string;
  458. begin
  459. if not GetProjectPropertyFilePath(aProjKind, sFilePath) then Exit;
  460. if sFilePath <> '' then
  461. ReadProjectProperty(sFilePath)
  462. else
  463. begin
  464. FProjectProperty.InitProjectProperty;
  465. FProjectProperty.Connection := nil;
  466. end;
  467. end;
  468. procedure TProjectFileMgr.ReadProjectProperty(const aFilePath: string);
  469. var
  470. iIdx: Integer;
  471. begin
  472. if not Assigned(FProjectManager) then Exit;
  473. iIdx := FProjectManager.CheckProjectExists(aFilePath);
  474. if iIdx <> -1 then
  475. begin
  476. FProjectProperty.Connection := FProjectManager.Projects[iIdx].Connection;
  477. FProjectProperty.GetProjectProperty;
  478. end
  479. else
  480. begin
  481. FProjectProperty.GetProjectProperty(aFilePath);
  482. end;
  483. end;
  484. procedure TProjectFileMgr.WriteProjectProperty;
  485. //var
  486. // iIdx: Integer;
  487. begin
  488. // iIdx := FProjectManager.CheckProjectExists(FProjectProperty.FileName);
  489. // if iIdx <> -1 then
  490. // FProjectProperty.Connection := FProjectManager.Projects[iIdx].Connection;
  491. FProjectProperty.SaveProperty;
  492. end;
  493. function TProjectFileMgr.GetProjID(aProjKind: Integer): Integer;
  494. begin
  495. Result := FProjectMgrDM.GetProjectID(aProjKind);
  496. end;
  497. function TProjectFileMgr.GetParentID(aID: Integer): Integer;
  498. begin
  499. Result := FProjectMgrDM.GetParentID(aID);
  500. end;
  501. function TProjectFileMgr.GetProjectPropertyFilePath(aProjKind: Integer; var aFilePath: string): Boolean;
  502. begin
  503. Result := True;
  504. if aProjKind in [1, 2] then
  505. begin
  506. aFilePath := GetProjectFullPath(aProjKind);
  507. end
  508. else if aProjKind = 3 then
  509. begin
  510. aFilePath := GetProjectFullPath(3);
  511. end
  512. else
  513. Result := False;
  514. end;
  515. function TProjectFileMgr.CreateNewProjectForOneKey(
  516. const aShortName: string; var aID: Integer; aGatherID: Integer;
  517. aRaise: Boolean): string;
  518. var
  519. strUnknowName: string;
  520. strFullName : string;
  521. sShortName : string;
  522. begin
  523. sShortName := aShortName;
  524. repeat
  525. strUnknowName := GetRandomName;
  526. until not FProjectMgrDM.CheckUnknowNameExists(strUnknowName);
  527. strFullName := '我的清单\' + strUnknowName + '.smb';
  528. aID := FProjectMgrDM.AddProject(aShortName, strUnknowName, strFullName, aGatherID, 3);
  529. CreateNewFile(strUnknowName, strFullName);
  530. Result := strFullName;
  531. FProjectMgrDM.RefreshGatherBid;
  532. end;
  533. end.