rpgZoneProjGatherSelectFrm.pas 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160
  1. unit rpgZoneProjGatherSelectFrm;
  2. interface
  3. uses
  4. ProjGatherSelectFme,
  5. Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  6. Dialogs, ExtCtrls, StdCtrls;
  7. type
  8. TrpgZoneProjGatherSelectForm = class(TForm)
  9. pnlTop: TPanel;
  10. pnlPhase: TPanel;
  11. btnOk: TButton;
  12. btnCancel: TButton;
  13. leBeginPhaseIndex: TLabeledEdit;
  14. leEndPhaseIndex: TLabeledEdit;
  15. lblPhase: TLabel;
  16. lblPhaseHint: TLabel;
  17. procedure leBeginPhaseIndexKeyPress(Sender: TObject; var Key: Char);
  18. procedure leBeginPhaseIndexChange(Sender: TObject);
  19. procedure btnOkClick(Sender: TObject);
  20. private
  21. FSelectFrame: TProjGatherSelectFrame;
  22. FError: Integer;
  23. procedure CheckPhaseIndex;
  24. procedure RefreshDiffWindows;
  25. function GetBeginPhaseIndex: Integer;
  26. function GetEndPhaseIndex: Integer;
  27. procedure SetBeginPhaseIndex(const Value: Integer);
  28. procedure SetEndPhaseIndex(const Value: Integer);
  29. public
  30. constructor Create(AProjectID: Integer; AProjs: TList);
  31. destructor Destroy; override;
  32. property BeginPhaseIndex: Integer read GetBeginPhaseIndex write SetBeginPhaseIndex;
  33. property EndPhaseIndex: Integer read GetEndPhaseIndex write SetEndPhaseIndex;
  34. end;
  35. function SelectGatherProject(AProjectID: Integer; AProjs: TList; var ABeginPhaseIndex, AEndPhaseIndex: Integer): Boolean;
  36. implementation
  37. uses
  38. UtilMethods, Math;
  39. {$R *.dfm}
  40. function SelectGatherProject(AProjectID: Integer; AProjs: TList; var ABeginPhaseIndex, AEndPhaseIndex: Integer): Boolean;
  41. var
  42. vForm: TrpgZoneProjGatherSelectForm;
  43. begin
  44. vForm := TrpgZoneProjGatherSelectForm.Create(AProjectID, AProjs);
  45. vForm.BeginPhaseIndex := ABeginPhaseIndex;
  46. vForm.EndPhaseIndex := AEndPhaseIndex;
  47. try
  48. Result := vForm.ShowModal = mrOk;
  49. if Result then
  50. begin
  51. ABeginPhaseIndex := vForm.BeginPhaseIndex;
  52. AEndPhaseIndex := vForm.EndPhaseIndex;
  53. vForm.FSelectFrame.AssignResult(AProjs);
  54. end;
  55. finally
  56. vForm.Free;
  57. end;
  58. end;
  59. constructor TrpgZoneProjGatherSelectForm.Create(AProjectID: Integer; AProjs: TList);
  60. begin
  61. inherited Create(nil);
  62. FSelectFrame := TProjGatherSelectFrame.Create(AProjectID, nil);
  63. AlignControl(FSelectFrame, pnlTop, alClient);
  64. FSelectFrame.LoadHistorySelects(AProjs);
  65. FSelectFrame.AfterSelectProject := CheckPhaseIndex;
  66. RefreshDiffWindows;
  67. end;
  68. destructor TrpgZoneProjGatherSelectForm.Destroy;
  69. begin
  70. FSelectFrame.Free;
  71. inherited;
  72. end;
  73. function TrpgZoneProjGatherSelectForm.GetBeginPhaseIndex: Integer;
  74. begin
  75. Result := StrToIntDef(leBeginPhaseIndex.Text, -1);
  76. end;
  77. function TrpgZoneProjGatherSelectForm.GetEndPhaseIndex: Integer;
  78. begin
  79. Result := StrToIntDef(leEndPhaseIndex.Text, -1);
  80. end;
  81. procedure TrpgZoneProjGatherSelectForm.leBeginPhaseIndexKeyPress(Sender: TObject; var Key: Char);
  82. begin
  83. if not (Key in ['0'..'9', #8, #13]) then
  84. Key := #0;
  85. end;
  86. procedure TrpgZoneProjGatherSelectForm.SetBeginPhaseIndex(const Value: Integer);
  87. begin
  88. if (Value >= 0) and (Value <= 50) then
  89. leBeginPhaseIndex.Text := IntToStr(Value)
  90. else
  91. leBeginPhaseIndex.Text := '';
  92. end;
  93. procedure TrpgZoneProjGatherSelectForm.SetEndPhaseIndex(const Value: Integer);
  94. begin
  95. if (Value >= 0) and (Value <= 50) then
  96. leEndPhaseIndex.Text := IntToStr(Value)
  97. else
  98. leEndPhaseIndex.Text := '';
  99. end;
  100. procedure TrpgZoneProjGatherSelectForm.leBeginPhaseIndexChange(
  101. Sender: TObject);
  102. begin
  103. CheckPhaseIndex;
  104. end;
  105. procedure TrpgZoneProjGatherSelectForm.CheckPhaseIndex;
  106. begin
  107. FError := 0;
  108. if EndPhaseIndex < BeginPhaseIndex then
  109. FError := 1
  110. else if (EndPhaseIndex > 0) and (not FSelectFrame.CheckProjPhaseValid(EndPhaseIndex)) then
  111. FError := 2
  112. else
  113. FSelectFrame.ClearMarkedProj;
  114. lblPhaseHint.Visible := FError <> 0;
  115. case FError of
  116. 1: lblPhaseHint.Caption := '截止期应大于起始期。';
  117. 2: lblPhaseHint.Caption := '标记为红色的标段,未达第'+ leEndPhaseIndex.Text +'期';
  118. end;
  119. end;
  120. procedure TrpgZoneProjGatherSelectForm.RefreshDiffWindows;
  121. begin
  122. ClientHeight := 529;
  123. ClientWidth := 827;
  124. end;
  125. procedure TrpgZoneProjGatherSelectForm.btnOkClick(Sender: TObject);
  126. begin
  127. case FError of
  128. 0: ModalResult := mrOk;
  129. 1: WarningMessage('截止期应大于起始期。');
  130. 2: if QuestMessageYesNo('部分选中标段未达第'+leEndPhaseIndex.Text+'期,是否继续汇总?', Handle) then
  131. ModalResult := mrOk;
  132. end;
  133. end;
  134. end.