⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 configfrm.pas

📁 程序用Delphi6编写
💻 PAS
字号:
unit ConfigFrm;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ComCtrls, StdCtrls, ExtCtrls, Mask, ToolEdit, CurrEdit, Grids,
  ValEdit, LingXiFrame, Spin, DateUtils;

type
  TfrmConfig = class(TForm)
    PageControl1: TPageControl;
    TabSheet1: TTabSheet;
    TabSheet2: TTabSheet;
    GroupBox1: TGroupBox;
    Image1: TImage;
    Label1: TLabel;
    CurrencyEdit1: TCurrencyEdit;
    Label2: TLabel;
    Label3: TLabel;
    CurrencyEdit2: TCurrencyEdit;
    Label4: TLabel;
    Label5: TLabel;
    CurrencyEdit3: TCurrencyEdit;
    Label6: TLabel;
    Label7: TLabel;
    gbYHSD: TGroupBox;
    Label10: TLabel;
    Label11: TLabel;
    Label12: TLabel;
    DateTimePicker1: TDateTimePicker;
    DateTimePicker2: TDateTimePicker;
    DateTimePicker3: TDateTimePicker;
    DateTimePicker4: TDateTimePicker;
    DateTimePicker5: TDateTimePicker;
    DateTimePicker6: TDateTimePicker;
    DateTimePicker7: TDateTimePicker;
    DateTimePicker8: TDateTimePicker;
    edtYhMoney1: TCurrencyEdit;
    edtYhMoney2: TCurrencyEdit;
    edtYhMoney3: TCurrencyEdit;
    edtYhMoney4: TCurrencyEdit;
    ComboBox1: TComboBox;
    btnOK: TButton;
    btnCancel: TButton;
    Frame11: TFrame1;
    Bevel1: TBevel;
    DateTimePicker9: TDateTimePicker;
    DateTimePicker10: TDateTimePicker;
    edtYhMoney5: TCurrencyEdit;
    Label8: TLabel;
    Image2: TImage;
    cbYHSD: TCheckBox;
    GroupBox2: TGroupBox;
    CheckBox1: TCheckBox;
    CheckBox2: TCheckBox;
    CheckBox3: TCheckBox;
    TabSheet3: TTabSheet;
    Image3: TImage;
    Label9: TLabel;
    Label13: TLabel;
    Label14: TLabel;
    Label15: TLabel;
    GroupBox3: TGroupBox;
    Label16: TLabel;
    seYHL: TSpinEdit;
    GroupBox4: TGroupBox;
    CheckBox5: TCheckBox;
    rgJsByDate: TRadioGroup;
    CheckBox4: TCheckBox;
    procedure cbYHSDClick(Sender: TObject);
    procedure btnOKClick(Sender: TObject);
  private
    { Private declarations }
    function CheckRepeatTime: Boolean; //检查交叠的优惠时段
    function CheckRepeatSect(CheckTimeIndex, BeginTimeSectIndex: Integer): Boolean; //检查完全一样的时段
    function InTimeSect(CheckedTimeIndex, BeginTimeIndex: Integer): Boolean;
    function InTwoDay(ABeginTime, AEndTime: TDateTime): Boolean;
    function Check0TimeSect(CheckTimeIndex: Integer): Boolean;
    procedure GetTime;
  public
    { Public declarations }
    procedure SetYHSTstate(AState: Boolean);
    procedure SetData;
    procedure GetData;
  end;

var
  frmConfig: TfrmConfig;
  YouHuiTime: array[1..10] of Double;

implementation

uses Bar;

{$R *.dfm}

procedure TfrmConfig.SetYHSTstate(AState: Boolean);
var
  I: Integer;
begin
  for I := 0 to frmConfig.ComponentCount - 1 do
  begin
    if (frmConfig.Components[I] is TControl) then
      if ((frmConfig.Components[I] as TControl).Parent = gbYHSD) then
      begin
        if ((frmConfig.Components[I] as TControl) <> cbYHSD) then
          (frmConfig.Components[i] as TControl).Enabled := AState;
      end;
  end;
end;

procedure TfrmConfig.cbYHSDClick(Sender: TObject);
begin
  if cbYHSD.Checked then
    SetYHSTstate(True)
  else
    SetYHSTstate(False);
end;

procedure TfrmConfig.GetData;
begin
  //page1
  ZDSF := CurrencyEdit1.Value;
  FeiLu := CurrencyEdit2.Value;
  ZXDW := CurrencyEdit3.Value;

  YECL := ComboBox1.ItemIndex; //余额处理
  EnableYHSD := cbYHSD.Checked;

  YouHui[1] := TimeOf(DateTimePicker1.Time);
  YouHui[2] := TimeOf(DateTimePicker2.Time); 
  YouHui[3] := TimeOf(DateTimePicker3.Time);
  YouHui[4] := TimeOf(DateTimePicker4.Time);
  YouHui[5] := TimeOf(DateTimePicker5.Time);
  YouHui[6] := TimeOf(DateTimePicker6.Time);
  YouHui[7] := TimeOf(DateTimePicker7.Time);
  YouHui[8] := TimeOf(DateTimePicker8.Time);
  YouHui[9] := TimeOf(DateTimePicker9.Time);
  YouHui[10] := TimeOf(DateTimePicker10.Time);
  YouHui[11] := edtYhMoney1.Value;
  YouHui[12] := edtYhMoney2.Value;
  YouHui[13] := edtYhMoney3.Value;
  YouHui[14] := edtYhMoney4.Value;
  YouHui[15] := edtYhMoney5.Value;

  //page2
  HY_PTSD := CheckBox1.Checked;
  HY_YHSD := CheckBox2.Checked;
  HY_TX := CheckBox3.Checked;
  //HY_TZ := CheckBox4.Checked;
  YHL := seYHL.Value;

  //page3
  AutoClear := CheckBox5.Checked;
  AddHyMoney := CheckBox4.Checked;
  JsByDate := rgJsByDate.ItemIndex;
