rmSelectProjectFrm.pas 27 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929
  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. // 导则 造价台账汇总
  13. TMultiSelectType = (mstCommon, mstE_PCD, mstE_A, mstDeal, mstMental1, mstZjtz,
  14. mstQgcZj);
  15. // 所选项目
  16. TSelectProject = class
  17. private
  18. FProjectID: Integer;
  19. FIsTender: Boolean;
  20. FIsPAS: Boolean;
  21. FIsPD: Boolean;
  22. FIsCDD: Boolean;
  23. FIsAB: Boolean;
  24. FIsDeal: Boolean;
  25. FIsCddSc: Boolean;
  26. FIsCddHt: Boolean;
  27. public
  28. property ProjectID: Integer read FProjectID write FProjectID;
  29. property IsTender: Boolean read FIsTender write FIsTender;
  30. // 工程可行性研究
  31. property IsPAS: Boolean read FIsPAS write FIsPAS;
  32. // 初步设计(概算)项目
  33. property IsPD: Boolean read FIsPD write FIsPD;
  34. // 施工图设计(预算)项目
  35. property IsCDD: Boolean read FIsCDD write FIsCDD;
  36. // 批准概算项目
  37. property IsAB: Boolean read FIsAB write FIsAB;
  38. // 多合同项目(二三部分,土地征拆、监理等)
  39. property IsDeal: Boolean read FIsDeal write FIsDeal;
  40. // 施工图设计审查预算
  41. property IsCddSc: Boolean read FIsCddSc write FIsCddSc;
  42. // 施工图设计合同费用
  43. property IsCddHt: Boolean read FIsCddHt write FIsCddHt;
  44. end;
  45. TProjectSelectForm = class(TForm)
  46. zgSelectProject: TZJGrid;
  47. stdSelectProject: TsdGridTreeDBA;
  48. btnOk: TButton;
  49. btnCancel: TButton;
  50. lblProjectList: TLabel;
  51. lblResult: TLabel;
  52. zgResult: TZJGrid;
  53. procedure zgSelectProjectCellTextChanged(Sender: TObject; Col,
  54. Row: Integer);
  55. procedure btnOkClick(Sender: TObject);
  56. procedure zgSelectProjectDrawCellText(ACanvas: TCanvas;
  57. const ARect: TRect; const ACoord: TPoint; AGrid: TZJGrid;
  58. const Text: String; var ADefaultDraw: Boolean);
  59. procedure zgSelectProjectCellTextChanging(Sender: TObject;
  60. const ACoord: TPoint; var NewValue: String; var Accept: Boolean);
  61. procedure zgSelectProjectSetCellText(Sender: TObject;
  62. const ACoord: TPoint; var Value: String; DisplayText: Boolean);
  63. procedure zgSelectProjectGetCellText(Sender: TObject;
  64. const ACoord: TPoint; var Value: String; DisplayText: Boolean);
  65. procedure zgResultGetCellText(Sender: TObject; const ACoord: TPoint;
  66. var Value: String; DisplayText: Boolean);
  67. procedure zgResultSetCellText(Sender: TObject; const ACoord: TPoint;
  68. var Value: String; DisplayText: Boolean);
  69. private
  70. FMultiSelect: Boolean;
  71. FMultiSelectType: TMultiSelectType;
  72. // 记录可选项目列表的勾选情况
  73. FSelectProjects: TList;
  74. FOnAssignResult: Boolean;
  75. procedure AssignResult;
  76. function FindSelectProject(AProjectID: Integer): TSelectProject;
  77. function CreateSelectProject(ANode: TsdIDTreeNode): TSelectProject;
  78. procedure AddRows(ANode: TsdIDTreeNode);
  79. procedure RemoveRows(ANode: TsdIDTreeNode);
  80. procedure SetPASProject(AProjecID: Integer);
  81. procedure SetPDProject(AProjecID: Integer);
  82. procedure SetCDDProject(AProjectID: Integer);
  83. procedure SetABProject(AProjectID: Integer);
  84. procedure SetCddScProject(AProjectID: Integer);
  85. procedure SetCddHtProject(AProjectID: Integer);
  86. function HasPASProject: Boolean;
  87. function HasPDProject: Boolean;
  88. function HasCDDProject: Boolean;
  89. function HasABProject: Boolean;
  90. function HasCddScProject: Boolean;
  91. function HasCddHtProject: Boolean;
  92. procedure InitForm;
  93. procedure InitResultGrid;
  94. procedure SetMultiSelectType(const Value: TMultiSelectType);
  95. public
  96. constructor Create(AMultiSelect: Boolean; AProjectID: Integer; AProjects: TList);
  97. destructor Destroy; override;
  98. procedure SelectResult(var AProjectID: Integer); overload;
  99. procedure SelectResult(AProjects: TList); overload;
  100. // 可选多个
  101. property MultiSelect: Boolean read FMultiSelect;
  102. property MultiSelectType: TMultiSelectType read FMultiSelectType write SetMultiSelectType;
  103. end;
  104. implementation
  105. uses
  106. Globals, MainFrm, ZhAPI, ZjCells;
  107. {$R *.dfm}
  108. { TProjectSelectForm }
  109. procedure TProjectSelectForm.AssignResult;
  110. var
  111. iRow: Integer;
  112. stnNode: TsdIDTreeNode;
  113. i: Integer;
  114. SelectProject: TSelectProject;
  115. begin
  116. FOnAssignResult := True;
  117. zgSelectProject.Invalidate;
  118. InitResultGrid;
  119. for i := 0 to FSelectProjects.Count - 1 do
  120. begin
  121. SelectProject := TSelectProject(FSelectProjects.Items[i]);
  122. if SelectProject.IsTender then
  123. begin
  124. zgResult.RowCount := zgResult.RowCount + 1;
  125. stnNode := stdSelectProject.IDTree.FindNode(SelectProject.ProjectID);
  126. zgResult.Cells[1, zgResult.RowCount - 1].Text :=
  127. stnNode.Rec.ValueByName('Name').AsString;
  128. zgResult.Cells[1, zgResult.RowCount - 1].Align := gaCenterLeft;
  129. zgResult.Rows[zgResult.RowCount - 1].Data := SelectProject;
  130. case FMultiSelectType of
  131. mstE_PCD:
  132. begin
  133. if SelectProject.IsPD then
  134. zgResult.Cells[2, zgResult.RowCount - 1].Text := 'True';
  135. if SelectProject.IsCDD then
  136. zgResult.Cells[3, zgResult.RowCount - 1].Text := 'True';
  137. end;
  138. mstE_A:
  139. begin
  140. if SelectProject.IsAB then
  141. zgResult.Cells[2, zgResult.RowCount - 1].Text := 'True';
  142. end;
  143. mstDeal:
  144. begin
  145. if SelectProject.IsDeal then
  146. zgResult.Cells[2, zgResult.RowCount - 1].Text := 'True';
  147. end;
  148. mstZjtz:
  149. begin
  150. if SelectProject.IsPD then
  151. zgResult.Cells[2, zgResult.RowCount - 1].Text := 'True';
  152. if SelectProject.IsCddSc then
  153. zgResult.Cells[3, zgResult.RowCount - 1].Text := 'True';
  154. if SelectProject.IsCddHt then
  155. zgResult.Cells[4, zgResult.RowCount - 1].Text := 'True';
  156. end;
  157. mstQgcZj:
  158. begin
  159. if SelectProject.IsPAS then
  160. zgResult.Cells[2, zgResult.RowCount - 1].Text := 'True';
  161. if SelectProject.IsPD then
  162. zgResult.Cells[3, zgResult.RowCount - 1].Text := 'True';
  163. if SelectProject.IsCDD then
  164. zgResult.Cells[4, zgResult.RowCount - 1].Text := 'True';
  165. end;
  166. end;
  167. end;
  168. end;
  169. FOnAssignResult := False;
  170. end;
  171. procedure TProjectSelectForm.SelectResult(var AProjectID: Integer);
  172. var
  173. SelectProject: TSelectProject;
  174. begin
  175. AProjectID := -1;
  176. if FSelectProjects.Count > 0 then
  177. begin
  178. SelectProject := TSelectProject(FSelectProjects[0]);
  179. AProjectID := SelectProject.ProjectID;
  180. end;
  181. end;
  182. procedure TProjectSelectForm.zgSelectProjectCellTextChanged(
  183. Sender: TObject; Col, Row: Integer);
  184. begin
  185. if (Col = 1) then
  186. AssignResult;
  187. end;
  188. procedure TProjectSelectForm.btnOkClick(Sender: TObject);
  189. var
  190. iLimitProjectCount: Integer;
  191. begin
  192. iLimitProjectCount := 1;
  193. if FMultiSelect then
  194. begin
  195. if FMultiSelectType = mstE_PCD then
  196. iLimitProjectCount := 3
  197. else if FMultiSelectType = mstE_A then
  198. iLimitProjectCount := 2
  199. else if (FMultiSelectType = mstZjtz) or (FMultiSelectType = mstQgcZj) then
  200. iLimitProjectCount := 4
  201. else
  202. iLimitProjectCount := 2;
  203. end;
  204. if (zgResult.RowCount > iLimitProjectCount) then
  205. begin
  206. if FMultiSelect then
  207. begin
  208. if (FMultiSelectType = mstE_PCD) and HasPDProject and HasCDDProject then
  209. ModalResult := mrOk
  210. else if (FMultiSelectType = mstE_A) and HasABProject then
  211. ModalResult := mrOk
  212. else if (FMultiSelectType = mstZjtz) and HasPDProject and HasCddScProject and HasCddHtProject then
  213. ModalResult := mrOk
  214. else if (FMultiSelectType = mstQgcZj) and HasPDProject and HasCDDProject and HasPASProject then
  215. ModalResult := mrOk
  216. else if FMultiSelectType in [mstCommon, mstDeal, mstMental1] then
  217. ModalResult := mrOk;
  218. end
  219. else
  220. ModalResult := mrOK;
  221. end;
  222. end;
  223. constructor TProjectSelectForm.Create(AMultiSelect: Boolean;
  224. AProjectID: Integer; AProjects: TList);
  225. var
  226. stnNode: TsdIDTreeNode;
  227. begin
  228. inherited Create(nil);
  229. FMultiSelect := AMultiSelect;
  230. stdSelectProject.IDTree := ProjectManager.ProjectsTree;
  231. FSelectProjects := TList.Create;
  232. if not AMultiSelect then
  233. begin
  234. stnNode := stdSelectProject.IDTree.FindNode(AProjectID);
  235. AddRows(stnNode);
  236. end
  237. else
  238. FSelectProjects.Assign(AProjects);
  239. InitForm;
  240. AssignResult;
  241. end;
  242. procedure TProjectSelectForm.zgSelectProjectDrawCellText(ACanvas: TCanvas;
  243. const ARect: TRect; const ACoord: TPoint; AGrid: TZJGrid;
  244. const Text: String; var ADefaultDraw: Boolean);
  245. procedure GetBitmap(AImage: TBitmap);
  246. begin
  247. with stdSelectProject.IDTree.Items[ACoord.Y - 1] do
  248. if Rec.ValueByName('Type').AsInteger = 0 then
  249. if Expanded and HasChildren then
  250. MainForm.Images.GetBitmap(34, AImage)
  251. else
  252. MainForm.Images.GetBitmap(34, AImage)
  253. else
  254. MainForm.Images.GetBitmap(11, AImage);
  255. end;
  256. const
  257. rIconWidth = 16;
  258. rIconHeight = 16;
  259. var
  260. Img: TBitmap;
  261. Cell: TZjCell;
  262. rImg: TRect;
  263. begin
  264. if (ACoord.X = 2) and (ACoord.Y > zgSelectProject.FixedRowCount - 1) then
  265. begin
  266. Cell := zgSelectProject.Cells[ACoord.X, ACoord.Y];
  267. Img := TBitmap.Create;
  268. try
  269. GetBitmap(Img);
  270. case Cell.Align of
  271. gaTopLeft, gaTopCenter, gaTopRight:
  272. rImg := Rect(ARect.Left + 2, ARect.Top, ARect.Left + rIconWidth, ARect.Top + rIconHeight);
  273. gaCenterLeft, gaCenterCenter, gaCenterRight:
  274. 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);
  275. gaBottomLeft, gaBottomCenter, gaBottomRight:
  276. rImg := Rect(ARect.Left + 2, ARect.Bottom - rIconHeight, ARect.Left + rIconWidth, ARect.Bottom);
  277. end;
  278. ACanvas.StretchDraw(rImg, Img);
  279. WriteText(ACanvas, Rect(ARect.Left + rIconWidth, ARect.Top, ARect.Right, ARect.Bottom)
  280. , 2, 2, Text, Cell.Align, False);
  281. ADefaultDraw := False;
  282. finally
  283. Img.Free;
  284. end;
  285. end;
  286. end;
  287. procedure TProjectSelectForm.zgSelectProjectCellTextChanging(
  288. Sender: TObject; const ACoord: TPoint; var NewValue: String;
  289. var Accept: Boolean);
  290. var
  291. stnNode: TsdIDTreeNode;
  292. begin
  293. if (ACoord.X = 1) then
  294. begin
  295. stnNode := stdSelectProject.IDTree.Items[ACoord.Y - 1];
  296. if not FMultiSelect then
  297. begin
  298. Accept := stnNode.Rec.ValueByName('Type').AsInteger = 1;
  299. if Accept then
  300. begin
  301. ClearObjects(FSelectProjects);
  302. FSelectProjects.Clear;
  303. end;
  304. end;
  305. end;
  306. end;
  307. procedure TProjectSelectForm.zgSelectProjectSetCellText(Sender: TObject;
  308. const ACoord: TPoint; var Value: String; DisplayText: Boolean);
  309. var
  310. stnNode: TsdIDTreeNode;
  311. begin
  312. if ACoord.X = 1 then
  313. begin
  314. stnNode := stdSelectProject.IDTree.Items[ACoord.Y - 1];
  315. if Value = 'True' then
  316. AddRows(stnNode)
  317. else
  318. RemoveRows(stnNode);
  319. end;
  320. end;
  321. procedure TProjectSelectForm.zgSelectProjectGetCellText(Sender: TObject;
  322. const ACoord: TPoint; var Value: String; DisplayText: Boolean);
  323. var
  324. stnNode: TsdIDTreeNode;
  325. SelectProject: TSelectProject;
  326. begin
  327. if ACoord.X = 1 then
  328. begin
  329. stnNode := stdSelectProject.IDTree.Items[ACoord.Y - 1];
  330. if Assigned(stnNode) then
  331. begin
  332. SelectProject := FindSelectProject(stnNode.ID);
  333. if Assigned(SelectProject) then
  334. Value := 'True';
  335. end;
  336. end;
  337. end;
  338. destructor TProjectSelectForm.Destroy;
  339. begin
  340. FSelectProjects.Free;
  341. inherited;
  342. end;
  343. procedure TProjectSelectForm.AddRows(ANode: TsdIDTreeNode);
  344. var
  345. iChild: Integer;
  346. SelectProject: TSelectProject;
  347. begin
  348. if not Assigned(ANode) then Exit;
  349. SelectProject := FindSelectProject(ANode.ID);
  350. if not Assigned(SelectProject) then
  351. CreateSelectProject(ANode);
  352. if ANode.HasChildren then
  353. for iChild := 0 to ANode.ChildCount - 1 do
  354. AddRows(ANode.ChildNodes[iChild]);
  355. end;
  356. procedure TProjectSelectForm.RemoveRows(ANode: TsdIDTreeNode);
  357. var
  358. iChild: Integer;
  359. SelectProject: TSelectProject;
  360. begin
  361. if not Assigned(ANode) then Exit;
  362. SelectProject := FindSelectProject(ANode.ID);
  363. if Assigned(SelectProject) then
  364. begin
  365. FSelectProjects.Remove(SelectProject);
  366. SelectProject.Free;
  367. end;
  368. if ANode.HasChildren then
  369. for iChild := 0 to ANode.ChildCount - 1 do
  370. RemoveRows(ANode.ChildNodes[iChild]);
  371. end;
  372. procedure TProjectSelectForm.SelectResult(AProjects: TList);
  373. begin
  374. AProjects.Assign(FSelectProjects);
  375. end;
  376. procedure TProjectSelectForm.InitResultGrid;
  377. procedure InitCommonResultGrid;
  378. begin
  379. zgResult.ColCount := 2;
  380. zgResult.RowCount := 1;
  381. zgResult.Cells[1, 0].Text := '所选项目';
  382. zgResult.ColWidths[1] := 270;
  383. end;
  384. procedure InitE_PCDResultGrid;
  385. begin
  386. zgResult.ColCount := 4;
  387. zgResult.RowCount := 1;
  388. zgResult.Cells[1, 0].Text := '所选项目';
  389. zgResult.ColWidths[1] := 200;
  390. zgResult.Cells[2, 0].Text := '初步设计概算';
  391. zgResult.CellClass.Cols[2] := TZjCheckBoxCell;
  392. zgResult.ColWidths[2] := 47;
  393. zgResult.Cells[3, 0].Text := '施工图设计预算';
  394. zgResult.CellClass.Cols[3] := TZjCheckBoxCell;
  395. zgResult.ColWidths[3] := 55;
  396. end;
  397. procedure InitE_AResultGrid;
  398. begin
  399. zgResult.ColCount := 3;
  400. zgResult.RowCount := 1;
  401. zgResult.Cells[1, 0].Text := '所选项目';
  402. zgResult.ColWidths[1] := 230;
  403. zgResult.Cells[2, 0].Text := '批准概(预)算';
  404. zgResult.CellClass.Cols[2] := TZjCheckBoxCell;
  405. zgResult.ColWidths[2] := 42;
  406. end;
  407. procedure InitDealResultGrid;
  408. begin
  409. zgResult.ColCount := 3;
  410. zgResult.RowCount := 1;
  411. zgResult.Cells[1, 0].Text := '所选项目';
  412. zgResult.ColWidths[1] := 230;
  413. zgResult.Cells[2, 0].Text := '多合同项目';
  414. zgResult.CellClass.Cols[2] := TZjCheckBoxCell;
  415. zgResult.ColWidths[2] := 42;
  416. end;
  417. procedure InitZjtzResultGrid;
  418. begin
  419. zgResult.ColCount := 5;
  420. zgResult.RowCount := 1;
  421. zgResult.Cells[1, 0].Text := '所选项目';
  422. zgResult.ColWidths[1] := 200;
  423. zgResult.Cells[2, 0].Text := '初步设计概算';
  424. zgResult.CellClass.Cols[2] := TZjCheckBoxCell;
  425. zgResult.ColWidths[2] := 47;
  426. zgResult.Cells[3, 0].Text := '施工图设计审查预算';
  427. zgResult.CellClass.Cols[3] := TZjCheckBoxCell;
  428. zgResult.ColWidths[3] := 60;
  429. zgResult.Cells[4, 0].Text := '施工图设计合同费用';
  430. zgResult.CellClass.Cols[4] := TZjCheckBoxCell;
  431. zgResult.ColWidths[4] := 60;
  432. end;
  433. procedure InitQgcZjResultGrid;
  434. begin
  435. zgResult.ColCount := 5;
  436. zgResult.RowCount := 1;
  437. zgResult.Cells[1, 0].Text := '所选项目';
  438. zgResult.ColWidths[1] := 200;
  439. zgResult.Cells[2, 0].Text := '工程可行性研究';
  440. zgResult.CellClass.Cols[2] := TZjCheckBoxCell;
  441. zgResult.ColWidths[2] := 60;
  442. zgResult.Cells[3, 0].Text := '初步设计';
  443. zgResult.CellClass.Cols[3] := TZjCheckBoxCell;
  444. zgResult.ColWidths[3] := 47;
  445. zgResult.Cells[4, 0].Text := '施工图设计';
  446. zgResult.CellClass.Cols[4] := TZjCheckBoxCell;
  447. zgResult.ColWidths[4] := 50;
  448. end;
  449. begin
  450. case FMultiSelectType of
  451. mstCommon: InitCommonResultGrid;
  452. mstE_PCD: InitE_PCDResultGrid;
  453. mstE_A: InitE_AResultGrid;
  454. mstDeal: InitDealResultGrid;
  455. mstZjtz: InitZjtzResultGrid;
  456. mstQgcZj: InitQgcZjResultGrid;
  457. end;
  458. end;
  459. procedure TProjectSelectForm.zgResultGetCellText(Sender: TObject;
  460. const ACoord: TPoint; var Value: String; DisplayText: Boolean);
  461. var
  462. SelectProject: TSelectProject;
  463. begin
  464. if (ACoord.Y > 0) and (ACoord.X > 1) then
  465. begin
  466. SelectProject := TSelectProject(zgResult.Rows[ACoord.Y].Data);
  467. if not Assigned(SelectProject) then Exit;
  468. case FMultiSelectType of
  469. mstE_PCD: if ((ACoord.X = 2) and SelectProject.IsPD) or ((ACoord.X = 3) and SelectProject.IsCDD) then Value := 'True'
  470. else Value := 'False';
  471. mstE_A: if SelectProject.IsAB then Value := 'True'
  472. else Value := 'False';
  473. mstDeal: if SelectProject.IsDeal then Value := 'True'
  474. else Value := 'False';
  475. mstZjtz: if ((ACoord.X = 2) and SelectProject.IsPD) or
  476. ((ACoord.X = 3) and SelectProject.IsCddSc) or
  477. ((ACoord.X = 4) and SelectProject.IsCddHt)
  478. then Value := 'True'
  479. else Value := 'False';
  480. mstQgcZj: if ((ACoord.X = 2) and SelectProject.IsPAS) or
  481. ((ACoord.X = 3) and SelectProject.IsPD) or
  482. ((ACoord.X = 4) and SelectProject.IsCDD)
  483. then Value := 'True'
  484. else Value := 'False';
  485. end;
  486. end;
  487. end;
  488. procedure TProjectSelectForm.zgResultSetCellText(Sender: TObject;
  489. const ACoord: TPoint; var Value: String; DisplayText: Boolean);
  490. var
  491. SelectProject: TSelectProject;
  492. begin
  493. if not FOnAssignResult and (ACoord.X > 1) and (ACoord.Y > 0) then
  494. begin
  495. SelectProject := TSelectProject(zgResult.Rows[ACoord.Y].Data);
  496. if Value = 'True' then
  497. case FMultiSelectType of
  498. mstE_PCD:
  499. if ACoord.X = 2 then
  500. SetPDProject(SelectProject.ProjectID)
  501. else if ACoord.X = 3 then
  502. SetCDDProject(SelectProject.ProjectID);
  503. mstE_A: SetABProject(SelectProject.ProjectID);
  504. mstDeal: SelectProject.IsDeal := True;
  505. mstZjtz:
  506. if ACoord.X = 2 then
  507. SetPDProject(SelectProject.ProjectID)
  508. else if ACoord.X = 3 then
  509. SetCddScProject(SelectProject.ProjectID)
  510. else if ACoord.X = 4 then
  511. SetCddHtProject(SelectProject.ProjectID);
  512. mstQgcZj:
  513. if ACoord.X = 2 then
  514. SetPASProject(SelectProject.ProjectID)
  515. else if ACoord.X = 3 then
  516. SetPDProject(SelectProject.ProjectID)
  517. else if ACoord.X = 4 then
  518. SetCDDProject(SelectProject.ProjectID);
  519. end
  520. else
  521. case FMultiSelectType of
  522. mstE_PCD:
  523. if ACoord.X = 2 then
  524. SelectProject.IsPD := False
  525. else
  526. SelectProject.IsCDD := False;
  527. mstE_A: SelectProject.IsAB := False;
  528. mstDeal: SelectProject.IsDeal := False;
  529. mstZjtz:
  530. if ACoord.X = 2 then
  531. SelectProject.IsPD := False
  532. else if ACoord.X = 3 then
  533. SelectProject.IsCddSc := False
  534. else if ACoord.X = 4 then
  535. SelectProject.IsCddHt := False;
  536. mstQgcZj:
  537. if ACoord.X = 2 then
  538. SelectProject.IsPAS := False
  539. else if ACoord.X = 3 then
  540. SelectProject.IsPD := False
  541. else if ACoord.X = 4 then
  542. SelectProject.IsCDD := False;
  543. end;
  544. end;
  545. zgResult.InvalidateCol(ACoord.X);
  546. zgResult.InvalidateRow(ACoord.Y);
  547. end;
  548. procedure TProjectSelectForm.InitForm;
  549. var
  550. iWidth: Integer;
  551. begin
  552. if not FMultiSelect then
  553. Caption := '请选择原报项目'
  554. else
  555. Caption := '请选择汇总项目';
  556. case FMultiSelectType of
  557. mstE_PCD: Caption := Caption + ',并勾选初步设计、施工图设计项目';
  558. mstE_A: Caption := Caption + ',并勾选批准概(预)算项目';
  559. mstDeal: Caption := Caption + ',并勾选其中的多合同项目';
  560. mstZjtz: Caption := Caption + ',并勾选初步设计、施工图设计审查预算、施工图设计合同费用项目';
  561. mstQgcZj: Caption := Caption + ',并勾选工程可行性研究、初步设计、施工图设计项目';
  562. end;
  563. // 甘肃高管局定制,隐藏结果表
  564. iWidth := GetSystemMetrics(SM_CXFRAME);
  565. if FMultiSelectType = mstMental1 then
  566. ClientWidth := 384
  567. else if FMultiSelectType = mstQgcZj then
  568. ClientWidth := 799
  569. else if FMultiSelectType = mstZjtz then
  570. ClientWidth := 809
  571. else
  572. ClientWidth := 729;
  573. end;
  574. procedure TProjectSelectForm.SetMultiSelectType(
  575. const Value: TMultiSelectType);
  576. begin
  577. FMultiSelectType := Value;
  578. InitForm;
  579. AssignResult;
  580. end;
  581. function TProjectSelectForm.FindSelectProject(
  582. AProjectID: Integer): TSelectProject;
  583. var
  584. i: Integer;
  585. SelectProject: TSelectProject;
  586. begin
  587. Result := nil;
  588. for i := 0 to FSelectProjects.Count - 1 do
  589. begin
  590. SelectProject := TSelectProject(FSelectProjects.Items[i]);
  591. if SelectProject.FProjectID = AProjectID then
  592. begin
  593. Result := SelectProject;
  594. Break;
  595. end;
  596. end;
  597. end;
  598. function TProjectSelectForm.CreateSelectProject(
  599. ANode: TsdIDTreeNode): TSelectProject;
  600. begin
  601. Result := TSelectProject.Create;
  602. FSelectProjects.Add(Result);
  603. Result.ProjectID := ANode.ID;
  604. Result.FIsTender := ANode.Rec.ValueByName('Type').AsInteger = 1;
  605. Result.FIsPD := False;
  606. Result.FIsCDD := False;
  607. Result.FIsAB := False;
  608. Result.FIsDeal := False;
  609. end;
  610. procedure TProjectSelectForm.SetPDProject(AProjecID: Integer);
  611. var
  612. i: Integer;
  613. SelectProject: TSelectProject;
  614. begin
  615. for i := 0 to FSelectProjects.Count - 1 do
  616. begin
  617. SelectProject := TSelectProject(FSelectProjects.Items[i]);
  618. SelectProject.IsPD := SelectProject.ProjectID = AProjecID;
  619. if SelectProject.IsPD then
  620. begin
  621. if SelectProject.IsPAS then
  622. SelectProject.IsPAS := False;
  623. if SelectProject.IsCDD then
  624. SelectProject.IsCDD := False;
  625. if SelectProject.IsAB then
  626. SelectProject.IsAB := False;
  627. if SelectProject.IsDeal then
  628. SelectProject.IsDeal := False;
  629. if SelectProject.IsCddSc then
  630. SelectProject.IsCddSc := False;
  631. if SelectProject.IsCddHt then
  632. SelectProject.IsCddHt := False;
  633. end;
  634. end;
  635. end;
  636. procedure TProjectSelectForm.SetABProject(AProjectID: Integer);
  637. var
  638. i: Integer;
  639. SelectProject: TSelectProject;
  640. begin
  641. for i := 0 to FSelectProjects.Count - 1 do
  642. begin
  643. SelectProject := TSelectProject(FSelectProjects.Items[i]);
  644. SelectProject.IsAB := SelectProject.ProjectID = AProjectID;
  645. if SelectProject.IsAB then
  646. begin
  647. if SelectProject.IsPAS then
  648. SelectProject.IsPAS := False;
  649. if SelectProject.IsPD then
  650. SelectProject.IsPD := False;
  651. if SelectProject.IsCDD then
  652. SelectProject.IsCDD := False;
  653. if SelectProject.IsDeal then
  654. SelectProject.IsDeal := False;
  655. if SelectProject.IsCddSc then
  656. SelectProject.IsCddSc := False;
  657. if SelectProject.IsCddHt then
  658. SelectProject.IsCddHt := False;
  659. end;
  660. end;
  661. end;
  662. procedure TProjectSelectForm.SetCDDProject(AProjectID: Integer);
  663. var
  664. i: Integer;
  665. SelectProject: TSelectProject;
  666. begin
  667. for i := 0 to FSelectProjects.Count - 1 do
  668. begin
  669. SelectProject := TSelectProject(FSelectProjects.Items[i]);
  670. SelectProject.IsCDD := SelectProject.ProjectID = AProjectID;
  671. if SelectProject.IsCDD then
  672. begin
  673. if SelectProject.IsPAS then
  674. SelectProject.IsPAS := False;
  675. if SelectProject.IsPD then
  676. SelectProject.IsPD := False;
  677. if SelectProject.IsAB then
  678. SelectProject.IsAB := False;
  679. if SelectProject.IsDeal then
  680. SelectProject.IsDeal := False;
  681. if SelectProject.IsCddSc then
  682. SelectProject.IsCddSc := False;
  683. if SelectProject.IsCddHt then
  684. SelectProject.IsCddHt := False;
  685. end;
  686. end;
  687. end;
  688. function TProjectSelectForm.HasABProject: Boolean;
  689. var
  690. i: Integer;
  691. SelectProject: TSelectProject;
  692. begin
  693. Result := False;
  694. for i := 0 to FSelectProjects.Count - 1 do
  695. begin
  696. SelectProject := TSelectProject(FSelectProjects.Items[i]);
  697. if SelectProject.IsAB then
  698. begin
  699. Result := True;
  700. Break;
  701. end;
  702. end;
  703. end;
  704. function TProjectSelectForm.HasCDDProject: Boolean;
  705. var
  706. i: Integer;
  707. SelectProject: TSelectProject;
  708. begin
  709. Result := False;
  710. for i := 0 to FSelectProjects.Count - 1 do
  711. begin
  712. SelectProject := TSelectProject(FSelectProjects.Items[i]);
  713. if SelectProject.IsCDD then
  714. begin
  715. Result := True;
  716. Break;
  717. end;
  718. end;
  719. end;
  720. function TProjectSelectForm.HasPDProject: Boolean;
  721. var
  722. i: Integer;
  723. SelectProject: TSelectProject;
  724. begin
  725. Result := False;
  726. for i := 0 to FSelectProjects.Count - 1 do
  727. begin
  728. SelectProject := TSelectProject(FSelectProjects.Items[i]);
  729. if SelectProject.IsPD then
  730. begin
  731. Result := True;
  732. Break;
  733. end;
  734. end;
  735. end;
  736. function TProjectSelectForm.HasCddHtProject: Boolean;
  737. var
  738. i: Integer;
  739. SelectProject: TSelectProject;
  740. begin
  741. Result := False;
  742. for i := 0 to FSelectProjects.Count - 1 do
  743. begin
  744. SelectProject := TSelectProject(FSelectProjects.Items[i]);
  745. if SelectProject.IsCddHt then
  746. begin
  747. Result := True;
  748. Break;
  749. end;
  750. end;
  751. end;
  752. function TProjectSelectForm.HasCddScProject: Boolean;
  753. var
  754. i: Integer;
  755. SelectProject: TSelectProject;
  756. begin
  757. Result := False;
  758. for i := 0 to FSelectProjects.Count - 1 do
  759. begin
  760. SelectProject := TSelectProject(FSelectProjects.Items[i]);
  761. if SelectProject.IsCddSc then
  762. begin
  763. Result := True;
  764. Break;
  765. end;
  766. end;
  767. end;
  768. procedure TProjectSelectForm.SetCddHtProject(AProjectID: Integer);
  769. var
  770. i: Integer;
  771. SelectProject: TSelectProject;
  772. begin
  773. for i := 0 to FSelectProjects.Count - 1 do
  774. begin
  775. SelectProject := TSelectProject(FSelectProjects.Items[i]);
  776. SelectProject.IsCddHt := SelectProject.ProjectID = AProjectID;
  777. if SelectProject.IsCddHt then
  778. begin
  779. if SelectProject.IsPAS then
  780. SelectProject.IsPAS := False;
  781. if SelectProject.IsPD then
  782. SelectProject.IsPD := False;
  783. if SelectProject.IsCDD then
  784. SelectProject.IsCDD := False;
  785. if SelectProject.IsAB then
  786. SelectProject.IsAB := False;
  787. if SelectProject.IsDeal then
  788. SelectProject.IsDeal := False;
  789. if SelectProject.IsCddSc then
  790. SelectProject.IsCddSc := False;
  791. end;
  792. end;
  793. end;
  794. procedure TProjectSelectForm.SetCddScProject(AProjectID: Integer);
  795. var
  796. i: Integer;
  797. SelectProject: TSelectProject;
  798. begin
  799. for i := 0 to FSelectProjects.Count - 1 do
  800. begin
  801. SelectProject := TSelectProject(FSelectProjects.Items[i]);
  802. SelectProject.IsCddSc := SelectProject.ProjectID = AProjectID;
  803. if SelectProject.IsCddSc then
  804. begin
  805. if SelectProject.IsPAS then
  806. SelectProject.IsPAS := False;
  807. if SelectProject.IsPD then
  808. SelectProject.IsPD := False;
  809. if SelectProject.IsCDD then
  810. SelectProject.IsCDD := False;
  811. if SelectProject.IsAB then
  812. SelectProject.IsAB := False;
  813. if SelectProject.IsDeal then
  814. SelectProject.IsDeal := False;
  815. if SelectProject.IsCddHt then
  816. SelectProject.IsCddHt := False;
  817. end;
  818. end;
  819. end;
  820. function TProjectSelectForm.HasPASProject: Boolean;
  821. var
  822. i: Integer;
  823. SelectProject: TSelectProject;
  824. begin
  825. Result := False;
  826. for i := 0 to FSelectProjects.Count - 1 do
  827. begin
  828. SelectProject := TSelectProject(FSelectProjects.Items[i]);
  829. if SelectProject.IsPAS then
  830. begin
  831. Result := True;
  832. Break;
  833. end;
  834. end;
  835. end;
  836. procedure TProjectSelectForm.SetPASProject(AProjecID: Integer);
  837. var
  838. i: Integer;
  839. SelectProject: TSelectProject;
  840. begin
  841. for i := 0 to FSelectProjects.Count - 1 do
  842. begin
  843. SelectProject := TSelectProject(FSelectProjects.Items[i]);
  844. SelectProject.IsPAS := SelectProject.ProjectID = AProjecID;
  845. if SelectProject.IsPAS then
  846. begin
  847. if SelectProject.IsPD then
  848. SelectProject.IsPD := False;
  849. if SelectProject.IsCDD then
  850. SelectProject.IsCDD := False;
  851. if SelectProject.IsAB then
  852. SelectProject.IsAB := False;
  853. if SelectProject.IsDeal then
  854. SelectProject.IsDeal := False;
  855. if SelectProject.IsCddSc then
  856. SelectProject.IsCddSc := False;
  857. if SelectProject.IsCddHt then
  858. SelectProject.IsCddHt := False;
  859. end;
  860. end;
  861. end;
  862. end.