tpPegPartSettingFrm.pas 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185
  1. unit tpPegPartSettingFrm;
  2. interface
  3. uses
  4. Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  5. Dialogs, StdCtrls, ZJGrid, ExtCtrls;
  6. type
  7. TtpPegPartSettingForm = class(TForm)
  8. leCount: TLabeledEdit;
  9. zgTenders: TZJGrid;
  10. lblHint: TLabel;
  11. btnOk: TButton;
  12. btnCancel: TButton;
  13. procedure leCountKeyPress(Sender: TObject; var Key: Char);
  14. procedure leCountChange(Sender: TObject);
  15. procedure zgTendersCellCanEdit(Sender: TObject; const ACoord: TPoint;
  16. var Allow: Boolean);
  17. procedure zgTendersCellTextChanged(Sender: TObject; Col, Row: Integer);
  18. procedure btnOkClick(Sender: TObject);
  19. private
  20. FBeginPeg: string;
  21. FEndPeg: string;
  22. function CheckEmptyPeg: Boolean;
  23. procedure Init(ACount: Integer);
  24. procedure LoadHistoryData(APartPegs: TStringList);
  25. public
  26. constructor Create(APartPegs: TStringList);
  27. destructor Destroy; override;
  28. procedure AssignResult(APegs: TStringList);
  29. end;
  30. function PegPartSetting(APartPegs: TStringList): Boolean;
  31. implementation
  32. uses
  33. mPegFilter, UtilMethods;
  34. function PegPartSetting(APartPegs: TStringList): Boolean;
  35. var
  36. SetForm: TtpPegPartSettingForm;
  37. begin
  38. SetForm := TtpPegPartSettingForm.Create(APartPegs);
  39. try
  40. Result := SetForm.ShowModal = mrOk;
  41. if Result then
  42. SetForm.AssignResult(APartPegs);
  43. finally
  44. SetForm.Free;
  45. end;
  46. end;
  47. {$R *.dfm}
  48. procedure TtpPegPartSettingForm.leCountKeyPress(Sender: TObject;
  49. var Key: Char);
  50. begin
  51. if not (Key in ['0'..'9', #8, #13]) then
  52. Key := #0;
  53. end;
  54. procedure TtpPegPartSettingForm.leCountChange(Sender: TObject);
  55. var
  56. iCount: Integer;
  57. begin
  58. iCount := StrToIntDef(leCount.Text, 0);
  59. if iCount <= 30 then
  60. begin
  61. if iCount = 1 then
  62. lblHint.Caption := '仅划分为1个标段'
  63. else
  64. lblHint.Caption := Format('请输入%s~%s之间的前%d个标段的终点桩号:', [FBeginPeg, FEndPeg, iCount-1]);
  65. Init(iCount);
  66. end
  67. else
  68. WarningMessage('最多仅支持划分为30个标段。');
  69. end;
  70. procedure TtpPegPartSettingForm.zgTendersCellCanEdit(Sender: TObject;
  71. const ACoord: TPoint; var Allow: Boolean);
  72. begin
  73. Allow := (ACoord.X = 2) and (ACoord.Y > 0) and (ACoord.Y < zgTenders.RowCount-1);
  74. end;
  75. constructor TtpPegPartSettingForm.Create(APartPegs: TStringList);
  76. begin
  77. inherited Create(nil);
  78. LoadHistoryData(APartPegs);
  79. end;
  80. destructor TtpPegPartSettingForm.Destroy;
  81. begin
  82. inherited;
  83. end;
  84. procedure TtpPegPartSettingForm.Init(ACount: Integer);
  85. var
  86. iRow: Integer;
  87. begin
  88. zgTenders.RowCount := ACount+1;
  89. zgTenders.Cells[1, 0].Text := '起点桩号';
  90. zgTenders.Cells[2, 0].Text := '终点桩号';
  91. zgTenders.Cells[1, 1].Text := FBeginPeg;
  92. for iRow := 1 to zgTenders.RowCount - 1 do
  93. begin
  94. zgTenders.Cells[1, iRow].Color := clSilver;
  95. zgTenders.Cells[1, iRow].Align := gaCenterLeft;
  96. zgTenders.Cells[2, iRow].Color := clWindow;
  97. zgTenders.Cells[2, iRow].Align := gaCenterLeft;
  98. end;
  99. zgTenders.Cells[2, zgTenders.RowCount-1].Text := FEndPeg;
  100. zgTenders.Cells[2, zgTenders.RowCount-1].Color := clSilver;
  101. end;
  102. procedure TtpPegPartSettingForm.LoadHistoryData(APartPegs: TStringList);
  103. var
  104. iPeg: Integer;
  105. begin
  106. PegFilter.Filter(APartPegs.Strings[0]);
  107. FBeginPeg := PegFilter.BeginPeg;
  108. if APartPegs.Count > 1 then
  109. begin
  110. PegFilter.Filter(APartPegs.Strings[APartPegs.Count-1]);
  111. FEndPeg := PegFilter.EndPeg;
  112. end
  113. else
  114. FEndPeg := PegFilter.EndPeg;
  115. leCount.Text := IntToStr(APartPegs.Count);
  116. if APartPegs.Count = 1 then Exit;
  117. for iPeg := 1 to APartPegs.Count - 1 do
  118. begin
  119. PegFilter.Filter(APartPegs.Strings[iPeg]);
  120. zgTenders.Cells[2, iPeg].Text := PegFilter.BeginPeg;
  121. end;
  122. end;
  123. procedure TtpPegPartSettingForm.zgTendersCellTextChanged(Sender: TObject;
  124. Col, Row: Integer);
  125. begin
  126. if (Col = 2) and (Row > 0) and (Row < zgTenders.RowCount-1) then
  127. zgTenders.Cells[Col-1, Row+1].Text := zgTenders.Cells[Col, Row].Text;
  128. end;
  129. procedure TtpPegPartSettingForm.AssignResult(APegs: TStringList);
  130. var
  131. iRow: Integer;
  132. sPeg: string;
  133. begin
  134. APegs.Clear;
  135. for iRow := 1 to zgTenders.RowCount - 1 do
  136. begin
  137. sPeg := zgTenders.Cells[1, iRow].Text + '~' + zgTenders.Cells[2, iRow].Text;
  138. APegs.Add(sPeg);
  139. end;
  140. end;
  141. procedure TtpPegPartSettingForm.btnOkClick(Sender: TObject);
  142. begin
  143. if CheckEmptyPeg then
  144. WarningMessage('请填写需要的桩号信息。')
  145. else
  146. ModalResult := mrOk;
  147. end;
  148. function TtpPegPartSettingForm.CheckEmptyPeg: Boolean;
  149. var
  150. iRow: Integer;
  151. begin
  152. Result := False;
  153. for iRow := 1 to zgTenders.RowCount - 1 do
  154. begin
  155. Result := (zgTenders.Cells[1, iRow].Text = '') or
  156. (zgTenders.Cells[2, iRow].Text = '');
  157. if Result then Break;
  158. end;
  159. end;
  160. end.