使用 SpComm 控件時 Comm1ReceiveData 不會觸發? showmessage('aa');
// StartComm: 運行正常With Comm1 do
begin
 StopComm;
 BaudRate := 2400;
 ByteSize := _7;
 StopBits := _1;
 CommName := 'COM1';
 Parity := Even;
 StartComm;
end;
// ReceiveData 不會觸發 showmessage('aa');
procedure TForm1.Comm1ReceiveData(Sender: TObject; Buffer: Pointer;
  BufferLength: Word);
var
  sRece1:string; 
  rbuf:array[1..20] of byte;
  I:Integer;
begin
  showmessage('aa');
 sRece1:='';
   move(buffer^,pchar((@rbuf)^),bufferlength);
   for i:=1 to bufferlength do
   begin
     sRece1:=sRece1+ inttohex(rbuf[i],2);
   end;
   Memo1.Lines.Add(sRece1);
end;

解决方案 »

  1.   

    在Dos 下正常啊(Basic 代碼)?
    OPEN "COM1:2400,E,7" FOR RANDOM AS 3 
      

  2.   

    我將Com口 的2(RXD),3(TXD)短接ReceiveData就觸發了,為什麼我
    一接設備就不觸發呢?
      

  3.   

    我感觉你应该这样做找一个测串口的软件,测一下接受的数据是否正确,如果正确,然后再去修改spcom的属性,我看了一下你的程序没有问题,这段代码应该动态配置,不是固定值,
    With Comm1 do
    begin
     StopComm;
     BaudRate := 2400;
     ByteSize := _7;
     StopBits := _1;
     CommName := 'COM1';
     Parity := Even;
     StartComm;
    end;对串口研究不是很深,你可以参考一下我的说法。
      

  4.   

    Com口 的2(RXD),3(TXD)短接相当于自发自收啊,对于你的问题,我猜想一下:是不是你的发送和接收函数用了不同的spcomm控件?而接收的那个控件没有打开串口.startcom?或者检查一下你的spcomm控件的onreceive事件有没有Comm1ReceiveData,可能会意外删掉以上只是猜想