我在EXE程序中的代码拷贝到我 ACTIVEX的代码上。XXX.MyImageMouseDown(Sender : TObject; Button: TMouseButton; shift: tshiftstate; x, y :integer)
begin
   if button = mbleft then   // 把这句代码去掉编译就通过了, 可是在我的原来是对的
    begin
      ///////
     end;end;InComPatible types 错误

解决方案 »

  1.   

    Ctrl+[单击],看看mbLeft被指向哪个单元的定义.
      

  2.   

    button = mbleft 错误啊
      

  3.   


    Button是 TMouseButton类型,而TMouseButton是个枚举类型,他定义在
    Controls单元中,如果要使用此类型,你必须引用Controls单元。
    他的定义如下:
     TMouseButton = (mbLeft, mbRight, mbMiddle);因此在你uses部分加入Controls单元就好了。
      

  4.   

    楼上的都错了,楼主的代码是在activeForm中实现的,并不是有没有引用Controls的问题,其实是已经引用Controls了。
    原因是:在ActiveForm中响应鼠标事件的,鼠标事件是定义在Use中的*_TLB单元中的。interface       
      uses   
          Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,   
          ActiveX, AxCtrls, ActiveFormProj1_TLB, StdVcl, ExtCtrls, StdCtrls;   
        
        
      改成这样就行了!   
        
    interface     
      uses   
          ActiveFormProj1_TLB, Windows, Messages, SysUtils, Classes, Graphics, Controls,   
          Forms, Dialogs, ActiveX, AxCtrls, StdVcl, ExtCtrls, StdCtrls;   既把ActiveFormProj1_TLB前提到use最前。这里的ActiveFormProj1是你的工程名。重新编译即可以。
      

  5.   

    InComPatible types 错误  类型不兼容啊TMouseButton 是一个集合类型  mbleft 是集合中的 membership参考Delphi HelpOperator Operation Operand types Result type Example
    + union set set Set1 + Set2
    - difference set set S - T
    * intersection set set S * T
    <= subset set Boolean Q <= MySet
    >= superset set Boolean S1 >= S2
    = equality set Boolean S2 = MySet
    <> inequality set Boolean MySet <> S1
    in membership ordinal, set Boolean A in Set1所以正确操作是用 inif mbleft in Button then
    .,...