unit tpPricePartSettingFrm; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, StdCtrls, ComCtrls; const sPegIgnoreHint = '各桩号间可能存在重叠,可通过该项设置多少m重叠忽略不计' + #13#10 + '如果要求重叠桩号划分为1个标段,可设置为0。'; type TPricePartInfo = class private FPartPrice: Double; FMinLength: Integer; FMinStep: Integer; public constructor Create; property PartPrice: Double read FPartPrice write FPartPrice; property MinLength: Integer read FMinLength write FMinLength; property MinStep: Integer read FMinStep write FMinStep; end; TtpPricePartSettingForm = class(TForm) lePartTotalPrice: TLabeledEdit; lblFormat: TLabel; btnOk: TButton; btnCancel: TButton; leMinLength: TLabeledEdit; udMinLength: TUpDown; leMinStep: TLabeledEdit; udMinStep: TUpDown; procedure btnOkClick(Sender: TObject); procedure lePartTotalPriceChange(Sender: TObject); procedure lePartTotalPriceKeyPress(Sender: TObject; var Key: Char); private function GetPartPrice: Double; function GetMinLength: Integer; function GetMinStep: Integer; public constructor Create(AInfo: TPricePartInfo); destructor Destroy; override; property PartPrice: Double read GetPartPrice; property MinLength: Integer read GetMinLength; property MinStep: Integer read GetMinStep; end; function PricePartSetting(AInfo: TPricePartInfo): Boolean; implementation uses UtilMethods; function PricePartSetting(AInfo: TPricePartInfo): Boolean; var SettingForm: TtpPricePartSettingForm; begin SettingForm := TtpPricePartSettingForm.Create(AInfo); try Result := SettingForm.ShowModal = mrOk; if Result then begin AInfo.PartPrice := SettingForm.PartPrice; AInfo.MinLength := SettingForm.MinLength; AInfo.MinStep := SettingForm.MinStep; end; finally SettingForm.Free; end; end; {$R *.dfm} { TtpPricePartSettingForm } constructor TtpPricePartSettingForm.Create(AInfo: TPricePartInfo); begin inherited Create(nil); if AInfo.PartPrice > 0 then lePartTotalPrice.Text := FloatToStr(AInfo.PartPrice) else lePartTotalPrice.Text := ''; udMinLength.Position := AInfo.MinLength; udMinStep.Position := AInfo.MinStep; SetWindowLong(lePartTotalPrice.Handle, GWL_STYLE, GetWindowLong(lePartTotalPrice.Handle, GWL_STYLE) or ES_RIGHT); SetWindowLong(leMinLength.Handle, GWL_STYLE, GetWindowLong(leMinLength.Handle, GWL_STYLE) or ES_RIGHT); SetWindowLong(leMinStep.Handle, GWL_STYLE, GetWindowLong(leMinStep.Handle, GWL_STYLE) or ES_RIGHT); end; destructor TtpPricePartSettingForm.Destroy; begin inherited; end; function TtpPricePartSettingForm.GetPartPrice: Double; begin Result := StrToFloatDef(lePartTotalPrice.Text, 0); end; procedure TtpPricePartSettingForm.btnOkClick(Sender: TObject); begin if PartPrice <= 0 then TipMessage('单标段目标金额应大于0。') else ModalResult := mrOk; end; procedure TtpPricePartSettingForm.lePartTotalPriceChange(Sender: TObject); begin lblFormat.Visible := PartPrice > 0; lblFormat.Caption := FormatFloat('##,###,###,###.##', PartPrice); end; procedure TtpPricePartSettingForm.lePartTotalPriceKeyPress(Sender: TObject; var Key: Char); begin if not (Key in ['0'..'9', '.', #8, #13]) then Key := #0; end; function TtpPricePartSettingForm.GetMinLength: Integer; begin Result := udMinLength.Position; end; function TtpPricePartSettingForm.GetMinStep: Integer; begin Result := udMinStep.Position; end; { TPricePartInfo } constructor TPricePartInfo.Create; begin FPartPrice := 0; FMinLength := 5; FMinStep := 100; end; end.