📄 receformm.pas
字号:
else
if (x mod 8)=0 then
drawonepoint((x div 8),2);
end;
procedure TReceForm.DrawTryPoint(x:integer);
begin
{ i1:=fdatacount div 8;
if (fdatacount mod 8) <>0 then
inc(i1);
if
if (fdatacount-x)<=8 then}
if (x mod 8)=1 then
drawonepoint((x div 8)+1,3);
end;
procedure TReceForm.DrawAllPoint;
var
i1,i2,i3:integer;
begin
IF FDATACOUNT=0 THEN EXIT;
for i1:=1 to (fdatapoint div 8) do
begin
drawonepoint(i1,2);
end;
drawcurrpoint(fdatapoint);
i2:=(fdatacount div 8);
if (fdatacount mod 8)<>0 then inc(i2);
i3:=fdatapoint div 8;
if (fdatapoint mod 8)<>0 then inc(i3);
for i1:=i3 to i2 do
begin
drawonepoint(i1,1);
end;
end;
procedure TReceForm.DrawOnePoint(x,Pclr:integer);
var
LedX,LedY,x1,y1:integer;
Pen1,pen2:tpen;
color1,color2,fco:Tcolor;
a1,fx1,fy1:real;
begin
ledx:=((x-1) mod (prgspb.Width div 10))*10;
ledy:=((x-1) div (prgspb.Width div 10))*10;
case ord(PClr) of
1:begin
prgsimg.draw(prgspb.canvas,ledx,ledy,0);
end;
2:
begin
prgsimg.draw(prgspb.canvas,ledx,ledy,1);
end;
3:
begin
prgsimg.draw(prgspb.canvas,ledx,ledy,2);
end;
end;
end;
procedure TReceForm.FormCreate(Sender: TObject);
var
filename:string; //
inifile1:Tinifile; //
path,ss:string; //
begin
fdatacount:=0;
fdatapoint:=0;
revstart:=false;
filename:=ExtractFiledir(APPLICATION.EXENAME)+'\'+ExtractFilename(APPLICATION.EXENAME);//+'\hdxgxt.ini';
if not fileexists(filename) then
filename:=ExtractFileDir(APPLICATION.EXENAME)+'hdxgxt.ini'
else filename:=extractfiledir(application.exename)+'\hdxgxt.ini';
//filename:=path+'\hdxgxt.ini';
inifile1:=Tinifile.Create(filename);
FPenMode:=inifile1.ReadString('penmode','mode',ss);
//showmessage(filename);
inifile1.Free;
end;
procedure TReceForm.PrgsPBPaint(Sender: TObject);
begin
DRAWALLPOINT;
end;
procedure TReceform.process; //处理接收的数据 --无效
var
linenumber,yearnum,num,l_lseq:integer;
s,l_workname,l_dd,l_time,l_node,l_nodename,l_nodeplace,l_linename:string;
spencode:string;
v_year,v_month,v_day,v_hour,v_min,v_node1,v_node2,v_workcode:string;
begin
try
self.cursor:=crhourglass;
spencode:=inttohex(FPenCode,2);
datamodule1.q_PATROLREC.open;
//datamodule1.q_WORKER.open;
//datamodule1.q_POINT.IndexName:='';
//datamodule1.q_POINT.IndexFieldNames:='node';
// datamodule1.q_POINT.open;
// frmpoint:=@receivedatabuffer;
for linenumber:=1 to FDataCount do
begin
try
V_year:='20'+inttohex(byte(FE2BUFF[Linenumber][1]),2);
V_month:=inttohex(byte(FE2BUFF[Linenumber][2]),2);
V_day:=inttohex(byte(FE2BUFF[Linenumber][3]),2);
V_hour:=inttohex(byte(FE2BUFF[Linenumber][4]),2);
V_min:=inttohex(byte(FE2BUFF[Linenumber][5]),2);
V_node1:=inttohex(byte(FE2BUFF[Linenumber][6]),2);
V_node2:=inttohex(byte(FE2BUFF[Linenumber][7]),2);
v_workcode:=inttohex(byte(FE2BUFF[Linenumber][8]),2);
// inc(frmpoint);
l_dd:=v_year+'-'+v_month+'-'+v_day;
l_time:=v_hour+':'+v_min;
l_node:=v_node2+v_node1;
{datamodule1.q_WORKER.First;
datamodule1.q_WORKER.setkey;
datamodule1.q_WORKER.fieldbyname('code').asstring:=v_workcode;
if datamodule1.q_WORKER.gotokey then
l_workname:=datamodule1.q_WORKER.fieldbyname('name').asstring
else
l_workname:='';
datamodule1.q_POINT.first;
datamodule1.q_POINT.setkey;
datamodule1.q_POINT.fieldbyname('node').asstring:=l_node;
if datamodule1.q_POINT.gotokey then
begin
l_nodename:=datamodule1.q_POINT.fieldbyname('name').asstring;
l_nodeplace:=datamodule1.q_POINT.fieldbyname('nodeplace').asstring;
l_linename:=datamodule1.q_POINT.fieldbyname('linename').asstring;
l_lseq:=datamodule1.q_POINT.fieldbyname('lseq').asinteger;
end else begin
l_nodename:='';
l_nodeplace:='';
l_linename:='';
l_lseq:=0;
end; }
with datamodule1.q_point do
begin //0
close;
parambyname('node').asstring:=L_node;
parambyname('code').asstring:=v_workcode;
open;
if recordcount=0 then
begin //0.0
l_nodename:='';
l_nodeplace:='';
l_linename:='';
l_lseq:=0;
l_workname:='';
datamodule1.q_PATROLREC.append;
datamodule1.q_PATROLREC.fieldbyname('pdate').value:=strtodate(l_dd);
datamodule1.q_PATROLREC.fieldbyname('ptime').asstring:=l_time;
datamodule1.q_PATROLREC.fieldbyname('workercode').asstring:=V_workcode;
datamodule1.q_PATROLREC.fieldbyname('node').asstring:=l_node;
datamodule1.q_PATROLREC.fieldbyname('workername').asstring:=l_workname;
datamodule1.q_PATROLREC.fieldbyname('nodename').asstring:=l_nodename;
datamodule1.q_PATROLREC.fieldbyname('nodeplace').asstring:=l_nodeplace;
datamodule1.q_PATROLREC.fieldbyname('linename').asstring:=l_linename;
datamodule1.q_PATROLREC.fieldbyname('lseq').asinteger:=l_lseq;
datamodule1.q_PATROLREC.fieldbyname('pencode').asstring:=spencode;
datamodule1.q_PATROLREC.post;
datamodule1.q_PATROLREC.refresh;
end //0.0/
else
begin //0.1
while not eof do
begin //0.2
l_nodename:=fieldbyname('nodename').asstring;
l_nodeplace:=fieldbyname('nodeplace').asstring;
l_linename:=fieldbyname('linename').asstring;
l_lseq:=fieldbyname('lseq').asinteger;
l_workname:=fieldbyname('name').asstring;
end; //0.2
end;//0.1
end; //0
datamodule1.q_PATROLREC.append;
datamodule1.q_PATROLREC.fieldbyname('pdate').value:=strtodate(l_dd);
datamodule1.q_PATROLREC.fieldbyname('ptime').asstring:=l_time;
datamodule1.q_PATROLREC.fieldbyname('workercode').asstring:=V_workcode;
datamodule1.q_PATROLREC.fieldbyname('node').asstring:=l_node;
datamodule1.q_PATROLREC.fieldbyname('workername').asstring:=l_workname;
datamodule1.q_PATROLREC.fieldbyname('nodename').asstring:=l_nodename;
datamodule1.q_PATROLREC.fieldbyname('nodeplace').asstring:=l_nodeplace;
datamodule1.q_PATROLREC.fieldbyname('linename').asstring:=l_linename;
datamodule1.q_PATROLREC.fieldbyname('lseq').asinteger:=l_lseq;
datamodule1.q_PATROLREC.fieldbyname('pencode').asstring:=spencode;
datamodule1.q_PATROLREC.post;
datamodule1.q_PATROLREC.refresh;
except
end;
end;
Application.MessageBox('處理完畢!','消息',MB_ICONINFORMATION);
Msgmo.lines.add('保存資料完畢!');
finally
datamodule1.q_PATROLREC.close;
// datamodule1.T_WORKER.CLOSE;
// datamodule1.T_POINT.close;
self.Cursor:=crdefault;
end;
end;
procedure TReceForm.echosavemess(var x1:tmessage);
var
p1:pchar;
comname,INIFile:string;
wasconnect:boolean;
begin
if X1.LPARAM=0 THEN INC(FERRDATA);
PrgsBar1.Position:=(x1.WParam *100) div fdatacount;
if x1.wparam =fdatacount then
begin
if ferrdata>0 then Application.MessageBox(pchar('資料保存完畢!'+
chr($0d)+chr($0a)+'成功保存了'+ inttostr(fdatacount-ferrdata)+'個資料!'+
chr($0d)+chr($0a)+'有'+ inttostr(ferrdata)+'個資料因時間格式錯誤未保存!'+#13+#13+'注意:當【接收消息】框出現:'+#13+'"設置巡更棒中時間結束"'+#13+#13+'後再單擊【確定】按鈕'),'消息',MB_ICONINFORMATION)
else
begin
Application.MessageBox(pchar('資料保存完畢!'+#13+#13+'注意:當【接收消息】框出現:'+#13+'"設置巡更棒中時間結束"'+#13+#13+'後再單擊【確定】按鈕'),'消息',MB_ICONINFORMATION) ;
ExitBtn.Enabled:=true;
end;
prgspb.Canvas.FillRect(ClientRect);
if ferrdata<>fdatacount then
begin
//if messagedlg('下次使用该巡更棒前,请务必清空数据!是否要清空巡更棒中的数据?',mtinformation,[mbok,mbcancel],0)=mrcancel then
//exit;
//if messagedlg('确定吗?',mtConfirmation,[mbok,mbcancel],0)=mrcancel then
//exit;
fthrdcount:=0;
fdatacount:=0;
fdatapoint:=0;
CommSB.panels[0].text:='';
CommSB.panels[1].text:='';
CommSB.panels[2].text:='';
MsgMo.Lines.Clear;
SaveT.Visible:=false;
PrgsBar1.Visible:=false;
try
getmem(p1,16);
comname:='';
//INIFile:=ExtractFileDir(APPLICATION.EXENAME)+'\HdXGXT.INI';
inifile:=ExtractFiledir(APPLICATION.EXENAME)+'\'+ExtractFilename(APPLICATION.EXENAME);//+'\hdxgxt.ini';
if not fileexists(inifile) then
inifile:=ExtractFileDir(APPLICATION.EXENAME)+'hdxgxt.ini'
else inifile:=extractfiledir(application.exename)+'\hdxgxt.ini';
if not fileexists(INIFile) then
begin
Application.MessageBox('需要設定串列通訊口!','消息',MB_ICONINFORMATION);
exit;
end else
begin
getprivateprofilestring('comports','comportsnumber','01',p1,16,pchar(INIFile));
comname:=p1;
if strtoint(comname)<0 then
begin
Application.MessageBox('串口設置資訊丟失,請重新設置串列口!','消息',MB_ICONINFORMATION);
exit;
end;
with TClearPenData.Create(self.handle,strtoint(comname)+1,Commsb) do
BEGIN
Inc(FThrdCount);
OnTerminate := ThreadDone;
END;
RECEBtn.enabled:=FALSE;
EXITBtn.Enabled:=FALSE;
// button1.enabled:=false;
end;
finally
freemem(p1,16);
end;
end;
end;
sdatacount:=fdatacount-ferrdata;
end;
procedure TReceForm.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
if fthrdcount<> 0 then
begin
Application.MessageBox('正在通訊,請等待通訊完畢或終止該次通訊,才能退出視窗。','消息',MB_ICONINFORMATION);
canclose:=false;
end;
end;
procedure TReceForm.BitBtn1Click(Sender: TObject);
begin
close;
end;
procedure TReceForm.Button1Click(Sender: TObject);
var
p1:pchar;
comname,INIFile:string;
wasconnect:boolean;
begin
if Application.MessageBox('確定要清空巡更棒中的資料嗎?','消息', MB_ICONINFORMATION+MB_OKCANCEL) = IDCANCEL then
exit;
fthrdcount:=0;
fdatacount:=0;
fdatapoint:=0;
CommSB.panels[0].text:='';
CommSB.panels[1].text:='';
CommSB.panels[2].text:='';
MsgMo.Lines.Clear;
SaveT.Visible:=false;
PrgsBar1.Visible:=false;
try
getmem(p1,16);
comname:='';
inifile:=ExtractFiledir(APPLICATION.EXENAME)+'\'+ExtractFilename(APPLICATION.EXENAME);//+'\hdxgxt.ini';
if not fileexists(inifile) then
inifile:=ExtractFileDir(APPLICATION.EXENAME)+'hdxgxt.ini'
else inifile:=extractfiledir(application.exename)+'\hdxgxt.ini';
if not fileexists(INIFile) then
begin
Application.MessageBox('需要設定串列通訊口!','消息',MB_ICONINFORMATION);
exit;
end else
begin
getprivateprofilestring('comports','comportsnumber','01',p1,16,pchar(INIFile));
comname:=p1;
if strtoint(comname)<0 then
begin
Application.MessageBox('串口設置資訊丟失,請重新設置串列口!','消息',MB_ICONINFORMATION);
exit;
end;
with TClearPenData.Create(self.handle,strtoint(comname)+1,Commsb) do
BEGIN
Inc(FThrdCount);
OnTerminate := ThreadDone;
END;
RECEBtn.enabled:=FALSE;
EXITBtn.Enabled:=FALSE;
// button1.enabled:=false;
end;
finally
freemem(p1,16);
end;
end;
procedure TReceForm.FormClose(Sender: TObject; var Action: TCloseAction);
begin
action:=cafree;
// informationForm.Free;
// informationForm:=nil;
end;
procedure TReceForm.BitBtn10Click(Sender: TObject);
begin
close;
end;
procedure TReceForm.Timer1Timer(Sender: TObject);
begin
if (label1.caption<>'0')and(label2.caption<>'0') then
ExitBtn.Enabled:=true
else
exitbtn.Enabled:=false;
end;
procedure TReceForm.Button62Click(Sender: TObject);
begin
mainform.stopflag:=true;
end;
procedure TReceForm.Button2Click(Sender: TObject);
begin
{with do
begin
//Canvas.MoveTo(0, 0);
//copymode:=cmwhiteness;
//arect:=rect(0,0,prgspb.Width,prgspb.Height);
//copyrect(arect,prgspb.canvas,rect);
//copymode:=cmsrccopy;
end; }
end;
procedure TReceForm.Timer2Timer(Sender: TObject);
begin
if image1.Visible=true then
begin
image2.Visible:=true;
image1.Visible:=false;
exit;
end
else
begin
image1.Visible:=true;
image2.Visible:=false;
exit;
end;
end;
end.
//proc
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -