我下载并安装了SPCOMM控件,并按照网上的例子运行了以下。
只能发送数据,但却接收不了数据,搞了很久,请各位指点?接收数据的例子是这样说的,但好象根本没触发这个事件呀??
procedure TForm1.Comm1ReceiveData(Sender: TObject; Buffer: Pointer;
BufferLength: Word);
var
tmpArray:array[0..4096] of Byte;
ArraySize,i: DWORD;
Count:DWORD;
tmpStr:string;
pStr:PChar;
begin
if Check1.Checked then
begin
pStr:=Buffer;
tmpStr:=string(pStr);
Dec(PStr);
for i:=0 to Length(tmpStr)-1 do
begin
inc(PStr);
tmpArray[i]:=Byte(PSTR^);
Memo2.Lines.Add(IntToHEX(Ord(tmpArray[i]),2));
end;
exit;
end;
pStr:= Buffer;
memo2.Lines.Add(pStr);
end;
只能发送数据,但却接收不了数据,搞了很久,请各位指点?接收数据的例子是这样说的,但好象根本没触发这个事件呀??
procedure TForm1.Comm1ReceiveData(Sender: TObject; Buffer: Pointer;
BufferLength: Word);
var
tmpArray:array[0..4096] of Byte;
ArraySize,i: DWORD;
Count:DWORD;
tmpStr:string;
pStr:PChar;
begin
if Check1.Checked then
begin
pStr:=Buffer;
tmpStr:=string(pStr);
Dec(PStr);
for i:=0 to Length(tmpStr)-1 do
begin
inc(PStr);
tmpArray[i]:=Byte(PSTR^);
Memo2.Lines.Add(IntToHEX(Ord(tmpArray[i]),2));
end;
exit;
end;
pStr:= Buffer;
memo2.Lines.Add(pStr);
end;
解决方案 »
- 急~!!!分数全给了~数据库操作问题
- 如何让fastreport在一页中打印两列数据(看图片)
- 关于查询 多个字段 是否空值
- 我要做一个程序启动另一个进程,要求我用我的程序启动这个进程时,这个进程应该是隐藏的,而且我还要往这个隐藏进程的输入框中传字串且触
- 高分寻求这样的代码(关于画线路图方面的)
- 谁能详细说一下ADOTABLE,ADOQUERY的属性和方法。主要是操作数据库。
- 各位高手,有谁知道在Windows2000下如何进行端口操作!!!~~~欢迎探讨~~~
- 求一个比较两个字符串的函数
- tbitbnt 的GLYPH属性怎么用呀?语法是什么?
- 请广州的网友帮一下忙
- 请问如何给DBGrid加上CheckBox?
- SQLSERVER中字段的备注值用DELPHI怎么取出来啊
我建议你先设个断点确定有没有发生ReceiveData,如果有,则我建议你这样收:
procedure TfrmMain.CommReceiveData(Sender: TObject; Buffer: Pointer;
BufferLength: Word);
var
receiveStr : string;
begin
SetLength (receiveStr,bufferLength);
Move (buffer^,PChar (receiveStr)^,bufferLength);
...
end;
如果没有的话可能就是上述的问题了。
硬件连线的问题吗?我用的是考勤机的串口连接,考勤机可以正常使用,调用厂家提供的dll扫得到数据。
但怎么我想用spcomm控件(不用厂家的dll)却不能获得数据呢?
Left = 199
Top = 110
Width = 691
Height = 489
Caption = 'Form1'
Color = clBtnFace
Font.Charset = ANSI_CHARSET
Font.Color = clWindowText
Font.Height = -13
Font.Name = '宋体'
Font.Style = []
OldCreateOrder = False
OnCloseQuery = FormCloseQuery
OnCreate = FormCreate
PixelsPerInch = 96
TextHeight = 13
object Label1: TLabel
Left = 16
Top = 16
Width = 26
Height = 13
Caption = '发送'
end
object Label2: TLabel
Left = 344
Top = 16
Width = 26
Height = 13
Caption = '接收'
end
object Memo1: TMemo
Left = 8
Top = 32
Width = 321
Height = 377
ImeName = '中文 (简体) - 智能 ABC'
Lines.Strings = (
'0123456789')
TabOrder = 0
end
object Memo2: TMemo
Left = 336
Top = 32
Width = 337
Height = 377
ImeName = '中文 (简体) - 智能 ABC'
Lines.Strings = (
'http://www.kaer.cn/default.aspx')
TabOrder = 1
end
object Button3: TButton
Left = 120
Top = 424
Width = 89
Height = 25
Caption = '发送数据'
TabOrder = 2
OnClick = Button3Click
end
object Button4: TButton
Left = 544
Top = 424
Width = 75
Height = 25
Caption = '退出'
TabOrder = 3
OnClick = Button4Click
end
object Check1: TCheckBox
Left = 264
Top = 424
Width = 121
Height = 17
Caption = '十六进制/字符'
TabOrder = 4
end
object Comm1: TComm
CommName = 'COM1'
BaudRate = 9600
ParityCheck = False
Outx_CtsFlow = False
Outx_DsrFlow = False
DtrControl = DtrEnable
DsrSensitivity = False
TxContinueOnXoff = True
Outx_XonXoffFlow = True
Inx_XonXoffFlow = True
ReplaceWhenParityError = False
IgnoreNullChar = False
RtsControl = RtsEnable
XonLimit = 500
XoffLimit = 500
ByteSize = _8
Parity = None
StopBits = _1
XonChar = #17
XoffChar = #19
ReplacedChar = #0
ReadIntervalTimeout = 1
ReadTotalTimeoutMultiplier = 0
ReadTotalTimeoutConstant = 0
WriteTotalTimeoutMultiplier = 0
WriteTotalTimeoutConstant = 0
OnReceiveData = Comm1ReceiveData
Left = 8
Top = 416
end
end
SetLength(TempStr, BufferLength);
For I:=1 to BufferLength do TempStr[i] := (Pstr+i-1)^;//