rmSelectProjectFrm.pas 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635
  1. unit rmSelectProjectFrm;
  2. interface
  3. uses
  4. Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  5. Dialogs, StdCtrls, sdGridDBA, sdGridTreeDBA, sdIDTree, ZJGrid;
  6. type
  7. // 初步设计 Preliminary Design
  8. // 施工图设计 Construction Drawing Design
  9. // 批准概算 Approved Budget
  10. // 多合同 Deal
  11. // 甘肃高管局定制 Mental1
  12. TMultiSelectType = (mstCommon, mstE_PCD, mstE_A, mstDeal, mstMental1);
  13. // 所选项目
  14. TSelectProject = class
  15. private
  16. FProjectID: Integer;
  17. FIsTender: Boolean;
  18. FIsPD: Boolean;
  19. FIsCDD: Boolean;
  20. FIsAB: Boolean;
  21. FIsDeal: Boolean;
  22. public
  23. property ProjectID: Integer read FProjectID write FProjectID;
  24. property IsTender: Boolean read FIsTender write FIsTender;
  25. // 初步设计(概算)项目
  26. property IsPD: Boolean read FIsPD write FIsPD;
  27. // 施工图设计(预算)项目
  28. property IsCDD: Boolean read FIsCDD write FIsCDD;
  29. // 批准概算项目
  30. property IsAB: Boolean read FIsAB write FIsAB;
  31. // 多合同项目(二三部分,土地征拆、监理等)
  32. property IsDeal: Boolean read FIsDeal write FIsDeal;
  33. end;
  34. TProjectSelectForm = class(TForm)
  35. zgSelectProject: TZJGrid;
  36. stdSelectProject: TsdGridTreeDBA;
  37. btnOk: TButton;
  38. btnCancel: TButton;
  39. lblProjectList: TLabel;
  40. lblResult: TLabel;
  41. zgResult: TZJGrid;
  42. procedure zgSelectProjectCellTextChanged(Sender: TObject; Col,
  43. Row: Integer);
  44. procedure btnOkClick(Sender: TObject);
  45. procedure zgSelectProjectDrawCellText(ACanvas: TCanvas;
  46. const ARect: TRect; const ACoord: TPoint; AGrid: TZJGrid;
  47. const Text: String; var ADefaultDraw: Boolean);
  48. procedure zgSelectProjectCellTextChanging(Sender: TObject;
  49. const ACoord: TPoint; var NewValue: String; var Accept: Boolean);
  50. procedure zgSelectProjectSetCellText(Sender: TObject;
  51. const ACoord: TPoint; var Value: String; DisplayText: Boolean);
  52. procedure zgSelectProjectGetCellText(Sender: TObject;
  53. const ACoord: TPoint; var Value: String; DisplayText: Boolean);
  54. procedure zgResultGetCellText(Sender: TObject; const ACoord: TPoint;
  55. var Value: String; DisplayText: Boolean);
  56. procedure zgResultSetCellText(Sender: TObject; const ACoord: TPoint;
  57. var Value: String; DisplayText: Boolean);
  58. private
  59. FMultiSelect: Boolean;
  60. FMultiSelectType: TMultiSelectType;
  61. // 记录可选项目列表的勾选情况
  62. FSelectProjects: TList;
  63. FOnAssignResult: Boolean;
  64. procedure AssignResult;
  65. function FindSelectProject(AProjectID: Integer): TSelectProject;
  66. function CreateSelectProject(ANode: TsdIDTreeNode): TSelectProject;
  67. procedure AddRows(ANode: TsdIDTreeNode);
  68. procedure RemoveRows(ANode: TsdIDTreeNode);
  69. procedure SetPDProject(AProjecID: Integer);
  70. procedure SetCDDProject(AProjectID: Integer);
  71. procedure SetABProject(AProjectID: Integer);
  72. function HasPDProject: Boolean;
  73. function HasCDDProject: Boolean;
  74. function HasABProject: Boolean;
  75. procedure InitForm;
  76. procedure InitResultGrid;
  77. procedure SetMultiSelectType(const Value: TMultiSelectType);
  78. public
  79. constructor Create(AMultiSelect: Boolean; AProjectID: Integer; AProjects: TList);
  80. destructor Destroy; override;
  81. procedure SelectResult(var AProjectID: Integer); overload;
  82. procedure SelectResult(AProjects: TList); overload;
  83. // 可选多个
  84. property MultiSelect: Boolean read FMultiSelect;
  85. property MultiSelectType: TMultiSelectType read FMultiSelectType write SetMultiSelectType;
  86. end;
  87. implementation
  88. uses
  89. Globals, MainFrm, ZhAPI, ZjCells;
  90. {$R *.dfm}
  91. { TProjectSelectForm }
  92. procedure TProjectSelectForm.AssignResult;
  93. var
  94. iRow: Integer;
  95. stnNode: TsdIDTreeNode;
  96. i: Integer;
  97. SelectProject: TSelectProject;
  98. begin
  99. FOnAssignResult := True;
  100. zgSelectProject.Invalidate;
  101. InitResultGrid;
  102. for i := 0 to FSelectProjects.Count - 1 do
  103. begin
  104. SelectProject := TSelectProject(FSelectProjects.Items[i]);
  105. if SelectProject.IsTender then
  106. begin
  107. zgResult.RowCount := zgResult.RowCount + 1;
  108. stnNode := stdSelectProject.IDTree.FindNode(SelectProject.ProjectID);
  109. zgResult.Cells[1, zgResult.RowCount - 1].Text :=
  110. stnNode.Rec.ValueByName('Name').AsString;
  111. zgResult.Cells[1, zgResult.RowCount - 1].Align := gaCenterLeft;
  112. zgResult.Rows[zgResult.RowCount - 1].Data := SelectProject;
  113. case FMultiSelectType of
  114. mstE_PCD:
  115. begin
  116. if SelectProject.IsPD then
  117. zgResult.Cells[2, zgResult.RowCount - 1].Text := 'True';
  118. if SelectProject.IsCDD then
  119. zgResult.Cells[3, zgResult.RowCount - 1].Text := 'True';
  120. end;
  121. mstE_A:
  122. begin
  123. if SelectProject.IsAB then
  124. zgResult.Cells[2, zgResult.RowCount - 1].Text := 'True';
  125. end;
  126. mstDeal:
  127. begin
  128. if SelectProject.IsDeal then
  129. zgResult.Cells[2, zgResult.RowCount - 1].Text := 'True';
  130. end;
  131. end;
  132. end;
  133. end;
  134. FOnAssignResult := False;
  135. end;
  136. procedure TProjectSelectForm.SelectResult(var AProjectID: Integer);
  137. var
  138. SelectProject: TSelectProject;
  139. begin
  140. AProjectID := -1;
  141. if FSelectProjects.Count > 0 then
  142. begin
  143. SelectProject := TSelectProject(FSelectProjects[0]);
  144. AProjectID := SelectProject.ProjectID;
  145. end;
  146. end;
  147. procedure TProjectSelectForm.zgSelectProjectCellTextChanged(
  148. Sender: TObject; Col, Row: Integer);
  149. begin
  150. if (Col = 1) then
  151. AssignResult;
  152. end;
  153. procedure TProjectSelectForm.btnOkClick(Sender: TObject);
  154. var
  155. iLimitProjectCount: Integer;
  156. begin
  157. iLimitProjectCount := 1;
  158. if FMultiSelect then
  159. begin
  160. if FMultiSelectType = mstE_PCD then
  161. iLimitProjectCount := 3
  162. else if FMultiSelectType = mstE_A then
  163. iLimitProjectCount := 2
  164. else
  165. iLimitProjectCount := 2;
  166. end;
  167. if (zgResult.RowCount > iLimitProjectCount) then
  168. begin
  169. if FMultiSelect then
  170. begin
  171. if (FMultiSelectType = mstE_PCD) and HasPDProject and HasCDDProject then
  172. ModalResult := mrOk
  173. else if (FMultiSelectType = mstE_A) and HasABProject then
  174. ModalResult := mrOk
  175. else if FMultiSelectType in [mstCommon, mstDeal, mstMental1] then
  176. ModalResult := mrOk;
  177. end
  178. else
  179. ModalResult := mrOK;
  180. end;
  181. end;
  182. constructor TProjectSelectForm.Create(AMultiSelect: Boolean;
  183. AProjectID: Integer; AProjects: TList);
  184. var
  185. stnNode: TsdIDTreeNode;
  186. begin
  187. inherited Create(nil);
  188. FMultiSelect := AMultiSelect;
  189. stdSelectProject.IDTree := ProjectManager.ProjectsTree;
  190. FSelectProjects := TList.Create;
  191. if not AMultiSelect then
  192. begin
  193. stnNode := stdSelectProject.IDTree.FindNode(AProjectID);
  194. AddRows(stnNode);
  195. end
  196. else
  197. FSelectProjects.Assign(AProjects);
  198. InitForm;
  199. AssignResult;
  200. end;
  201. procedure TProjectSelectForm.zgSelectProjectDrawCellText(ACanvas: TCanvas;
  202. const ARect: TRect; const ACoord: TPoint; AGrid: TZJGrid;
  203. const Text: String; var ADefaultDraw: Boolean);
  204. procedure GetBitmap(AImage: TBitmap);
  205. begin
  206. with stdSelectProject.IDTree.Items[ACoord.Y - 1] do
  207. if Rec.ValueByName('Type').AsInteger = 0 then
  208. if Expanded and HasChildren then
  209. MainForm.Images.GetBitmap(34, AImage)
  210. else
  211. MainForm.Images.GetBitmap(34, AImage)
  212. else
  213. MainForm.Images.GetBitmap(11, AImage);
  214. end;
  215. const
  216. rIconWidth = 16;
  217. rIconHeight = 16;
  218. var
  219. Img: TBitmap;
  220. Cell: TZjCell;
  221. rImg: TRect;
  222. begin
  223. if (ACoord.X = 2) and (ACoord.Y > zgSelectProject.FixedRowCount - 1) then
  224. begin
  225. Cell := zgSelectProject.Cells[ACoord.X, ACoord.Y];
  226. Img := TBitmap.Create;
  227. try
  228. GetBitmap(Img);
  229. case Cell.Align of
  230. gaTopLeft, gaTopCenter, gaTopRight:
  231. rImg := Rect(ARect.Left + 2, ARect.Top, ARect.Left + rIconWidth, ARect.Top + rIconHeight);
  232. gaCenterLeft, gaCenterCenter, gaCenterRight:
  233. rImg := Rect(ARect.Left + 2, ARect.Top + (ARect.Bottom - ARect.Top - rIconHeight) div 2, ARect.Left + rIconWidth, ARect.Bottom - (ARect.Bottom - ARect.Top - rIconHeight) div 2);
  234. gaBottomLeft, gaBottomCenter, gaBottomRight:
  235. rImg := Rect(ARect.Left + 2, ARect.Bottom - rIconHeight, ARect.Left + rIconWidth, ARect.Bottom);
  236. end;
  237. ACanvas.StretchDraw(rImg, Img);
  238. WriteText(ACanvas, Rect(ARect.Left + rIconWidth, ARect.Top, ARect.Right, ARect.Bottom)
  239. , 2, 2, Text, Cell.Align, False);
  240. ADefaultDraw := False;
  241. finally
  242. Img.Free;
  243. end;
  244. end;
  245. end;
  246. procedure TProjectSelectForm.zgSelectProjectCellTextChanging(
  247. Sender: TObject; const ACoord: TPoint; var NewValue: String;
  248. var Accept: Boolean);
  249. var
  250. stnNode: TsdIDTreeNode;
  251. begin
  252. if (ACoord.X = 1) then
  253. begin
  254. stnNode := stdSelectProject.IDTree.Items[ACoord.Y - 1];
  255. if not FMultiSelect then
  256. begin
  257. Accept := stnNode.Rec.ValueByName('Type').AsInteger = 1;
  258. if Accept then
  259. begin
  260. ClearObjects(FSelectProjects);
  261. FSelectProjects.Clear;
  262. end;
  263. end;
  264. end;
  265. end;
  266. procedure TProjectSelectForm.zgSelectProjectSetCellText(Sender: TObject;
  267. const ACoord: TPoint; var Value: String; DisplayText: Boolean);
  268. var
  269. stnNode: TsdIDTreeNode;
  270. begin
  271. if ACoord.X = 1 then
  272. begin
  273. stnNode := stdSelectProject.IDTree.Items[ACoord.Y - 1];
  274. if Value = 'True' then
  275. AddRows(stnNode)
  276. else
  277. RemoveRows(stnNode);
  278. end;
  279. end;
  280. procedure TProjectSelectForm.zgSelectProjectGetCellText(Sender: TObject;
  281. const ACoord: TPoint; var Value: String; DisplayText: Boolean);
  282. var
  283. stnNode: TsdIDTreeNode;
  284. SelectProject: TSelectProject;
  285. begin
  286. if ACoord.X = 1 then
  287. begin
  288. stnNode := stdSelectProject.IDTree.Items[ACoord.Y - 1];
  289. if Assigned(stnNode) then
  290. begin
  291. SelectProject := FindSelectProject(stnNode.ID);
  292. if Assigned(SelectProject) then
  293. Value := 'True';
  294. end;
  295. end;
  296. end;
  297. destructor TProjectSelectForm.Destroy;
  298. begin
  299. FSelectProjects.Free;
  300. inherited;
  301. end;
  302. procedure TProjectSelectForm.AddRows(ANode: TsdIDTreeNode);
  303. var
  304. iChild: Integer;
  305. SelectProject: TSelectProject;
  306. begin
  307. if not Assigned(ANode) then Exit;
  308. SelectProject := FindSelectProject(ANode.ID);
  309. if not Assigned(SelectProject) then
  310. CreateSelectProject(ANode);
  311. if ANode.HasChildren then
  312. for iChild := 0 to ANode.ChildCount - 1 do
  313. AddRows(ANode.ChildNodes[iChild]);
  314. end;
  315. procedure TProjectSelectForm.RemoveRows(ANode: TsdIDTreeNode);
  316. var
  317. iChild: Integer;
  318. SelectProject: TSelectProject;
  319. begin
  320. if not Assigned(ANode) then Exit;
  321. SelectProject := FindSelectProject(ANode.ID);
  322. if Assigned(SelectProject) then
  323. begin
  324. FSelectProjects.Remove(SelectProject);
  325. SelectProject.Free;
  326. end;
  327. if ANode.HasChildren then
  328. for iChild := 0 to ANode.ChildCount - 1 do
  329. RemoveRows(ANode.ChildNodes[iChild]);
  330. end;
  331. procedure TProjectSelectForm.SelectResult(AProjects: TList);
  332. begin
  333. AProjects.Assign(FSelectProjects);
  334. end;
  335. procedure TProjectSelectForm.InitResultGrid;
  336. procedure InitCommonResultGrid;
  337. begin
  338. zgResult.ColCount := 2;
  339. zgResult.RowCount := 1;
  340. zgResult.Cells[1, 0].Text := '所选项目';
  341. zgResult.ColWidths[1] := 270;
  342. end;
  343. procedure InitE_PCDResultGrid;
  344. begin
  345. zgResult.ColCount := 4;
  346. zgResult.RowCount := 1;
  347. zgResult.Cells[1, 0].Text := '所选项目';
  348. zgResult.ColWidths[1] := 200;
  349. zgResult.Cells[2, 0].Text := '初步设计概算';
  350. zgResult.CellClass.Cols[2] := TZjCheckBoxCell;
  351. zgResult.ColWidths[2] := 47;
  352. zgResult.Cells[3, 0].Text := '施工图设计预算';
  353. zgResult.CellClass.Cols[3] := TZjCheckBoxCell;
  354. zgResult.ColWidths[3] := 55;
  355. end;
  356. procedure InitE_AResultGrid;
  357. begin
  358. zgResult.ColCount := 3;
  359. zgResult.RowCount := 1;
  360. zgResult.Cells[1, 0].Text := '所选项目';
  361. zgResult.ColWidths[1] := 230;
  362. zgResult.Cells[2, 0].Text := '批准概(预)算';
  363. zgResult.CellClass.Cols[2] := TZjCheckBoxCell;
  364. zgResult.ColWidths[2] := 42;
  365. end;
  366. procedure InitDealResultGrid;
  367. begin
  368. zgResult.ColCount := 3;
  369. zgResult.RowCount := 1;
  370. zgResult.Cells[1, 0].Text := '所选项目';
  371. zgResult.ColWidths[1] := 230;
  372. zgResult.Cells[2, 0].Text := '多合同项目';
  373. zgResult.CellClass.Cols[2] := TZjCheckBoxCell;
  374. zgResult.ColWidths[2] := 42;
  375. end;
  376. begin
  377. case FMultiSelectType of
  378. mstCommon: InitCommonResultGrid;
  379. mstE_PCD: InitE_PCDResultGrid;
  380. mstE_A: InitE_AResultGrid;
  381. mstDeal: InitDealResultGrid;
  382. end;
  383. end;
  384. procedure TProjectSelectForm.zgResultGetCellText(Sender: TObject;
  385. const ACoord: TPoint; var Value: String; DisplayText: Boolean);
  386. var
  387. SelectProject: TSelectProject;
  388. begin
  389. if (ACoord.Y > 0) and (ACoord.X > 1) then
  390. begin
  391. SelectProject := TSelectProject(zgResult.Rows[ACoord.Y].Data);
  392. if not Assigned(SelectProject) then Exit;
  393. case FMultiSelectType of
  394. mstE_PCD: if ((ACoord.X = 2) and SelectProject.IsPD) or ((ACoord.X = 3) and SelectProject.IsCDD) then Value := 'True'
  395. else Value := 'False';
  396. mstE_A: if SelectProject.IsAB then Value := 'True'
  397. else Value := 'False';
  398. mstDeal: if SelectProject.IsDeal then Value := 'True'
  399. else Value := 'False';
  400. end;
  401. end;
  402. end;
  403. procedure TProjectSelectForm.zgResultSetCellText(Sender: TObject;
  404. const ACoord: TPoint; var Value: String; DisplayText: Boolean);
  405. var
  406. SelectProject: TSelectProject;
  407. begin
  408. if not FOnAssignResult and (ACoord.X > 1) and (ACoord.Y > 0) then
  409. begin
  410. SelectProject := TSelectProject(zgResult.Rows[ACoord.Y].Data);
  411. if Value = 'True' then
  412. case FMultiSelectType of
  413. mstE_PCD:
  414. if ACoord.X = 2 then
  415. SetPDProject(SelectProject.ProjectID)
  416. else if ACoord.X = 3 then
  417. SetCDDProject(SelectProject.ProjectID);
  418. mstE_A: SetABProject(SelectProject.ProjectID);
  419. mstDeal: SelectProject.IsDeal := True;
  420. end
  421. else
  422. case FMultiSelectType of
  423. mstE_PCD:
  424. if ACoord.X = 2 then
  425. SelectProject.IsPD := False
  426. else
  427. SelectProject.IsCDD := False;
  428. mstE_A: SelectProject.IsAB := False;
  429. mstDeal: SelectProject.IsDeal := False;
  430. end;
  431. end;
  432. zgResult.InvalidateCol(ACoord.X);
  433. zgResult.InvalidateRow(ACoord.Y);
  434. end;
  435. procedure TProjectSelectForm.InitForm;
  436. var
  437. iWidth: Integer;
  438. begin
  439. if not FMultiSelect then
  440. Caption := '请选择原报项目'
  441. else
  442. Caption := '请选择汇总项目';
  443. case FMultiSelectType of
  444. mstE_PCD: Caption := Caption + ',并勾选初步设计、施工图设计项目';
  445. mstE_A: Caption := Caption + ',并勾选批准概(预)算项目';
  446. mstDeal: Caption := Caption + ',并勾选其中的多合同项目';
  447. end;
  448. // 甘肃高管局定制,隐藏结果表
  449. iWidth := GetSystemMetrics(SM_CXFRAME);
  450. if FMultiSelectType = mstMental1 then
  451. ClientWidth := 384
  452. else
  453. ClientWidth := 729;
  454. end;
  455. procedure TProjectSelectForm.SetMultiSelectType(
  456. const Value: TMultiSelectType);
  457. begin
  458. FMultiSelectType := Value;
  459. InitForm;
  460. AssignResult;
  461. end;
  462. function TProjectSelectForm.FindSelectProject(
  463. AProjectID: Integer): TSelectProject;
  464. var
  465. i: Integer;
  466. SelectProject: TSelectProject;
  467. begin
  468. Result := nil;
  469. for i := 0 to FSelectProjects.Count - 1 do
  470. begin
  471. SelectProject := TSelectProject(FSelectProjects.Items[i]);
  472. if SelectProject.FProjectID = AProjectID then
  473. begin
  474. Result := SelectProject;
  475. Break;
  476. end;
  477. end;
  478. end;
  479. function TProjectSelectForm.CreateSelectProject(
  480. ANode: TsdIDTreeNode): TSelectProject;
  481. begin
  482. Result := TSelectProject.Create;
  483. FSelectProjects.Add(Result);
  484. Result.ProjectID := ANode.ID;
  485. Result.FIsTender := ANode.Rec.ValueByName('Type').AsInteger = 1;
  486. Result.FIsPD := False;
  487. Result.FIsCDD := False;
  488. Result.FIsAB := False;
  489. Result.FIsDeal := False;
  490. end;
  491. procedure TProjectSelectForm.SetPDProject(AProjecID: Integer);
  492. var
  493. i: Integer;
  494. SelectProject: TSelectProject;
  495. begin
  496. for i := 0 to FSelectProjects.Count - 1 do
  497. begin
  498. SelectProject := TSelectProject(FSelectProjects.Items[i]);
  499. SelectProject.IsPD := SelectProject.ProjectID = AProjecID;
  500. if SelectProject.IsPD and SelectProject.IsCDD then
  501. SelectProject.IsCDD := False;
  502. end;
  503. end;
  504. procedure TProjectSelectForm.SetABProject(AProjectID: Integer);
  505. var
  506. i: Integer;
  507. SelectProject: TSelectProject;
  508. begin
  509. for i := 0 to FSelectProjects.Count - 1 do
  510. begin
  511. SelectProject := TSelectProject(FSelectProjects.Items[i]);
  512. SelectProject.IsAB := SelectProject.ProjectID = AProjectID;
  513. end;
  514. end;
  515. procedure TProjectSelectForm.SetCDDProject(AProjectID: Integer);
  516. var
  517. i: Integer;
  518. SelectProject: TSelectProject;
  519. begin
  520. for i := 0 to FSelectProjects.Count - 1 do
  521. begin
  522. SelectProject := TSelectProject(FSelectProjects.Items[i]);
  523. SelectProject.IsCDD := SelectProject.ProjectID = AProjectID;
  524. if SelectProject.IsCDD and SelectProject.IsPD then
  525. SelectProject.IsPD := False;
  526. end;
  527. end;
  528. function TProjectSelectForm.HasABProject: Boolean;
  529. var
  530. i: Integer;
  531. SelectProject: TSelectProject;
  532. begin
  533. Result := False;
  534. for i := 0 to FSelectProjects.Count - 1 do
  535. begin
  536. SelectProject := TSelectProject(FSelectProjects.Items[i]);
  537. if SelectProject.IsAB then
  538. begin
  539. Result := True;
  540. Break;
  541. end;
  542. end;
  543. end;
  544. function TProjectSelectForm.HasCDDProject: Boolean;
  545. var
  546. i: Integer;
  547. SelectProject: TSelectProject;
  548. begin
  549. Result := False;
  550. for i := 0 to FSelectProjects.Count - 1 do
  551. begin
  552. SelectProject := TSelectProject(FSelectProjects.Items[i]);
  553. if SelectProject.IsCDD then
  554. begin
  555. Result := True;
  556. Break;
  557. end;
  558. end;
  559. end;
  560. function TProjectSelectForm.HasPDProject: Boolean;
  561. var
  562. i: Integer;
  563. SelectProject: TSelectProject;
  564. begin
  565. Result := False;
  566. for i := 0 to FSelectProjects.Count - 1 do
  567. begin
  568. SelectProject := TSelectProject(FSelectProjects.Items[i]);
  569. if SelectProject.IsPD then
  570. begin
  571. Result := True;
  572. Break;
  573. end;
  574. end;
  575. end;
  576. end.