| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185 | unit tpPegPartSettingFrm;interfaceuses  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,  Dialogs, StdCtrls, ZJGrid, ExtCtrls;type  TtpPegPartSettingForm = class(TForm)    leCount: TLabeledEdit;    zgTenders: TZJGrid;    lblHint: TLabel;    btnOk: TButton;    btnCancel: TButton;    procedure leCountKeyPress(Sender: TObject; var Key: Char);    procedure leCountChange(Sender: TObject);    procedure zgTendersCellCanEdit(Sender: TObject; const ACoord: TPoint;      var Allow: Boolean);    procedure zgTendersCellTextChanged(Sender: TObject; Col, Row: Integer);    procedure btnOkClick(Sender: TObject);  private    FBeginPeg: string;    FEndPeg: string;    function CheckEmptyPeg: Boolean;    procedure Init(ACount: Integer);    procedure LoadHistoryData(APartPegs: TStringList);  public    constructor Create(APartPegs: TStringList);    destructor Destroy; override;    procedure AssignResult(APegs: TStringList);  end;function PegPartSetting(APartPegs: TStringList): Boolean;implementationuses  mPegFilter, UtilMethods;function PegPartSetting(APartPegs: TStringList): Boolean;var  SetForm: TtpPegPartSettingForm;begin  SetForm := TtpPegPartSettingForm.Create(APartPegs);  try    Result := SetForm.ShowModal = mrOk;    if Result then      SetForm.AssignResult(APartPegs);  finally    SetForm.Free;  end;end;{$R *.dfm}procedure TtpPegPartSettingForm.leCountKeyPress(Sender: TObject;  var Key: Char);begin  if not (Key in ['0'..'9', #8, #13]) then    Key := #0;end;procedure TtpPegPartSettingForm.leCountChange(Sender: TObject);var  iCount: Integer;begin  iCount := StrToIntDef(leCount.Text, 0);  if iCount <= 30 then  begin    if iCount = 1 then      lblHint.Caption := '仅划分为1个标段'    else      lblHint.Caption := Format('请输入%s~%s之间的前%d个标段的终点桩号:', [FBeginPeg, FEndPeg, iCount-1]);    Init(iCount);  end  else    WarningMessage('最多仅支持划分为30个标段。');end;procedure TtpPegPartSettingForm.zgTendersCellCanEdit(Sender: TObject;  const ACoord: TPoint; var Allow: Boolean);begin  Allow := (ACoord.X = 2) and (ACoord.Y > 0) and (ACoord.Y < zgTenders.RowCount-1);end;constructor TtpPegPartSettingForm.Create(APartPegs: TStringList);begin  inherited Create(nil);  LoadHistoryData(APartPegs);end;destructor TtpPegPartSettingForm.Destroy;begin  inherited;end;procedure TtpPegPartSettingForm.Init(ACount: Integer);var  iRow: Integer;begin  zgTenders.RowCount := ACount+1;  zgTenders.Cells[1, 0].Text := '起点桩号';  zgTenders.Cells[2, 0].Text := '终点桩号';  zgTenders.Cells[1, 1].Text := FBeginPeg;  for iRow := 1 to zgTenders.RowCount - 1 do  begin    zgTenders.Cells[1, iRow].Color := clSilver;    zgTenders.Cells[1, iRow].Align := gaCenterLeft;    zgTenders.Cells[2, iRow].Color := clWindow;    zgTenders.Cells[2, iRow].Align := gaCenterLeft;  end;  zgTenders.Cells[2, zgTenders.RowCount-1].Text := FEndPeg;  zgTenders.Cells[2, zgTenders.RowCount-1].Color := clSilver;end;procedure TtpPegPartSettingForm.LoadHistoryData(APartPegs: TStringList);var  iPeg: Integer;begin  PegFilter.Filter(APartPegs.Strings[0]);  FBeginPeg := PegFilter.BeginPeg;  if APartPegs.Count > 1 then  begin    PegFilter.Filter(APartPegs.Strings[APartPegs.Count-1]);    FEndPeg := PegFilter.EndPeg;  end  else    FEndPeg := PegFilter.EndPeg;  leCount.Text := IntToStr(APartPegs.Count);  if APartPegs.Count = 1 then Exit;  for iPeg := 1 to APartPegs.Count - 1 do  begin    PegFilter.Filter(APartPegs.Strings[iPeg]);    zgTenders.Cells[2, iPeg].Text := PegFilter.BeginPeg;  end;end;procedure TtpPegPartSettingForm.zgTendersCellTextChanged(Sender: TObject;  Col, Row: Integer);begin  if (Col = 2) and (Row > 0) and (Row < zgTenders.RowCount-1) then    zgTenders.Cells[Col-1, Row+1].Text := zgTenders.Cells[Col, Row].Text;end;procedure TtpPegPartSettingForm.AssignResult(APegs: TStringList);var  iRow: Integer;  sPeg: string;begin  APegs.Clear;  for iRow := 1 to zgTenders.RowCount - 1 do  begin    sPeg := zgTenders.Cells[1, iRow].Text + '~' + zgTenders.Cells[2, iRow].Text;    APegs.Add(sPeg);  end;end;procedure TtpPegPartSettingForm.btnOkClick(Sender: TObject);begin  if CheckEmptyPeg then    WarningMessage('请填写需要的桩号信息。')  else    ModalResult := mrOk;end;function TtpPegPartSettingForm.CheckEmptyPeg: Boolean;var  iRow: Integer;begin  Result := False;  for iRow := 1 to zgTenders.RowCount - 1 do  begin    Result := (zgTenders.Cells[1, iRow].Text = '') or              (zgTenders.Cells[2, iRow].Text = '');    if Result then Break;  end;end;end.
 |