end;

procedure TfrmConfig.SetData;
begin
  //page1
  CurrencyEdit1.Value := ZDSF;
  CurrencyEdit2.Value := FeiLu;
  CurrencyEdit3.Value := ZXDW;
  ComboBox1.ItemIndex := YECL; //余额处理
  cbYHSD.Checked := EnableYHSD;

  DateTimePicker1.Time := YouHui[1];
  DateTimePicker2.Time := YouHui[2];
  DateTimePicker3.Time := YouHui[3];
  DateTimePicker4.Time := YouHui[4];
  DateTimePicker5.Time := YouHui[5];
  DateTimePicker6.Time := YouHui[6];
  DateTimePicker7.Time := YouHui[7];
  DateTimePicker8.Time := YouHui[8];
  DateTimePicker9.Time := YouHui[9];
  DateTimePicker10.Time := YouHui[10];
  edtYhMoney1.Value := YouHui[11];
  edtYhMoney2.Value := YouHui[12];
  edtYhMoney3.Value := YouHui[13];
  edtYhMoney4.Value := YouHui[14];
  edtYhMoney5.Value := YouHui[15];

  //page2
  CheckBox1.Checked := HY_PTSD;
  CheckBox2.Checked := HY_YHSD;
  CheckBox3.Checked := HY_TX;
  //CheckBox4.Checked := HY_TZ;
  seYHL.Value := YHL;

  //page3
  CheckBox5.Checked := AutoClear;
  CheckBox4.Checked := AddHyMoney;
  rgJsByDate.ItemIndex := JsByDate;
end;

procedure TfrmConfig.btnOKClick(Sender: TObject);
begin
  GetTime;
  if CheckRepeatTime then
  begin
    ShowMessage('您所定义的时段重叠,请仔细检查!');
  end
  else
  begin
    GetData;
    WriteConfig;
    Close;
  end;
end;

function TfrmConfig.CheckRepeatTime: Boolean;
var
  I, J: Integer;
begin
  Result := False;
  for I := 1 to 10 do
  begin
    for J := 1 to 10 do
    begin
      if Odd(J) then
      begin
        if InTimeSect(I, J) then
          Result := True;
      end;
    end;
  end;
end;

procedure TfrmConfig.GetTime;
var
  I: Integer;
  J: Integer;
begin
  J := 1;
  for I := 0 to frmConfig.ComponentCount - 1 do
  begin
    if (Components[I] is TDateTimePicker) then
    begin
      YouHuiTime[J] := TimeOf((Components[I] as TDateTimePicker).Time);
      Inc(J);
      if J > 10 then Break;
    end;
  end;
end;

function TfrmConfig.InTimeSect(CheckedTimeIndex,
  BeginTimeIndex: Integer): Boolean;
var
  CheckedTime, BeginTime, EndTime: TDateTime;
begin
  CheckedTime := YouHuiTime[CheckedTimeIndex];
  BeginTime := YouHuiTime[BeginTimeIndex];
  EndTime := YouHuiTime[BeginTimeIndex + 1];
  Result := False;

  if Check0TimeSect(CheckedTimeIndex) then Exit; //对长度为0的时段直接返回False.

  if BeginTime < EndTime then
    if ((CheckedTime > BeginTime) and (CheckedTime < EndTime)) then
      Result := True;
  if BeginTime > EndTime then
    if not ((CheckedTime >= EndTime) and (CheckedTime <= BeginTime)) then
      Result := True;

  if CheckRepeatSect(CheckedTimeIndex, BeginTimeIndex) then
    Result := True; //当两个时段开始、结束时间完全一样时,用这一句可以检查出来。
end;


function TfrmConfig.InTwoDay(ABeginTime, AEndTime: TDateTime): Boolean; //对跨零点时段进行判断。
begin
  if ABeginTime > AEndTime then
    Result := True
  else
    Result := False;
end;


function TfrmConfig.Check0TimeSect(CheckTimeIndex: Integer): Boolean;
var
  BeginTime, EndTime: TDateTime;
begin
  if Odd(CheckTimeIndex) then
  begin
    BeginTime := YouHuiTime[CheckTimeIndex];
    EndTime := YouHuiTime[CheckTimeIndex + 1];
  end
  else
  begin
    BeginTime := YouHuiTime[CheckTimeIndex - 1];
    EndTime := YouHuiTime[CheckTimeIndex];
  end;

  if BeginTime = EndTime then
    Result := True
  else
    Result := False
end;

function TfrmConfig.CheckRepeatSect(CheckTimeIndex, BeginTimeSectIndex: Integer): Boolean;
var
  BeginTime, EndTime: TDateTime;
  BeginSectTime, EndSectTime: TDateTime;
  BeginTimeIndex: Integer;
begin
  if Odd(CheckTimeIndex) then
  begin
    BeginTimeIndex := CheckTimeIndex;
    BeginTime := YouHuiTime[CheckTimeIndex];
    EndTime := YouHuiTime[CheckTimeIndex + 1];
  end
  else
  begin
    BeginTimeIndex := CheckTimeIndex - 1;
    BeginTime := YouHuiTime[CheckTimeIndex - 1];
    EndTime := YouHuiTime[CheckTimeIndex];
  end;

  BeginSectTime := YouHuiTime[BeginTimeSectIndex];
  EndSectTime := YouHuiTime[BeginTimeSectIndex + 1];

  Result := False;
  if BeginTimeIndex <> BeginTimeSectIndex then
    if (BeginTime = BeginSectTime) and (EndTime = EndSectTime) then
      Result := True;
end;

end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -