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

📄 mainform.pas

📁 求是科技出版的《Delphi串口通信工程开发实例导航》所有的源代码。是一本很好的书。拿出来与大家共享。
💻 PAS
📖 第 1 页 / 共 4 页
字号:
    mPter.Free;

    //**************开挡车器***********************
    if gControl.OnOffCommand(ONOFF_UP) < 0 then
    begin
        gErrorRecord.Append(1,'开挡车器错误!');
        gErrorRecord.ToListView(lvError);
    end;

    //记录收费的时间
    GetFeeTime := GetNow();
    //将数据写入数据库
    if DoGetFee() < 0 then
    begin
        gErrorRecord.Append(1,'将数据写入数据库错误!');
        gErrorRecord.ToListView(lvError);
    end;

    //用户界面数据更新
    if CardUserType = USER_FIX then
    begin
        Inc(FixUserNum);
    end
    else begin
        Inc(CasualUserNum);
        CasualUserFee := CasualUserFee + FeeOughtPay;
        FeeGet := FeeGet + FeeOughtPay;
    end;
    //用户界面更新
    FillFinacialState();   //财务状态
    //显示请刷卡
    pnlReadCard.Caption := '请刷卡...';
    //
    FeeStationState := STATE_WAIT_CARD;
end;



//主窗口启动时,先连接数据库和用户登录。
procedure TfrmMain.FormCreate(Sender: TObject);
var
    mLoginTimes: integer;
    mResult: TModalResult;
    mRet : integer;
begin
    //生成连接窗口
    try
        frmConnect := TfrmConnect.Create(nil);
        with frmConnect do
        begin
           Show();
           Repaint();
           mRet := InitialApp();
           if mRet > 0 then //初始化成功
           begin

           end
           else begin //初始化失败
               case mRet of
                   -1 : begin
                       ShowMessage('服务器中没有该收费站!');
                       Close;
                   end;
               end;
           end;
        end;
    finally
        frmConnect.Free; //
    end;

    //生成登录窗口
    try
        frmLogin := TfrmLogin.Create(nil);
        mLoginTimes := 0;
        //用户登录界面
        while mLoginTimes < 3 do         //最多不超过三次登录
        begin
            mResult := frmLogin.ShowModal();
            if  mResult = mrCancel then
            begin
                Application.Terminate;
                Exit;
            end;
            if LoginIn(gAccount,gPassword) then //合法用户
            begin
                frmLogin.Hide;        //hide login itself

                //填充主窗口要显示的数据
                FillLoginInfo();      //登录系统信息
                FillFinacialState();   //财务状态
                //设置收费站状态
                FeeStationState := STATE_WAIT_CARD;
                break;
            end;
            Inc(mLoginTimes);
        end;

        if mLoginTimes >= 3 then
        begin //非法用户
             ShowMessage('你所输入的用户名和口令错误!');
             Application.Terminate;;
             Exit;
        end;
    finally
        frmLogin.Free;  //释放登录窗口
    end;

    //初始化成员变量
    MainTimerCounter := 0;
    PreCardNum := 'FFFFFFFFFFFF';
    PhyCardNum := 'FFFFFFFFFFFF';
    CardNum := 'FFFFFFFFFFFF';
    EnterTime := 0;
    LeaveTime := 0;
    tmrMain.Enabled := True;

end;

procedure TfrmMain.mmiLoginOutClick(Sender: TObject);
var
    frmLogin: TfrmLogin;
    mRun: boolean;
    mLoginTimes: integer;
    mResult: TModalResult;
begin
    //
    mRun := True;
        //生成登录窗口
    try
        frmLogin := TfrmLogin.Create(nil);
        mLoginTimes := 0;
        //用户登录界面
        while mLoginTimes < 3 do         //最多不超过三次登录
        begin
            mResult := frmLogin.ShowModal();
            if  mResult = 2 then //2 - mrCancel
            begin
                mRun := False;
                Break;
            end;
            if LoginIn(gAccount,gPassword) then //合法用户
            begin
                break;
            end;
            Inc(mLoginTimes);
        end;

        if mLoginTimes >= 3 then
        begin //非法用户
             ShowMessage('你所输入的用户名和口令错误!');
        end;
    finally
        frmLogin.Free;  //释放登录窗口
    end;
    if not mRun then Close;

    //==================重新登录成功==========
    //填充登录信息
    FillLoginInfo();

