我想创建一个类,从SPComm控件里申明的Tcomm继承,
   TReadCardComm=class(TComm)
   但不知该如何捕获里面的
ReceiveData(Sender: TObject; Buffer: Pointer;BufferLength: Word);事件,你有什么办法吗?
    谢谢指导

解决方案 »

  1.   

    type
      TReceiveDataEvent = procedure (Sender: TObject; Buffer: Pointer;BufferLength: Word) of object;
      TForm1 = class(TForm)
        Button1: TButton;
        procedure Button1Click(Sender: TObject);
      private
        OleReceiveDataEvent: TReceiveDataEvent;
        procedure NewReceiveDataEvent(Buffer: Pointer;BufferLength: Word);
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
    begin
      OleReceiveDataEvent := ReadCardComm1.OnReceiveDataEvent;
      ReadCardComm1.OnReceiveDataEvent := NewReceiveDataEvent;
    end;procedure TForm1.NewReceiveDataEvent(Buffer: Pointer; BufferLength: Word);
    begin
      ShowMessage('OK');
      if Assigned(OleReceiveDataEvent) then //如果原来的事件存在,那么调用它
        OleReceiveDataEvent(……);
    end;—————————————————————————————————
    宠辱不惊,看庭前花开花落,去留无意;毁誉由人,望天上云卷云舒,聚散任风。
    —————————————————————————————————
      

  2.   

    事件是可以继承的,你只需要重新申明这个事件就可以了,比如TForm的事件,它的事件是从TCustomForm继承的,而TForm并没有去实现那些事件,它仅仅是申明一下而已,
    如:
    property OnMouseUp;
      

  3.   

    如果需要捕获这个事件,TComm的Protected有一个触发这个事件的虚拟方法可以继承,原型如下:
    procedure ReceiveData(Buffer: PChar; BufferLength: Word);virtual;你只需覆盖这个方法即可:procedure ReceiveData(Buffer: PChar; BufferLength: Word);override;
    begin
      inherited;
      dosometing....
    end;