我用IntraWeb开发。放了一个IWDBGrid控件dgrd。TForm18 = class(TIWAppForm)
.
.
.
    procedure dgrdClick(Sender: TObject; const AValue: String); //自定义事件过程 protected
    produce GoDoc(const Awh: integer); //一个过程,写好了。
end;implementation
       .
       .
       .
     TForm18.dgrdClick(Sender: TObject; const AValue: String); //实现这个事件过程
     begin
         GoDoc(const Awh: integer);
     end;
     
    
   procedure TForm18.IWAppFormCreate(Sender: TObject);
     var mycolum : TCollectionItem;
         grdcol : TIWDBGridColumn;
     begin
            .
            .    //连接数据库的有关代码。
            .
        
    mycolumn := dgrd.columns.add;    //动态生成IWDBGrid的列
        grdcol := tiwdbgridcolumn(mycolumn);
        with grdcol do
        begin
            datafield := 'bh';
            title.text := '编号';
            linkfield := 'wh';
            OnClick := tform18.dgrdClick; //开始报错:[Error]  Incompatible
types: 'TIWOnClickWithValue' and 'Procedure'
        end;
     
     end;         .
    
请问这是怎么回事呢?          .
              .
 

解决方案 »

  1.   

    TForm18.dgrdClick(Sender: TObject; const AValue: String); -->TForm18.dgrdClick(Sender: TObject;); 试看一下
      

  2.   

    TForm18.dgrdClick(Sender: TObject);
      

  3.   

    看看OnClick所属的事件类型,就清楚了
      

  4.   

    TForm18.dgrdClick(Sender: TObject; const AValue: String);
    我是看例子做的,不过那个例子在design time时就把OnClick 和事件过程用Object Inspector连好了。
    投篮的,我也查了。 OnClick是TIWOnClickWithValue类型,在IWDBGrids.pas文件中。
    但是整个文件中只有: FOnClick: TIWOnClickWithValue;
                         
                         property OnClick: TIWOnClickWithValue read FOnClick write FOnClick;
    然后再没有别的线索了!
    请问下面怎么继续查?
      

  5.   

    你在dgrd.columns的任意一个column双击OnClick事件,看看自动产生的事件处理过程原型不就知道该怎么定义你的处理过程了?
      

  6.   

    回楼上的,我双击了,结果是这样的:
    procedure TForm18.dgrdColumns0Click(ASender: TObject;
      const AValue: String);
    beginend;参数和类型没有问题吧?
      

  7.   

    OnClick := tform18.dgrdClick; //开始报错:[Error]  Incompatible
    types: 'TIWOnClickWithValue' and 'Procedure'这里要求OnClick和tform18.dgrdClick是相同的类型。事件也不过是个属性,如果可以匹配,没道理不能赋值的
      

  8.   


    环境: delphi + intraweb 7.31 + mysql 4.02a, dbexpress连接
    下面是我编译通过的-------------------------------------------------------------------------
    unit Unit2;interfaceuses
      Classes, SysUtils, IWAppForm, IWApplication, IWColor, IWTypes, DBXpress,
      FMTBcd, DB, SqlExpr, DBClient, Provider, IWGrids, IWDBGrids, Controls,
      IWVCLBaseControl, IWBaseControl, IWBaseHTMLControl, IWControl,
      IWCompButton;type
      TIWForm2 = class(TIWAppForm)
        IWButton1: TIWButton;
        IWDBGrid1: TIWDBGrid;
        DataSetProvider1: TDataSetProvider;
        ClientDataSet1: TClientDataSet;
        DataSource1: TDataSource;
        SQLConnection1: TSQLConnection;
        SQLQuery1: TSQLQuery;
        ClientDataSet1Account_id: TIntegerField;
        ClientDataSet1A_user_id: TIntegerField;
        ClientDataSet1A_balance: TFloatField;
        ClientDataSet1A_state: TStringField;
        ClientDataSet1A_start_date: TSQLTimeStampField;
        procedure dgrdClick(Sender: TObject; const AValue: String); //自定义事件过程
        procedure IWAppFormCreate(Sender: TObject);
      protected
        procedure GoDoc(const Awh: integer);//一个过程,写好了。
      public
      end;implementation{$R *.dfm}procedure TIWForm2.dgrdClick(Sender: TObject; const AValue: String); //实现这个事件过程
    begin
       GoDoc(1);
    end;procedure TIWForm2.GoDoc(const Awh: integer);
    begin
    //
    end;procedure TIWForm2.IWAppFormCreate(Sender: TObject);
    var
      mycolumn : TCollectionItem;
      grdcol : TIWDBGridColumn;
    begin  mycolumn := IWDBGrid1.Columns.Add;//动态生成IWDBGrid的列
      grdcol := tiwdbgridcolumn(mycolumn);
      with grdcol do
        begin
            datafield := 'Account_id';
            title.text := '编号';
            linkfield := 'A_user_id';
            OnClick := dgrdClick;
        end;
    end;initialization
      TIWForm2.SetAsMainForm;end.------------------------------------------------------------------
      

  9.   

    当然是错的了
    你自定义的事件函数又不是一个指定对象的
    你必须传入一个对象,
    使用对象名而不是类名
    onclick := tform18.dgrdclick;应该为onclick := 对象名.dgrdclick;
      

  10.   

    楼上的虽然能执行,显然结构很差,
    弹性不够
    因为使用的默认SELF.dgrdclick;
      

  11.   

    同意notruiyi(notruiyi)
     
    onclick := dgrdclick;
      

  12.   

    to notruiyi(notruiyi)什么“弹性不够”?不是很清楚,软件工程没学好。……
    why?