end;

procedure TfrmMain.mmiBuyBillClick(Sender: TObject);
var
    mForm : TfrmMaintain;
    mFeeNow,mFeeGet,mMaintain : double ;
begin
    //==========结帐================
    try
        mForm := TfrmMaintain.Create(nil);
        //初始化数据
        mForm.Caption := '下班结帐';
        mFeeNow := StrToFloat(pnlNow.Caption);
        mForm.FillFrm(mFeeNow,mFeeNow);
        if mForm.ShowModal() = mrOK then
        begin
             mMaintain := StrToFloat(mForm.edtMaintain.Text);
             if BuyBill_remote(mMaintain) < 0 then
             begin

             end;
             Self.FillFinacialState();
        end;
    finally
        mForm.Free;
    end;


end;

procedure TfrmMain.mmiTotalBuyBillClick(Sender: TObject);
var
    mForm : TfrmMaintain;
    mFeeNow ,mFeeGet,mMaintain:double;
begin
    //==========总结帐================
    try
        mForm := TfrmMaintain.Create(nil);
        //初始化数据
        mForm.Caption := '总结帐';
        mFeeNow := StrToFloat(pnlNow.Caption);
        mForm.FillFrm(mFeeNow,mFeeNow);
        if mForm.ShowModal() = mrOK then
        begin
             mMaintain := StrToFloat(mForm.edtMaintain.Text);
             if BuyTotalBill_remote(mMaintain) < 0 then
             begin

             end;
             Self.FillFinacialState();
        end;
    finally
        mForm.Free;
    end;
end;

procedure TfrmMain.mmiAboutClick(Sender: TObject);
var
    mForm : TfrmAbout;
begin
    try
        mForm := TfrmAbout.Create(nil);
        mForm.ShowModal();
    finally
        mForm.Free;
    end;
end;

//==============系统设置=====================
procedure TfrmMain.mmiSystemClick(Sender: TObject);
var
    mForm : TfrmSystem;
    mStr : string;
begin
    try
        mForm := TfrmSystem.Create(nil);
        with gConfig do
        begin
            mForm.cbxControl.ItemIndex := ControlPort - 1;// Item index start from 0
            mForm.cbxScreen.ItemIndex := ScreenPort - 1;
            mForm.cbxCardReader.ItemIndex := ReaderPort - 1;

            mForm.edtControl.Text := ControlAddr;
            mForm.ckxAutoLight.Checked := AutoLight;
            mForm.sdtHourOn.Value := AutoHourOn;
            mform.sdtHourOff.Value := AutoHourOff;
            mForm.sdtMinOn.Value := AutoMinOn;
            mForm.sdtMinOff.Value := AutoMinOff;

            if mForm.IPAddress2Spin(ServerIP) = False then
            begin

            end;
            mForm.edtSerVerName.Text := ServerName;
        end;
        mForm.ResetChange();
        if mForm.ShowModal() = mrOk then
        begin
            with gConfig do
            begin
                // Item index start from 0
                ControlPort := mForm.cbxControl.ItemIndex + 1;
                ScreenPort := mForm.cbxScreen.ItemIndex + 1;
                ReaderPort := mForm.cbxCardReader.ItemIndex + 1;

                ControlAddr := mForm.edtControl.Text;
                AutoLight := mForm.ckxAutoLight.Checked;
                AutoHourOn := mForm.sdtHourOn.Value ;
                AutoHourOff := mform.sdtHourOff.Value ;
                AutoMinOn := mForm.sdtMinOn.Value;
                AutoMinOff := mForm.sdtMinOff.Value;

                ServerIP := mForm.Spin2IPAddress();
                ServerName := mForm.edtSerVerName.Text;

                WriteData();
            end;
            //服务器和硬件端口变化
            if mForm.IsServerChange() or mForm.IsPortChange() then
            begin
                mStr := '硬件参数需要重新启动该程序才能生效,是否继续?';
                if MessageDlg(mStr,mtConfirmation,[mbOK,mbCancel],0) = mrOK then
                begin
                    Close;
                end;
            end;
            //照明灯自动打开
            if mForm.IsFloodChange() then
            begin
                if  (gControl.OnOffCommand(8) < 0)
                    or
                    (gControl.WriteLightAutoTime(gConfig.AutoHourOn,
                                            gConfig.AutoMinOn,
                                            gConfig.AutoHourOff,
                                            gConfig.AutoMinOff ) < 0) then
                begin
                    ShowMessage('设置照明灯自动开关时间失败,请重试!');
                end
                else begin
                    ShowMessage('设置照明灯自动开关时间成功!');
                end;
            end;
        end;
    finally
        mForm.Free;
    end;
end;

procedure TfrmMain.mmiBlockerClick(Sender: TObject);
var
    mForm : TfrmBlocker;
begin
    //开挡车器
    try
        mForm := TfrmBlocker.Create(nil);
        if mForm.ShowModal() = mrOK then
        begin
            //向数据库中写入记录
            //控制硬件打开挡车器
            if gControl.OnOffCommand(ONOFF_UP) < 0 then
            begin
                ShowMessage('和控制器的通讯发生故障,不能打开挡车器!');
            end;
        end;
    finally
        mForm.Free;
    end;
end;

//==============请求和下位机时间同步===================
procedure TfrmMain.mmiAsyTimeClick(Sender: TObject);
var
    mStr : string;
    mDateTime: TDateTime;
    mWeekNo : integer;
begin
    mStr := '是否要强制和下位机的时间同步?';
    if MessageDlg(mStr,mtConfirmation,[mbOK,mbCancel],0) = mrOK then
    begin
        //控制硬件和下位机时间同步
        mDateTime := GetNow();
        //国外时间,星期天是一周的第一天
        mWeekNo := DayOfWeek(mDateTime) - 1;
        if mWeekNo = 0 then mWeekNo := 7;
        if gControl.AsyTime(mDateTime,mWeekNo) < 0 then
            ShowMessage('和控制器的通讯发生故障,时间同步失败!')
        else ShowMessage('和下位机时间同步成功!');
    end;
end;

procedure TfrmMain.FormClose(Sender: TObject; var Action: TCloseAction);
begin
    //==========析构函数,释放资源==============
    gControl.Free;
    gConfig.Free;
end;

procedure TfrmMain.tmrMainTimer(Sender: TObject);
var
    mBMsg : TBottomMsg;
    mCardUse : TComplexCardUse;
    mUse : TCardUse;
    mReader : TCardReader;
    mFullCardNum : string;
label
    lblError,lblNoCard,lblDupCard;
begin
    //主计时器
    Inc(MainTimerCounter);

    if (MainTimerCounter mod 10) = 0 then //每0.1 * 10秒钟
    begin
        //如果需要,在客户屏上显示时间

        mBMsg := gControl.ShakeHands();
        //如果设备损坏
        if mBMsg = nil then
        begin
            gErrorRecord.Append(0,'和控制器通信故障');
            gErrorRecord.ToListView(lvError);
        end
        //如果有卡进入
        else if mBMsg.IsPosBitOn(10,3) or
                mBMsg.IsPosBitOn(10,4) or
                mBMsg.IsPosBitOn(10,5) then
        begin
            mCardUse.Card := mBMsg.GetPosStr(13)
                      + mBMsg.GetPosStr(14)
                      + mBMsg.GetPosStr(15)
                      + mBMsg.GetPosStr(16);

            if CardNum <> mCardUse.Card then
            begin
                CardNum := mCardUse.Card;
                if mBMsg.IsPosBitOn(10,6) then
                begin

⌨️ 快捷键说明

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