有办法在onchange事件中“加入”参数吗?(60分)

  • 主题发起人 主题发起人 victor
  • 开始时间 开始时间
V

victor

Unregistered / Unconfirmed
GUEST, unregistred user!
许多控件的onchange事件是如下定义,似乎无法使用参数,
请问谁有解决办法?
type
TNotifyEvent = procedure(Sender: TObject) of object;
property OnChange: TNotifyEvent;

谢谢!
 
你想使用什么参数呢?如果是想获得触发OnChange
事件的控件的信息的话,Sender就是你所需要的。

 
因为我想多个触发事件使用同一个程序,
是因为这些事件触发的程序大多一样,
想在中间带事件的一个编号,
我在这用的onchange事件是由DDE返回的,
因此sender参数不能判断出我说的事件编号。
 
用DDE返回的?我不知道什么意思,但多个触发事件使用同一个程序
是很容易的。

type
TForm1 = class(TForm)
Edit1: TEdit;
procedure MyOnChangeEvent(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

implementation

procedure TForm1.MyOnChangeEvent(Sender: TObject);
begin
//Write your Code here;
end;


然后property list 中事件编辑的列表框会显示出你定义的这个事件过程,
将Edit1的OnChange事件指定为这个过程即可。

即使你说的由DDE返回的事件,只要是某个控件的OnChange事件,也可以通过
程序赋值的方式实现: ^^^^^^^^^^^^^^

MyComponent1.OnChange:=MyOnChangeEvent;
MyComponent2.OnChange:=MyOnChangeEvent;
...

这样,每次该事件激活,其Sender将是不同的Component;
 
可以将你说的事件编号也用DDE传回,将其作为全局变量使用。
虽然笨点,但可以解决问题。
 
用tag传参数比较方便!
在MyOnChangeEvent 函数中将sender强制
成TContorl就可用tag了。
如TContorl(Sender).tag
因为tag是一integer,所以可保存一指针,
这样也就是说可以传任何参数.
 
各位的建议对我都有帮助,但

DDE server是买一个国外公司的产品,我
主要编写DDE client程序,事件的编号
无法由DDE server返回,server上数据的
变化直接激活我的client程序,
我现在就想知道类似于dwwang说的,

MyComponent1.OnChange:=MyOnChangeEvent;
MyComponent2.OnChange:=MyOnChangeEvent;
...
但每个MyComponentX的处理有一点点差别,只能
带某个参数来区别,用全局变量,我考虑过,
事件的编号无法得到。因此,实现上也有点问题。

有没有类似:
MyComponent2.OnChange:=MyOnChangeEvent(Number:integer);
之类的处理?

 
似乎你还是没理解我的意思:

“但每个MyComponentX的处理有一点点差别,只能
带某个参数来区别,”

--你这个参数从哪里来呢?总是和当前这个ComponentX相关吧?

MyComponent2.OnChange:=MyOnChangeEvent之后,

当你的MyOnChangeEvent被MyComponent2激活后,
它的Sender参数就是MyComponent2,难道这不足以
让你知道你所需要的那个Number吗?

如果这个数值是预先定义的(每个Compoent对应一个),
就用hfade的方法放在tag里也可以。

实在不行你把程序说来听听。
 
各位我用.tag解决了问题,谢谢大家!!!

这个分数我应该给哪位呢?????
各位的建议都对我有帮助!
 
看看哪位最有帮助价值了或者谁最卖力了.(才60分平分呢有些麻烦).
 
你用.tag难道不给我?
 
这样吧,dwwang, hfade各30分。分是少了点
不好意思拉,下次分给多点。

我怎样才能把分分开?!
 
写信给版主.

(唉!总算没百忙活)
 
后退
顶部