关于对DELPHI事件驱动机制疑惑的问题 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
我编了一只工程,这工程(.dpr)文件里有两只FORM,名字分别为FORM1,FORM2
在FORM2的ONKEYUP里写了根据不同按鍵做不同功能的代码
FORM1呢USES了FORM2
我想在FORM1的ONKEYUP时调用FORM2的ONKEYUP事件
我这样来写了
form1.onkeyup 代码如下了
var
tempkey:word;
begin
tempkey:=key;
form2.onkeyup(nil,tempkey,[])
end;
上面代码的意思就是把按FORM1的鍵值传到form2里了,并且执行FORM2里相应的程序段
但根本不执行form2的onkeyup
为何会这样呢,哪里错了
问题点数:0、回复次数:13Top
1 楼pilicat(Delphi迷)回复于 2003-02-03 14:21:56 得分 0
改为:
form2.onkeyup(form1,tempkey,[]);
试试看吧.
Top
2 楼ehom(?!)回复于 2003-02-03 14:30:09 得分 0
1.方法指针FOnKeyUp没有指向一对象方法,也就是没有给OnKeyUp赋一时间处理方法!
2.窗体实例Form2还未创建!Top
3 楼sunware()回复于 2003-02-03 15:52:35 得分 0
上面代码的意思就是把按FORM1的鍵值传到form2里了
大错特错!
这只不过是把Form1的键值作参数传给Form2的那个处理程序了,而这个处理程序是运作在Form1里的.Form2可从来没接到过这么个按键消息哦!
Top
4 楼hntjc()回复于 2003-02-04 13:40:47 得分 0
楼上的大虾了你这句话什么意思啦
form2的那个处理程序了是在FORM2 的ONKEYUP里,怎么会运做在FORM1里呢
我只不过了是在FORM1里手工调用FORM2的ONKEYUP里
大家讨论讨论了Top
5 楼RamjetZhang(万花从中一点红,玉树临风王小桃是也)回复于 2003-02-04 15:06:17 得分 0
你的form2创建了否?只要建了,sender是nil或者form1倒无所谓;
执行时出错了?Top
6 楼xiaoxiao_8(小小_8)回复于 2003-02-04 15:06:24 得分 0
既然是在FORM1 的ONKEYUP时调用FORM2中的一个过程,那不用搞得这么麻烦。
在FORM2中写一个过程,如procedure Form2.form1Keyup(key:word);
在Form1.onkeyup中,写一句: form2.form1keyup(key);
就可以了
Top
7 楼xiaoxiao_8(小小_8)回复于 2003-02-04 15:39:13 得分 0
或者这样也行:
form2.keyup(nil,tempkey,[])
直接写上子程序的名字,不要加ON
Top
8 楼cg1120(代码最优化-§惟坚韧者始能遂其志§)回复于 2003-02-04 17:13:31 得分 0
消息所响应的事件是由操作系统控制分发的,你最好采用手动发送相同的消息给FORM2Top
9 楼hntjc()回复于 2003-02-04 18:28:50 得分 0
我的功能代码已经写在了FORM2的ONKEYUP里了
再按照楼上的大虾写一个过程了,搬来搬去了太麻烦了
我想直接从FORM1里调用FORM2的ONKEYUP事件
但用
FORM2.ONKEYUP(NIL,TEMPKEY,[])运行的时候了执行了出错
出错的信息好像了什么内存地址无效之类的
我的窗口了是工程里AUTOCREATE的Top
10 楼ehom(?!)回复于 2003-02-04 19:14:42 得分 0
OnKeyUp指向的不就是一个事件处理过程,直接或间接调用效果是等同的,不存在麻烦不麻烦的问题!
既然已经确定窗体室例已创建,这样试试!
if @Form2.OnKeyUp<>nil then Form2.OnKeyUp(nil,tempkey,[]);
如果不出错了,说明就是我上面说的第一个错误!Top
11 楼Eastunfail(龍子龍孫) (Serpent's Embrace)回复于 2003-02-04 19:29:28 得分 0
为什么不用SendMessage?Top
12 楼RamjetZhang(万花从中一点红,玉树临风王小桃是也)回复于 2003-02-05 01:09:08 得分 0
begin
tempkey:=key;
form2.onkeyup(nil,tempkey,[])
end;
我用了很好,一点没错?Top
13 楼hjb8000(北极熊)回复于 2003-02-05 08:31:43 得分 0
如果FORM2已创建,程序好象没问题,这种用法很常见,你在FORM2内调用试试!!Top




