procedure TForm1.RzBitBtn1Click(Sender: TObject);
var
  e : TComEvents;
  ch : Byte;begin    M := TComPort.Create(nil);
    ch := $10;
    try
       M.Events := [];
       M.Open;
       M.Write(ch,1);
       e := [ evRxChar ,evCTS ];
       M.WaitForEvent(e,nil,1000);----[Error] Unit1.pas(41): Incompatible types: 'Cardinal' and 'Pointer'
      //M.WaitForEvent(e,WaitInfinite); -----[Error] Unit1.pas(41): Constant expression violates subrange bounds
    if evRxChar in e then
    begin
       ShowMessage('Receive!');
    end;
    finally
       M.Free;
    end;

解决方案 »

  1.   

    老兄,是第二个参数报错了。我刚刚试验一下,发现把第二个参数写一个Cardinal类型到变量,把变量赋值成0.但是我不知道这样会不会有什么问题。
    附加函数声明:
    procedure WaitForEvent(var Events: TComEvents; StopEvent: TEvent; Timeout: Integer);
      

  2.   

    原来如此!StopEvent: TEvent; 
    在window下,TEvent是delphi对event对象的包装。
    StopEvent代表对象的地址,传0,表示不设定事件对象
      

  3.   

    准确到写法是不是Create一个空的TEvent事件呢?
      

  4.   

    不过不传 TEvent这个waitforevent似乎没有意义了。串口编程我不懂。
    关于Tcomport的应用,你应该demo吧。或者你可以参考这个http://it.inhe.net/richbbs/2006/360/3600177.htm
      

  5.   

    我认为waitforevent之所以能够等待,应该是依赖于StopEvent的。
      

  6.   

    TEvent.Create(安全描述,手动复位,信号发生后,事件名称);
    TEvent.Create(nil,True,False,'');
    难道要手动复位?