求助:SPCOMM控件怎么判断它的状态? ( 积分: 15 )

  • 主题发起人 主题发起人 wei0916
  • 开始时间 开始时间
W

wei0916

Unregistered / Unconfirmed
GUEST, unregistred user!
求助:SPCOMM控件怎么判断它的状态?在DELPHI里使用它的时候,用MSCOMM控件的时候,有一个很好的参数,就是IF MSCOMM1.PORTOPEN THEN........
而对SPCOMM,就算打开了某个串口,下次再次去调用某个串口的时候,却不知其是否已经打开,如果直接用SPCOMM.COMMNAME="COM1",然后用SPCOMM.STARTCOMM,这样肯定会出错.不知哪位大虾能指教一下怎样能获取SPCOMM的当前状态是否已经打开...
 
求助:SPCOMM控件怎么判断它的状态?在DELPHI里使用它的时候,用MSCOMM控件的时候,有一个很好的参数,就是IF MSCOMM1.PORTOPEN THEN........
而对SPCOMM,就算打开了某个串口,下次再次去调用某个串口的时候,却不知其是否已经打开,如果直接用SPCOMM.COMMNAME="COM1",然后用SPCOMM.STARTCOMM,这样肯定会出错.不知哪位大虾能指教一下怎样能获取SPCOMM的当前状态是否已经打开...
 
用一个变量记录下它的状态,其他应该没有什么好办法了。
 
Try Comm1.StartComm
except
ShowMessage(Comm1.CommName+'不存在或被占用!');
exit;
end;
 
如果能利用MSCOMM的PORTOPEN属性就好了,IF MSCOMM1.PORTOPEN THEN
MSCOMM1.PORTOPEN=FALSE
MSCOMM1.COMMPORT=1
MSCOMM1.SETTING='9600,N,8,1'
MSCOMM1.PORTOPEN=TRUE
ELSE
MSCOMM1.COMMPORT=1
MSCOMM1.SETTING='9600,N,8,1'
MSCOMM1.PORTOPEN=TRUE
END IF
在程序运行的过程里可以随时更改COM口的端口号及参数是多么好用呀.可是SPCOMM做不到,不知现在有没有更高级的SPCOMM,哪位大虾提供一下.谢了.
 
用COMBOBOX做个选择串口的东西,内容为"COM1""COM2""COM3"......
form1.comm1.PortName:='//./'+form1.ComboBox1.Text;
if not comm1.connect then begin
..............................
此处就可以设置其它参数了比如
comm1.BaudRateValue:=19200;其他参数的修改最好看明白该控件的属性

end;

这样就可以知道是否使用了该串口,并能重新设置该串口
 
Spcomm的StartComm方法里面抛出了几个异常,其中有一个就是串口占用的,你可以把StartComm修改成一个函数,返回Integer,判断就可以了
 
修改函数后要在错误捕获里捕获SPCOMM的异常,再跟据异常看串口是否打开对吗
 
你可以先comm1.stopcomm再comm1.startcomm了,打开之前先关闭就好了。
 
try
except
再打开串口一次,就可以了!!
 
其实不修改也可以,系统自己会抛出异常的,修改起来也不麻烦阿
 
直接用START就可以了,办法虽然笨蛋,但只要知道准确的端口数,然后用TRY COMM1.start 打开后的操作,except 打不开的错误提示。。。
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
2K
DelphiTeacher的专栏
D
后退
顶部