📄 mainform.pas
字号:
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 + -