Delphi6安装SPCOMM串口控件,创建动态Comm: array[1..10] of Tcomm数组后,定义CommReceiveData事件后,无法为控件指定,程序如下:
procedure CommReceiveData(Sender: TObject; Buffer: Pointer;
  BufferLength: Word);
begin
...
end;主程序:
var
Comm: array[1..10] of Tcomm;
i:integer;
begin
  for i := 1 to 10 do
  begin
      Comm[i] := Tcomm.create(self);
      comm[i].BAUDRATE := 9600;
      comm[i].BYTESIZE := _8;
      comm[i].PARITY := None;
      comm[i].ParityCheck := False;
      COMM[i].COMMNAME := 'COM' + inttostr(i);
      COMM[i].OnReceiveData := TForm1.CommReceiveData;//此时出错,见下面
   end;
end;此时系统提示错误:
[Error] ComArray.pas(57): Incompatible types: 'TReceiveDataEvent' and 'Procedure'
[Error] ComArray.pas(13): Unsatisfied forward or external declaration: 'TForm1.CommReceiveData'为什么?谢谢!

解决方案 »

  1.   

    COMM[i].OnReceiveData := Form1.CommReceiveData
      

  2.   

    你如果直接这样定义的
    procedure CommReceiveData(Sender: TObject; Buffer: Pointer;
      BufferLength: Word);
    begin
    ...
    end;
    那么则
    COMM[i].OnReceiveData := CommReceiveData你如果直接这样定义的
    procedure TForm1.CommReceiveData(Sender: TObject; Buffer: Pointer;
      BufferLength: Word);
    begin
    ...
    end;
    那么则
    COMM[i].OnReceiveData := Form1.CommReceiveData
      

  3.   

    事件必须是类的方法,不能是全局函数TForm1 = class(TForm)
      procedure CommReceiveData(...);
      ...
    end;procedure TForm1.CommReceiveData(Sender: TObject; Buffer: Pointer;
      BufferLength: Word);
    begin
    ...
    end;procedure TForm1.FormCreate(...)
    begin
      ...
      Comm[i].OnReceiveData := CommReceiveData;
      ...
    end;