123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185 |
- unit tpPegPartSettingFrm;
- interface
- uses
- 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;
- implementation
- uses
- 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.
|