我用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; .
请问这是怎么回事呢? .
.
.
.
.
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; .
请问这是怎么回事呢? .
.
我是看例子做的,不过那个例子在design time时就把OnClick 和事件过程用Object Inspector连好了。
投篮的,我也查了。 OnClick是TIWOnClickWithValue类型,在IWDBGrids.pas文件中。
但是整个文件中只有: FOnClick: TIWOnClickWithValue;
property OnClick: TIWOnClickWithValue read FOnClick write FOnClick;
然后再没有别的线索了!
请问下面怎么继续查?
procedure TForm18.dgrdColumns0Click(ASender: TObject;
const AValue: String);
beginend;参数和类型没有问题吧?
types: 'TIWOnClickWithValue' and 'Procedure'这里要求OnClick和tform18.dgrdClick是相同的类型。事件也不过是个属性,如果可以匹配,没道理不能赋值的
环境: 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.------------------------------------------------------------------
你自定义的事件函数又不是一个指定对象的
你必须传入一个对象,
使用对象名而不是类名
onclick := tform18.dgrdclick;应该为onclick := 对象名.dgrdclick;
弹性不够
因为使用的默认SELF.dgrdclick;
onclick := dgrdclick;
why?