我是在程序中根据配置文件动态创建SPCOMM控件 但是
procedure TMainForm.Comm1ReceiveData(Sender: TObject; Buffer: Pointer;
  BufferLength: Word);
这个函数我怎么来调用呢 将数据串口读取出来

解决方案 »

  1.   

    但是一定要缓冲区内有数据才能响应的(才能执行receivedate事件)
      

  2.   

    procedure TFCOMM.Comm1ReceiveData(Sender: TObject; Buffer: Pointer;BufferLength: Word);vari:integer;beginviewstring:="";move(buffer^,pchar(@rbuf^),bufferlength);for i:=1 to bufferlength doviewstring:=viewstring+inttohex(rbuf[i],2)+" ";viewstring:="接受"+viewstring;memo1.lines.add(viewstring);memo1.lines.add("");end;
      

  3.   

    我的控件是动态生成的
    var 
     com:TCOMM;
    .....
    com.create;
    com.comname='COM1';
    com.onreceivedata:=???
    然后 这个函数怎么写
      

  4.   

    com.onreceivedata := Comm1ReceiveData;
      

  5.   

    [Error] Unit1.pas(33): Incompatible types: 'method pointer and regular procedure'
      

  6.   

    過程MyReceiveData一定要定義在創建comm1的同一個單元里原来是这个原因 狂ft
      

  7.   

    procedure Tfmwait.Comm1ReceiveData(Sender: TObject; Buffer: Pointer;
      BufferLength: Word);
    type
      ss=array[1..500]of char ;
    var    str1:^ss;
           i:integer; 
           s:array[0..15] of char ;
           l,v:string;
           n:integer;
    begin  //采集数据进行变换
           str1:=Buffer;  
           for i:=0 to 9 do
           s[i]:=chr(48+i); 
           for i:=10 to 15 do 
           s[i]:=chr(55+i);
          for i:=bufferlength downto 1 do
           begin
             n:=ord(str1^[i]);
             l:=s[n mod 16]  ;
             if l='A' then
                begin
                 l:='0';
                 v:=l+v;
                end
             else
             v:=l+v;//接收到的
    end;
           edtdata.Text:=trim(v);//接收到显示出来
    end;