如何把一个带参数过程的挂接到一个事件上(15分)

  • 主题发起人 主题发起人 SYT
  • 开始时间 开始时间
S

SYT

Unregistered / Unconfirmed
GUEST, unregistred user!
我在变程声明了一个变量aEdit:TEdit,并动态地根据程序需要
由aEdit.create创建,在aEdit的onChange事件需要调用一个
过程:
Procedure my(bEdit);
begin
bEdit.width:=length(bEdit.text)*7;
end;
该过程中的参数bEdit需要从onchange中传递过来
请问如何将my挂接到onchange上,或者当onchange
事件发生时也能触发my过程。

 
my((Sender as TEdit))
 
var
aEdit: TEdit;
...
aEdit:=TEdit.Create;
aEdit.OnChange:=My;
//;连接OnChange事件到My过程
...
procedure My(bEdit: TObject);
begin
TEdit(bEdit).width:=length(TEdit(bEdit).text)*7;
end;
 
To Jetideas
你这样好象编译通不过。因为OnChange为procedure (Sender:TObject) of Ojbect.
所以,My过程应该在一个Class中申明。
如:
TForm1=class(TForm)
private
{....}
protected
{....}
procedure My(bEdit:TObject);
{....}
end;

{...}
procedure TForm1.My(bEdit:TObject);
var
tmpEdit:TEdit;
begin
if bEdit is TEdit then
begin
tmpEdit:=(bEdit as TEdit);
{....}
end;
end;
 
哦,对对,我忘了,多谢沈兄!:)
 
如果多个FORM要用这个函数,还是public出来吧,呵呵
其它就要用
form2.edit1.onchange := form1.my;
 
沈前卫:
my过程不放在类中声明,用其他方法声明如TNotifyEvent等可以吗?
 
Jetideas:
如果我用aEdit:=TEDIT.CREATE动态的产生了一个aEdit控件,那我如何编写其
onChange程序呢?
 
?
var
myEdit:TEdit;
begin
myEdit := TEdit.create(FORM1);
myEdit.parent := form1;
myEdit.OnChange := my;//right?
end;
 
CJ:
我的想法是这样的,但不知怎样实现?
 
To SYT:
OnChange程序段应该在编译前就有,如果想动态建立,可以使用DLL嘛,如果还
不行,就在程序中自己写机器代码吧!!! {B-))) (开玩笑),使用动态装载DLL
是个好办法!
 
>>SYT
可以这样
Type
TForm1 = class(TForm) //这是原来的Form
...
public
EditChangeEvent(Sender: TObject);
//自定义事件方法
end;

....
begin
MyEdit:=TEdit.Create(Form1)
MyEdit.Parent:=Form1;
MyEdit.OnChange:=TForm1.EditChangeEvent;
end;

注意:EditChangeEvent一定要放在类里面(可以不是TForm类)
 
多人接受答案了。
 
后退
顶部