📄 main.pas
字号:
Progressbar1.Position := Trunc(Random(300));
Progressbar2.Position := Trunc(Random(300));
Progressbar3.Position := Trunc(Random(300));
SendMessage(Progressbar1.Handle,PBM_SETBARCOLOR,0,clLime);
SendMessage(Progressbar2.Handle,PBM_SETBARCOLOR,0,clRed);
SendMessage(Progressbar3.Handle,PBM_SETBARCOLOR,0,clYellow);
inc(Num);
if State = 0 then
begin
Shape2.Brush.Color := clRed;
Shape3.Brush.Color := clYellow;
if Shape1.Brush.Color = clLime then
Shape1.Brush.Color := clWhite
else
Shape1.Brush.Color := clLime;
end
else if State = 1 then
begin
Shape1.Brush.Color := clLime;
Shape3.Brush.Color := clYellow;
if Shape2.Brush.Color = clRed then
Shape2.Brush.Color := clWhite
else
Shape2.Brush.Color := clRed;
end
else
begin
Shape1.Brush.Color := clLime;
Shape2.Brush.Color := clRed;
if Shape3.Brush.Color = clYellow then
Shape3.Brush.Color := clWhite
else
Shape3.Brush.Color := clYellow;
end;
end;
procedure TForm1.N32Click(Sender: TObject);
begin
Application.CreateForm(TForm25,Form25);
Form25.ShowModal;
Form25.Free;
end;
procedure TForm1.N25Click(Sender: TObject);
begin
Application.CreateForm(TForm21,Form21);
Form21.ShowModal;
Form21.Free;
end;
procedure TForm1.N33Click(Sender: TObject);
begin
Application.CreateForm(TForm22,Form22);
Form22.ShowModal;
Form22.Free;
end;
procedure TForm1.MSComm1Comm(Sender: TObject);
var
receiveData: String;//记录接收的数据
lcxx: String;//截取楼层信息
xmxx: String;//截取项目数据
bjfw: String;//记录报警范围
lccx: String;//记录查询到的楼层名称及楼层数据
bjxm: String;//记录哪个报警设备发生报警
bjcl: String;//记录报警处理
comparebjcl: String;//记录xmmc数组中所有的数据,将它与bjcl比较(字符数是否相同)
i,m: Integer;
bjCount: Integer;//记录日志缓冲表中一个时间段(30秒)的记录数
tempID: Integer;//记录临时ID
cl:Boolean;//判断30秒内接受的报警在报警处理表中是否存在相应的处理,Fale表示没有相应的处理
begin
cl:= False;
with Data.ADOQuery1 do
begin
Close;
SQL.Clear;
SQL.Add('select * from 日志缓冲表');
Open;
end;
if Data.ADOQuery1.RecordCount<1 then
ID := 0; //初始化ID,当日志缓冲表中没有记录,即所有的报警都及时的处理了,将ID置为0
Case MSComm1.CommEvent of
comEvReceive:
begin
ReceiveData := MSComm1.Input;
if Trim(ReceiveData)<>'' then
begin
Try
lcxx := Copy(Trim(receiveData),0,7);
xmxx := Copy(Trim(receiveData),8,4);
with Data.ADOQuery1 do
begin
Close;
SQL.Clear;
SQL.Add('select * from 楼层信息表 where 楼层编号 = :a');
Parameters.ParamByName('a').Value := Trim(lcxx);
Open;
lccx := FieldByName('楼层名称').Value+ ''+ IntToStr(FieldByName('楼层').Value) + '层';
end;
with Data.ADOQuery1 do
begin
Close;
SQL.Clear;
SQL.Add('select * from 报警项目表 where 项目数据 = :a');
Parameters.ParamByName('a').Value := Trim(xmxx);
Open;
bjxm := FieldByName('项目名称').Value;
end;
State := 1;
Memo1.Lines.Add(lccx+ '发生'+bjxm + FormatDateTime('hh:mm:ss',Now));
xmmc[index]:= bjxm;
inc(index);
Label5.Caption := Memo1.Lines[0];
if Memo1.Lines.Count<2 then
begin
Num := 0;
while Num<5 do
Application.ProcessMessages;
end;
with Data.ADOQuery1 do
begin
Close;
SQL.Clear;
SQL.Add('insert 日志缓冲表 values(:a,:b,:c,default,default,:d)');
Parameters.ParamByName('a').Value := Trim(lcxx);
Parameters.ParamByName('b').Value := Trim(bjxm);
Parameters.ParamByName('c').Value := Trim(receiveData);
Parameters.ParamByName('d').Value := Id;
ExecSQL;
end;
if Num<5 then
Exit; //在接受到第一个报警时,30秒内不执行相应的处理
inc(Id);
with Data.ADOQuery1 do
begin
Close;
SQL.Clear;
SQL.Add('select * from 报警处理表 where ');
For i := 0 to index -1 do
begin
if i<> index-1 then
SQL.Add(' 项目范围 like :' + 'a'+IntToStr(i)+' and ')
else
SQL.Add(' 项目范围 like :' + 'a'+IntToStr(i));
end;
For i := 0 to index -1 do
Parameters.ParamByName('a'+IntToStr(i)).Value := '%'+xmmc[i]+'%';
Open;
if Index>1 then //将xmmc数组中的数据赋给变量Comparebjcl,去除数组中相同的元素
begin
For i := 0 to Index-1 do
if i<>index-1 then
begin
For m:=i+1 to index-1 do
if Trim(xmmc[i])<>Trim(xmmc[m]) then
Comparebjcl := Trim(Comparebjcl)+Trim(xmmc[i]);
end
else
Comparebjcl := Trim(Comparebjcl)+Trim(xmmc[i]);
end
else
Comparebjcl := Trim(Comparebjcl)+Trim(xmmc[0]);
if Data.ADOQuery1.RecordCount>0 then
while Not Data.ADOQuery1.Eof do
begin
bjfw := Data.ADOQuery1.FieldByName('项目范围').Value;
if Length(Trim(bjfw))= Length(Trim(Comparebjcl)) then
begin
if (FieldByName('音乐').Value<>Null)and(FieldByName('音乐').Value<>'') then
begin
Music.FileName:= FieldByName('音乐').Value;
Music.Play;
end;
bjcl := Data.ADOQuery1.FieldByName('报警处理').Value;
cl:= True;
Break;
end;
Data.ADOQuery1.Next;
end;
end;
Application.CreateForm(TForm24,Form24);
Form24.Memo1.Text := Memo1.Text;
Memo1.Clear;
With Data.ADOQuery1 do
begin
Close;
SQL.Clear;
SQL.Add('select Min(标识) from 日志缓冲表');
Open;
tempID := Fields[0].Value;
end;
with Data.ADOQuery1 do
begin
Close;
SQL.Clear;
SQL.Add('select * from 日志缓冲表 where 标识 = :a');
Parameters.ParamByName('a').Value := tempID;
Open;
end;
i:= 0;
bjCount:= Data.ADOQuery1.RecordCount;
while Not Data.ADOQuery1.Eof do
begin
LogArray[i].lcbh:= Data.ADOQuery1.FieldByName('楼层编号').Value;
LogArray[i].xmmc:= Data.ADOQuery1.FieldByName('项目数据').Value;
LogArray[i].sbsj:= Data.ADOQuery1.FieldByName('设备数据').Value;
Data.ADOQuery1.Next;
inc(i);
end;
Try //在日志记录表中插入数据,同时在日志缓冲表中删除相应的数据
Data.ADOConnection1.BeginTrans;
Form24.ShowModal;
if Form24.ModalResult = mrAll then
begin
if cl= True then
begin
if Trim(bjcl) = '拨打120' then
Call('120')
else if Trim(bjcl) = '拨打119' then
Call('119');
end;
For i:=0 to bjCount-1 do
with Data.ADOQuery1 do
begin
Close;
SQL.Clear;
SQL.Add('insert 日志记录表 Values(:a,:b,:c,Default,Default)');
Parameters.ParamByName('a').Value := LogArray[i].lcbh;
Parameters.ParamByName('b').Value := LogArray[i].xmmc;
Parameters.ParamByName('c').Value := LogArray[i].sbsj;
ExecSQL;
end;
end
else
begin
For i:=0 to bjCount-1 do
with Data.ADOQuery1 do
begin
Close;
SQL.Clear;
SQL.Add('insert 日志记录表 Values(:a,:b,:c,1,Default)');
Parameters.ParamByName('a').Value := LogArray[i].lcbh;
Parameters.ParamByName('b').Value := LogArray[i].xmmc;
Parameters.ParamByName('c').Value := LogArray[i].sbsj;
ExecSQL;
end;
end;
with Data.ADOQuery1 do
begin
Close;
SQL.Clear;
SQL.Add('delete 日志缓冲表 where 标识 = :a');
Parameters.ParamByName('a').Value := tempID;
ExecSQL;
end;
Data.ADOConnection1.CommitTrans;
Except
Data.ADOConnection1.RollbackTrans;
end;
State := 0;
Except
Application.MessageBox('系统出错.','提示',64);
OnCreate(Sender);
End;
end;
end;
ComEventBreak:
State := 2;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
MSComm1.Output := Edit1.Text;
end;
procedure TForm1.Call(Number: String);
begin
State := 0;
MakeCall('', Pchar(ExtractFileName(Application.ExeName)),'拨号',Pchar(Number));
Application.Run;
end;
procedure TForm1.N23Click(Sender: TObject);
begin
Application.CreateForm(TForm23,Form23);
Form23.ShowModal;
Form23.Free;
end;
procedure TForm1.ShowMenu;
begin
N2.Visible:= True;
N3.Visible:= True;
N4.Visible:= True;
N5.Visible:= True;
N9.Visible:= True;
N11.Visible:= True;
N15.Visible:= True;
N16.Visible:= True;
N24.Visible:= True;
N28.Visible:= True;
N33.Visible:= True;
N30.Visible:= True;
N29.Visible:= True;
end;
procedure TForm1.GNovisible;
begin
N2.Visible := False;
N3.Visible := False;
N4.Visible := False;
N29.Visible := False;
N30.Visible := False;
end;
procedure TForm1.Deleteloghc;
begin
With Data.ADOQuery1 do
begin
Close;
SQL.Clear;
SQL.Add('delete 日志缓冲表');
ExecSQL;
end;
end;
procedure TForm1.N35Click(Sender: TObject);
begin
frm_option.showmodal;
end;
procedure TForm1.N36Click(Sender: TObject);
begin
frm_prew_hf:=Tfrm_prew_hf.create(application);
frm_prew_hf.showmodal;
end;
procedure TForm1.N37Click(Sender: TObject);
begin
frm_prew_main.showmodal;
end;
procedure TForm1.N39Click(Sender: TObject);
begin
frm_set_bfyy:=Tfrm_set_bfyy.create(application);
frm_set_bfyy.showmodal;
end;
procedure TForm1.N38Click(Sender: TObject);
begin
frm_path:=Tfrm_path.create(application);
frm_path.showmodal;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -